texlive[41513] Master/texmf-dist: repere (21jun16)

commits+karl at tug.org commits+karl at tug.org
Tue Jun 21 23:24:55 CEST 2016


Revision: 41513
          http://tug.org/svn/texlive?view=revision&revision=41513
Author:   karl
Date:     2016-06-21 23:24:54 +0200 (Tue, 21 Jun 2016)
Log Message:
-----------
repere (21jun16)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/metapost/repere/repere-doc.pdf
    trunk/Master/texmf-dist/doc/metapost/repere/repere-doc.tex
    trunk/Master/texmf-dist/metapost/repere/repere.mp

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/metapost/repere/README.md

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/metapost/repere/README

Deleted: trunk/Master/texmf-dist/doc/metapost/repere/README
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/repere/README	2016-06-21 12:47:34 UTC (rev 41512)
+++ trunk/Master/texmf-dist/doc/metapost/repere/README	2016-06-21 21:24:54 UTC (rev 41513)
@@ -1,12 +0,0 @@
-repere.mp
-
-This package provides MetaPost macros for drawing in a coordinate system :
-- axis, grids
-- points, vectors
-- functions (curves, tangents, integrals, sequences)
-- statistic diagrams
-
-The doc is in french, sorry for that
-
-License LPPL
-

Added: trunk/Master/texmf-dist/doc/metapost/repere/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/repere/README.md	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/metapost/repere/README.md	2016-06-21 21:24:54 UTC (rev 41513)
@@ -0,0 +1,11 @@
+This package provides MetaPost macros for drawing sec­ondary school math­e­mat­ics figures in a coordinate system :
+- axis, grids
+- points, vectors
+- functions (curves, tangents, integrals, sequences)
+- statistic diagrams
+- plane geometry (polygons, circles)
+
+The doc is in french...
+
+License LPPL
+


Property changes on: trunk/Master/texmf-dist/doc/metapost/repere/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/metapost/repere/repere-doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/metapost/repere/repere-doc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/repere/repere-doc.tex	2016-06-21 12:47:34 UTC (rev 41512)
+++ trunk/Master/texmf-dist/doc/metapost/repere/repere-doc.tex	2016-06-21 21:24:54 UTC (rev 41513)
@@ -1,5 +1,8 @@
 \documentclass[11pt,a4paper,french]{article}
-% to compile this doc (needs geometriesyr16.mp http://melusine.eu.org/syracuse/poulecl/macros/):
+% Needs geometriesyr16.mp
+%http://melusine.eu.org/syracuse/poulecl/geometriesyr16/distrib/geometriesyr16-050408.tgz
+
+% To compile:
 % (pdf)latex repere-doc.tex
 % mpost repere-doc.mp
 % mpost repere-doc.mp
@@ -11,9 +14,12 @@
   \usepackage[T1]{fontenc}
   \usepackage{lmodern}
   \usepackage{textcomp}
+  \usepackage{mathtools}
 
   \usepackage{geometry}
   \geometry{twoside,hmargin=2cm,vmargin={1.5cm,1.8cm},includefoot}
+  
+  \usepackage[bottom]{footmisc}
 
   \usepackage{mflogo}
   
@@ -51,7 +57,8 @@
   \lstset{columns=flexible,%
           language=MetaPost,%
           showstringspaces=false,%
-          basicstyle=\ttfamily}
+          basicstyle=\ttfamily,
+          literate={é}{{\'e}}1}
 
 
   \usepackage{babel}
@@ -219,7 +226,7 @@
 \title{Documentation de \texttt{repere.mp}}
 \date{\today}
 \author{Olivier \textsc{Péault}%
-\footnote{E-mail : \href{mailto:o.peault at gmail.com}{\texttt{o.peault at gmail.com}}}}
+\footnote{E-mail : \href{mailto:o.peault at openmailbox.org}{\texttt{o.peault at openmailbox.org}}}}
 \maketitle
 
 \setcounter{tocdepth}{2}
@@ -233,7 +240,6 @@
 
 \begin{codecache}
 input geometriesyr16;
-input latexmp;
 input repere;
 \end{codecache}
 
@@ -241,12 +247,12 @@
 \section{Utilisation du fichier}
 Les macros du fichier \verb+repere.mp+ ont pour but de simplifier la création de figures dans un repère du plan avec \MP{}. L'idée de départ est de coller le plus possibles aux besoins de l'enseignement secondaire de mathématiques.
 
-Il est possible d'utiliser \verb+repere+ et \verb+geometriesyr+ (les macros de Christophe \textsc{Poulain} pour la géométrie disponibles à l'adresse \url{http://melusine.eu.org/syracuse/poulecl/macros/}) dans une même figure comme le montrent les exemples page \pageref{exgeom}.
+Il est possible d'utiliser \verb+repere+ et \verb+geometriesyr+ (les macros de Christophe \textsc{Poulain} pour la géométrie disponibles à l'adresse \url{http://melusine.eu.org/syracuse/poulecl/macros/}) dans une même figure comme le montre l'exemple page \pageref{exgeom}.
 
-Le fichier \verb+repere.mp+ doit être placé dans un répertoire accessible à \MP{} (Par ex. le répertoire \verb+metapost+ du \verb+texmf+ local). De plus, la ligne \verb+input repere;+ doit apparaître dans le document contenant les figures.
+Le fichier \verb+repere.mp+ doit être placé dans un répertoire accessible à \MP{} (Par ex. le répertoire \verb+metapost+ du \verb+texmf+). De plus, la ligne \verb+input repere;+ doit apparaître dans le document contenant les figures.
 
 
-Certaines des étiquettes (noms de points, de courbes, de vecteurs...) sont composées automatiquement au format \LaTeX{} mais la compilation peut devenir assez longue pour un nombre important de figures car un fichier est créé et compilé automatiquement par \MP{} pour chaque étiquette. Il est alors possible d'utiliser le fichier \verb+latexmp.mp+ à condition de placer l'instruction \verb+input latexmp;+ avant l'instruction \verb+input repere;+. Attention, utiliser \verb+latexmp.mp+ oblige à compiler deux fois les documents.
+Les étiquettes (noms de points, de courbes, de vecteurs...) sont composées automatiquement au format \LaTeX{} avec le package \verb+latexmp.mp+. Il est donc nécessaire de compiler deux fois les documents.
 
 
 \section{Repère utilisateur}
@@ -325,10 +331,8 @@
 
 \end{description}
 
-Les axes sont dessinés, gradués et étiquetés par défaut sur toute la longueur du repère utilisateur. Pour des valeurs différentes on peut utiliser les macros suivantes :
 
 
-
 \begin{exemple}
 repere(-3,3,1cm,-1,1,1cm);
 draw axex(1,1);
@@ -362,6 +366,9 @@
 fin;
 \end{exemple}
 
+
+
+
 \subsubsection{Réglages des axes}
 
 Les axes sont dessinés, gradués et étiquetés par défaut sur toute la longueur du repère utilisateur. Pour des valeurs différentes on peut utiliser les macros suivantes :
@@ -438,6 +445,8 @@
 \begin{description}
 \item[axexpart.pos(x1,lab1,x2,lab2,...)] graduation et étiquetage partiels de l'axe des abscisses pour les valeurs \verb+x1+, \verb+x2+... et les étiquettes \verb+lab1+, \verb+lab2+... à la position \verb+pos+. Si \verb+pos+ est omis, les étiquettes sont placées à la position \verb+bot+. Les étiquettes peuvent être soit des chaînes de caractères ("aa", "bonjour"), soit des expressions du type \verb+btex $\pi$ etex+ (ou \verb|LaTeX("$\pi$")| voir page \pageref{latex}), soit d'autres figures. Si \verb+labn+ est omis, la valeur de \verb+xn+ sera utilisée comme étiquette. Pour obtenir une graduation sans étiquette, on peut utiliser la chaîne vide \verb+""+.
 
+On peut désactiver le dessin de la graduation en donnant la valeur \verb|false| à \verb|boolgradxpart|.
+
 \item[axeypart.pos(y1,lab1,y2,lab2,...)] même chose sur l'axe des ordonnées. Si \verb+pos+ est omis, les étiquettes sont placées à la position \verb+lft+.
 \end{description}
 
@@ -560,12 +569,15 @@
 fin;
 \end{exemple}
 
+
+
+
 \section{Points, vecteurs}
 
 \subsection{Points}
 \label{points}
 \begin{description}
-\item[\_c(x,y)] désigne le point (ou le vecteur) de coordonnées cartésiennes \verb+x+ et \verb+y+ dans le repère utilisateur.
+\item[(x,y)] désigne le point (ou le vecteur) de coordonnées cartésiennes \verb+x+ et \verb+y+ dans le repère utilisateur.
 
 \item[pol(r,t)] désigne le point (ou le vecteur) de coordonnées $(r\cos t;r\sin t)$ dans le repère utilisateur.
 
@@ -587,8 +599,8 @@
 \begin{exemple}[0.6]
 repere(-3,3,0.9cm,-2.5,5,0.9cm);
 pair A,B,C[],D,E,F;
-A=_c(1,1);B=_c(2,3);
-D=_c(-2,-1);E=_c(-1,-1);F=_c(-1,-2);
+A=(1,1);B=(2,3);
+D=(-2,-1);E=(-1,-1);F=(-1,-2);
 draw axes(1,0);
 marque_p:="";drawoptions(withcolor magenta);
 nomme.llft(A);nomme.top(B);draw A--B;
@@ -597,15 +609,18 @@
 marque_p:="creux";drawoptions(withcolor orange);
 nomme.bot(pol(sqrt(2),-pi/4),
           LaTeX("$\sqrt{2}e^{-i\frac{\pi}{4}}$"));
-nomme.bot(_c(-1.5,1),LaTeX("$(-1,5;1)$"));
+nomme.bot((-1.5,1),LaTeX("$(-1,5;1)$"));
 marque_p:="plein";drawoptions(withcolor violet);
 for i=2 upto 4:
-  C[i]=_c(-3+i/2,i);nomme.lft(C[i]);
+  C[i]=(-3+i/2,i);nomme.lft(C[i]);
 endfor
 draw cadre;
 fin;
 \end{exemple}
 
+
+
+
 \subsection{Vecteurs}
 \begin{description}
 \item[vecteur.pos(A,u,nom)] figure formée du représentant du vecteur \verb+u+ d'origine \verb+A+ ainsi que de \verb+nom+ placé à la position \verb+pos+ par rapport au milieu de la flèche. Si \verb+nom+ est une chaine de caractère, il sera affiché avec une flèche. Si \verb+nom+ est omis, \verb+u+ surmonté d'une flèche est utilisé. S'il s'agit d'un élément d'un tableau de points (\verb+u1+, \verb+u2+...), le nombre est affiché en indice.
@@ -615,8 +630,8 @@
 \begin{exemple}[0.6]
 repere(-1,5.5,0.7cm,-4,4,0.8cm);
 pair A,B,C[],u,v,w[];
-u=_c(2,2);v=_c(2,-1);
-A=_c(1,1);B=A+u;
+u=(2,2);v=(2,-1);
+A=(1,1);B=A+u;
 draw axes(1,0);
 draw base(O,i,j);
 drawoptions(withcolor cyan);
@@ -627,7 +642,7 @@
                  LaTeX("$\vect{u}+\vect{v}$"));
 drawoptions(withcolor marine);
 for i=1 upto 3:
- C[i]=_c(1,i-4);w[i]=_c(1.5,0.5*i-1);
+ C[i]=(1,i-4);w[i]=(1.5,0.5*i-1);
 draw vecteur.bot(C[i],w[i]);
 endfor
 draw cadre;
@@ -635,6 +650,7 @@
 \end{exemple}
 
 
+
 \section{Droites, courbes...}
 
 \subsection{Droites}
@@ -652,7 +668,7 @@
 \begin{exemple}[0.65]
 repere(-2,3,1cm,-2,3,1cm);
 pair A,B;
-A=_c(-0.5,-1);B=_c(1.5,1.5);
+A=(-0.5,-1);B=(1.5,1.5);
 draw axes(1,0);
 nomme.ulft(A);
 nomme.lrt(B);
@@ -669,10 +685,14 @@
 \verb|vardef f(expr x)=2x+1 enddef;|) et de définir des courbes passant par des points donnés (\verb+A..B..C+). Ces possibilités sont utilisées dans les macros qui suivent.
 
 \begin{description}
-\item[courbefonc(f,xmin,xmax,n) ou courbefonc(f)(xmin,xmax,n)] courbe représentant la fonction \verb+f+ entre \verb+xmin+ et \verb+xmax+ en utilisant \verb+n+ points d'interpolation.
+\item[courbefonc(f)()] courbe représentant la fonction $f$ sur l'intervalle définissant le repère.
 
-\item[courbepoints(f,xmin,xmax,n)] ne trace que les \verb+n+ points sans les relier. Les points sont dessinés en fonction de la valeur de \verb+marque_p+ (voir \ref{points}).
+\item[courbefonc(f)(xmin,xmax)] courbe représentant la fonction $f$ sur l'intervalle $[xmin;xmax]$.
 
+\item[courbefonc(f)(xmin,xmax,n)] courbe représentant la fonction $f$ sur l'intervalle $[xmin;xmax]$ en utilisant \verb+n+ points d'interpolation. La valeur par défaut de \verb|n| est 60.
+
+\item[courbepoints(f)(xmin,xmax,n)] ne trace que les \verb+n+ points sans les relier. Les points sont dessinés en fonction de la valeur de \verb+marque_p+ (voir \ref{points}).
+
 \item[fonccourbe.p(x)] image de \verb+x+ par la fonction dont la courbe représentative est le chemin \verb+p+. La macro renvoie 0 si la fonction n'est pas définie.
 
 \item[nomme.pos(p,x,nom)] affiche \verb+nom+ au point d'abscisse \verb+x+ de la courbe \verb+p+ à la position \verb+pos+. \verb+nom+ peut être soit une chaîne de caractères, soit une expression du type \verb+btex ... etex+, soit une autre figure. Si \verb+nom+ est omis, le nom \verb+p+ est affiché. S'il s'agit d'un élément d'un tableau de points (\verb+p1+, \verb+p2+...), le nombre est affiché en indice.
@@ -686,11 +706,11 @@
 path C_f;
 draw axes(1,1);
 drawoptions(withcolor moutarde);
-C_f=courbefonc(f)(-2,5,50);
+C_f= courbefonc(f)();
 draw C_f withpen pencircle scaled 1;
 nomme.llft(C_f,4.7);
 drawoptions(withcolor beige);
-draw courbepoints(g,0,4,9);
+draw courbepoints(g)(0,4,9);
 fin;
 \end{exemple}
 
@@ -708,10 +728,10 @@
 path p,C_f;
 pair I[],A[];
 vardef f(expr x)= x**2-2x enddef;
-p=_c(-2,-2).._c(-1,1).._c(0,2).._c(1,1)
-       .._c(2,-2).._c(3,-3).._c(3.5,-2.5)
-       .._c(4,-1);
-C_f=courbefonc(f,-2,4,40);
+p=(-2,-2)..(-1,1)..(0,2)..(1,1)
+       ..(2,-2)..(3,-3)..(3.5,-2.5)
+       ..(4,-1);
+C_f= courbefonc(f)(-2,2.5);
 draw axes(1,1);
 drawoptions(withpen pencircle scaled 1);
 draw p withcolor bleu;
@@ -729,7 +749,7 @@
 \begin{description}
 \item[marquepointcourbe(p,x1,x2,...)] marque les points de la courbe \verb+p+ d'abscisses \verb+x1+, \verb+x2+... La marque dépend de la valeur de \verb+marque_p+.
 
-\item[marquepointchemin(p,n1,n2,...)] dans le cas d'un chemin défini par \verb+A..B..C..+, marque le \verb+n1+ème point, le \verb+n2+ième point... La marque dépend de la valeur de \verb+marque_p+. Attention, le premier point est numéroté 0.
+\item[marquepointchemin(p,n1,n2,...)] dans le cas d'un chemin défini par \verb+A..B..C..+, marque le \verb+n1+-ième point, le \verb+n2+-ième point... La marque dépend de la valeur de \verb+marque_p+. Attention, le premier point est numéroté 0.
 
 \end{description}
 
@@ -740,10 +760,10 @@
 path p,C_f;
 pair I[],A[];
 vardef f(expr x)= x**2-2x enddef;
-p=_c(-2,-2).._c(-1,1).._c(0,2)
-  .._c(1,1).._c(2,-2).._c(3,-3)
-  .._c(3.5,-2.5).._c(4,-1);
-C_f=courbefonc(f,-2,4,40);
+p=(-2,-2)..(-1,1)..(0,2)
+  ..(1,1)..(2,-2)..(3,-3)
+  ..(3.5,-2.5)..(4,-1);
+C_f= courbefonc(f)(-2,3);
 draw axes(1,1);
 drawoptions(withpen pencircle scaled 1);
 draw p withcolor bleu;
@@ -754,7 +774,6 @@
 fin;
 \end{exemple}
 
-
 \subsection{Dérivée et tangentes}
 \begin{description}
 \item[der.p(x)] image de \verb+x+ par la dérivée de la fonction dont la courbe représentative est \verb+p+.
@@ -773,10 +792,10 @@
 \begin{exemple}
 repere(-2.5,4.5,1cm,-3.5,2.5,1cm);
 path p,q;
-p=_c(-2,-2){dir 60}.._c(-1,1)
-  .._c(0,2){right}.._c(1,1).._c(2,-2)
-  .._c(3,-3){right}.._c(4,-2){(1,2)};
-q=courbefonc(der.p,-1,4,40);
+p=(-2,-2){dir 60}..(-1,1)
+  ..(0,2){right}..(1,1)..(2,-2)
+  ..(3,-3){right}..(4,-2){(1,2)};
+q= courbefonc(der.p)(-1,4);
 draw axes(1,1);
 drawoptions(withpen pencircle scaled 1);
 draw p withcolor  bleu;
@@ -823,7 +842,7 @@
 repere(-2,4.5,1cm,-1,4,1cm);
 vardef f(expr x)=sqrt(2*x+4) enddef;
 path C_f,sr;
-C_f=courbefonc(f,-2,5,50);
+C_f= courbefonc(f)();
 sr=suiterec(f,0,3,-1.2);
 draw axes(1,0);
 drawoptions(withpen pencircle scaled 1);
@@ -840,7 +859,7 @@
 repere(-0.5,5,1cm,-0.5,5,1cm);
 vardef f(expr x)=4-0.8*x enddef;
 path C_f,sr;
-C_f=courbefonc(f,-1,5,10);
+C_f= courbefonc(f)();
 sr=suiterec(f,0,5,0.2);
 draw axes(1,0);
 drawoptions(withpen pencircle scaled 1);
@@ -858,7 +877,6 @@
 
 
 
-
 \section{Surfaces}
 
 \subsection{Calcul intégral}
@@ -874,8 +892,8 @@
 vardef f(expr x)= -(x/4)**3+0.75x enddef;
 vardef g(expr x)= -((x-2)**2)/9+4 enddef;
 path C_f,C_g,p,q;
-C_f:=courbefonc(f,-3.5,6,40);
-C_g:=courbefonc(g,-3.5,6,40);
+C_f:= courbefonc(f)();
+C_g:= courbefonc(g)();
 p:=entrecourbes(C_f,C_g,-2,1);
 q:=souscourbe(C_f,3,5);
 fill p withcolor 0.5Violet;
@@ -902,7 +920,7 @@
  -((x-2)**4)/32+((x-2)**2)/2+1
 enddef;
 path Cf,r[];
-Cf=courbefonc(f,-2.5,6.5,50);
+Cf= courbefonc(f)();
 r1=rectangles.max(Cf,2,5.5,8);
 r2=rectangles.min(Cf,2,5.5,8);
 r3=rectangles.droite(Cf,-2,1,10);
@@ -947,53 +965,10 @@
 fin;
 \end{exemple}
 
-\subsection{Remplissage}
-Pour remplir des chemins fermés avec autre chose que de la couleur, \verb+repere+ permet l'utilisation de la syntaxe \verb+fill p avec motif+ où \verb+motif+ est un des motifs décrits ci-dessous. Cette instruction peut être complétée par des options de dessin (\verb+withpen+, \verb+withcolor+...).
 
-\begin{description}
-\item[hachures(pas,angle)] hachures espacées de \verb+pas+ et formant un angle en degrés de \verb+angle+ avec l'horizontale. Si les valeurs sont omises, \verb|pas| vaut 5 et \verb+angle+ vaut 60.
 
 
-\item[briques(larg,haut,dec)] briques de largeur \verb+larg+, de hauteur \verb+haut+ et décalées d'une ligne à l'autre de \verb+dec+. Si les valeurs sont omises, \verb|larg| vaut 12, \verb|haut| vaut 6 et \verb+dec+ vaut 6.
 
-
-\item[vagues(per,amp,dec)] (d'après le manuel de l'utilisateur) \og vagues \fg{} de période \verb+per+, d'amplitude \verb+amp+ et décalées d'une ligne à l'autre de \verb+dec+. Si les valeurs sont omises, \verb|per| vaut 20, \verb|amp| vaut 3 et \verb+dec+ vaut 10.
-\end{description}
-
-
-
-\begin{exemple}[0.55]
-repere(-1.5,4.5,1cm,-1.5,7.5,1cm);
-path c[];picture lab;numeric u;u:=3cm;
-c1=fullcircle scaled 2.5cm;
-for k=1 upto 6:
-  i:=(k-1) mod 2;j:=(k-1) div 2;
-  c[k]:=c1 shifted (u*i,u*j);
-endfor;
-fill c1 withcolor lime;
-fill c1 avec hachures(10,30) dashed evenly;
-fill c2 withcolor lime;
-fill c2 avec hachures();
-fill c3 withcolor (0,0.65,0.8,0.48);
-fill c3 avec briques(15,5,4);
-fill c4 withcolor (0,0.65,0.8,0.48);
-fill c4 avec briques();
-fill c5 withcolor (1,0,0,0.2);
-fill c5 avec vagues(30,10,20)
-           withpen pencircle scaled 2;
-fill c6 withcolor (1,0,0,0.2);
-fill c6 avec vagues();
-for k=1 upto 6:
-  i:=(k-1) mod 2;j:=(k-1) div 2;
-  draw c[k];
-  lab:=thelabel("c"&decimal(k),u*(i,j));
-  unfill bbox lab;draw lab;
-endfor;
-fin;
-\end{exemple}
-
-
-
 \section{Projections sur les axes}
 
 \subsection{Projetés}
@@ -1015,12 +990,12 @@
 repere(-1.5,3.5,1cm,-2.2,2.5,1cm);
 path Cf; pair A[];
 vardef f(expr x)= x**2-2x-0.5 enddef;
-Cf=courbefonc(f,-2,4,40);
+Cf= courbefonc(f)();
 ptantecedents(A,2,Cf);
 draw axes(1,1);
 draw Cf withpen pencircle scaled 1 withcolor bleu;
 drawoptions(dashed evenly withcolor rouge);
-draw projectionaxes(_c(1.3,f(1.3)),
+draw projectionaxes((1.3,f(1.3)),
          LaTeX("$x$"),LaTeX("$f(x)$"));
 draw projectionx.urt(A1,LaTeX("$x_1$"));
 draw projectionx.llft(A2,LaTeX("$x_2$"),-6);
@@ -1040,16 +1015,16 @@
 repere(-1,5,0.9cm,-1,4.5,1cm);
 vardef f(expr x)=x**2-5x+7 enddef;
 draw axes(1,1);
-draw courbefonc(f,-1,5,50)
+draw courbefonc(f)()
        withpen pencircle scaled 1 withcolor bleu;
 drawoptions(dashed evenly withcolor rouge);
-draw projectionx.bot(_c(1,f(1)));
-draw projectiony.llft(_c(2.5,f(2.5)),"0,75");
-draw projectionaxes(_c(4,f(4)));
+draw projectionx.bot((1,f(1)));
+draw projectiony.llft((2.5,f(2.5)),"0,75");
+draw projectionaxes((4,f(4)));
 drawoptions(withcolor violet);
 draw intervallex.OF(1,4);
 draw intervalley.FF(0.75,3);
-label(LaTeX("$f(]1;4])=[0,75;3]$"),_c(2.5,4));
+label(LaTeX("$f(]1;4])=[0,75;3]$"),(2.5,4));
 draw cadre;
 fin;
 \end{exemple}
@@ -1056,7 +1031,7 @@
 
 
 
-\section{Statistiques}
+\section{Statistiques et probabilités}
 
 \subsection{Boite à moustache}
 \begin{description}
@@ -1086,16 +1061,212 @@
  draw projboitemoustache.bot(1) dashed evenly;
  drawoptions(withcolor blue);
  draw boitemoustache(0,3.14,6,8,10,2cm,0.7cm);
- draw projboitemoustache.bot(0.00456,"$\pi$","$\num{2x3}$","$x$","Max")
-                                                                 dashed evenly;
+ draw projboitemoustache.bot(0.0456,"$\pi$","$\num{2x3}$","$x$","Max") dashed evenly;
 fin;
 \end{exemplev}
 
+
+\subsection{Diagrammes}
+\begin{description}
+\item[diagrammebatons((v1,e1),(v2,e2),...(vn,en))] Figure formée des \verb|n| segments joignant les points \verb|(v1,e1),(v2,e2),...(vn,en)| et leur projeté sur l'axe des abscisses. Les bâtons sont surmontés d'un point dont le diamètre est égal à la largeur des segments multiplié par \verb|diampointsbatons|. \verb|diampointsbatons| est égal à 5 par défaut. On peut lui donner la valeur 0 pour ne pas avoir ces points.
+\end{description}
+
+\begin{exemple}[0.6]
+repere(-0.5,5,1cm,-0.5,5,1cm);
+ picture diag;
+ draw axes(1,1);
+ diag:=diagrammebatons((1,2),(2,4),(3,2),(4,1));
+ draw diag epaisseur 2 withcolor rouge;
+fin
+\end{exemple}
+
+
+\begin{description}
+\item[diagrammebarres((a1,h1),(a2,h2),...(an,hn))] Figure formée de \verb|n| barres rectangulaires de hauteurs \verb|h1| \dots \verb|hn| aux abscisses \verb|a1| \dots \verb|an|. La largeur de ces barres est le nombre \verb|largbarres| qui vaut 20 par défaut.
+\end{description}
+
+\begin{exemple}[0.6]
+repere(-0.5,5,1cm,-0.5,5,1cm);
+ path diag;
+ draw axey(1,1);
+ diag:=diagrammebarres((1,2),(2,4),(3,2),(4,1));
+ fill diag withcolor cyan;
+ draw diag epaisseur 1 withcolor marine;
+ flecheaxe:=false;
+ draw axex(0,0);
+ boolgradxpart:=false;
+ draw axexpart.bot(1,"A",2,"B",3,"C",4,"D");
+fin
+\end{exemple}
+
+\subsection{Probabilités}
+
+Quelques fonctions mathématiques sont proposées. Pour les grandes valeurs, on dépasse rapidement les capacités de \MP. Il est dans ce cas conseillé de compiler en utilisant la ligne de commande \verb|mpost -numbersystem="double" <fichier>.mp|.
+
+
+\begin{description}
+\item[factorielle(n)] Entier égal à $n!$.
+\item[binom(n,k)] Entier égal à $\binom{n}{k}$.
+\item[binomiale(n,p,k)] $P(X=k)$ pour $X$ suivant la loi binomiale de paramètres $n$ et $p$.
+\item[diagrammebinomiale(n,p)] Diagramme en bâtons de la loi binomiale de paramètres $n$ et $p$.
+\end{description}
+
+
+\begin{exemple}
+repere(-2,16,0.45cm,-0.1,0.25,15cm);
+setall(0,16,0,0.25);
+draw axex(1,1);
+draw axey(0.1,0.1);
+picture diag;
+diampointsbatons:=0;
+diag:=diagrammebinomiale(15,0.6);
+draw diag withcolor blue epaisseur 4;
+fin;
+\end{exemple}
+
+
+\section{Géométrie}
+Certaines des macros suivantes sont largement inspirées des macros de \verb|geometriesyr16.mp| de Christophe \bsc{Poulain}.
+
+\subsection{Polygones}
+\begin{description}
+\item[polygone(A,B,C,...)] Chemin fermé représentant le polygone $ABC...$
+
+\item[triangle(A,B,C)] Cas particulier du précédent. Chemin fermé représentant le triangle $ABC$.
+
+\item[parallélogramme(A,B,C)] Chemin fermé représentant $ABCD$ où $D$ est le quatrième point du parallélogramme.
+
+\item[polygoneregulier(A,B,n)] Chemin fermé représentant le polygone régulier de sens direct à $n$ côtés dont un des côtés est $[AB]$.
+
+\item[equilateral(A,B)] Cas particulier du précédent. Triangle équilatéral de sens direct de côté $[AB]$.
+
+\item[carre(A,B)] Autre cas particulier. Carré de sens direct de côté $[AB]$.
+\end{description}
+
+\begin{exemple}[0.51]
+repere(-1,5,1cm,-1,4,1cm);
+draw axes(1,1);
+pair A,B,C,D,E,F,G;
+A=(0,1);B=(2,0);C=(4,2);D=(3,3);E=(1,3);
+F=(4,0);G=(3,2);
+fill triangle(A,F,G) withcolor orange;
+draw triangle(A,F,G);
+draw polygone(A,B,C,D,E);
+draw parallelogramme(D,G,E) withcolor vert;
+fin;
+\end{exemple}
+
+
+\begin{exemple}[0.53]
+repere(-1,5,1cm,-1,4,1cm);
+draw axes(1,1);
+pair A,B;
+A=(1,1);B=(3,0.5);
+fill polygoneregulier(A,B,5) withcolor bleu;
+fill equilateral(A,B) withcolor cyan;
+draw polygoneregulier(A,B,5);
+draw equilateral(A,B);
+fin;
+\end{exemple}
+
+\subsection{Cercles et arcs}
+
+\begin{description}
+\item[cercle(A,B,C)] Cercle circonscrit au triangle $ABC$.
+\item[cercle(O,A)] Cercle de centre $O$ passant par $A$.
+\item[cercle(O,r)] Cercle de centre $O$ et de rayon $r$. L'unité de longueur est l'unité de l'axe des abscisses.
+\item[arccercle(A,O,B)] Arc de cercle de sens direct de centre $O$, passant par $A$ et s'appuyant sur la demi-droite $[OA)]$.
+\end{description}
+
+
+\begin{exemple}
+repere(-1,5,1cm,-0.5,4,1cm);
+draw axes(1,1);
+pair A,B,C;
+A=(1,1);B=(2,0);C=(3.5,2);
+nomme.lft(A);nomme.urt(C);nomme.top(B);
+draw triangle(A,B,C) withcolor bleu;
+draw cercle(A,B,C) withcolor marine;
+draw A--B withcolor rouge epaisseur 1;
+draw cercle(A,B) withcolor rouge;
+fin;
+\end{exemple}
+
+
+\begin{exemple}
+repere(-1,5,1cm,-2,8,0.5cm);
+draw axes(1,1);
+pair A,M,B;
+A=(2,2);M=(2,6);B=(3,2);
+nomme.bot(A);nomme.rt(B);nomme.top(M);
+draw B--A--M;
+draw cercle(A,2);
+draw arccercle(B,A,M);
+fin;
+\end{exemple}
+
+
+
+\subsection{Codage des segments et des angles}
+
+\begin{description}
+\item[marqueangle(A,O,B,n)] Figure formée de \verb|n| arcs de cercle de centre $O$ et de rayon moyen \verb|taille_marque_a| (qui vaut par défaut \verb|0.4cm|) permettant de marquer l'angle géométrique $\widehat{AOB}$. Les arcs son séparés de \verb|sep_marque_a| qui vaut par défaut \verb|1.5|.
+
+Il s'agit d'un chemin fermé qui peut donc être rempli.
+
+\item[marqueangle(A,O,B)] Arc de cercle de centre \verb|O| et de rayon \verb|taille_marque_a| permettant de marquer l'angle orienté avec \verb|drawarrow|.
+
+\item[nomme.pos(A,O,B,texte)] Place le texte entre \verb|A| et \verb|B|, à une distance \verb|taille_marque_a| du centre, à la position \verb|pos|.
+\end{description}
+
+
+\begin{exemple}
+repere(-2,12,0.4cm,-2,10,0.4cm);
+pair A,B,C;
+A=(1,2);B=(11,2);C=(8,9);
+draw axes(0,0);
+draw triangle(A,B,C);
+nomme.llft(A);nomme.lrt(B);nomme.top(C);
+fill marqueangle(C,B,A,3) withcolor red;
+draw marqueangle(C,B,A,3);
+drawarrow marqueangle(A,C,B);
+fill marqueangle(B,A,C,1) withcolor vert;
+draw marqueangle(B,A,C,1);
+nomme.rt(B,A,C,LaTeX("\ang{45}"));
+fin;
+\end{exemple}
+
+\begin{description}
+\item[marqueangledroit(A,O,B)] Chemin fermé permettant de marquer l'angle droit $\widehat{AOB}$ sous forme d'un losange (il s'agit donc d'un carré si l'angle est réellement droit). Le côté du losange est \verb|taille_marque_ad| et vaut \verb|0.3cm| par défaut.
+\item[marquesegment(A,B,n)] Figure formées de \verb|n| marques sur le segment $[AB]$. Ces marques ont une taille de \verb|taille_marque_s| (\verb|0.3cm| par défaut), forment un angle en degrés de \verb|angle_marque_s| avec le segment (\verb|60| par défaut) et sont séparées de \verb|sep_marque_s| (\verb|2| par défaut).
+\end{description}
+
+\begin{exemple}[0.6]
+repere(-1,10,0.5cm,-1,9,0.5cm);
+pair A,B,C,A',B',C',u;
+A=(3,1);B=(5,2);C=(1,5);u=(3,3);
+A'-A=B'-B=C'-C=u;
+draw projectionaxes(A,LaTeX("$x_A$"),
+                 LaTeX("$y_A$")) dashed evenly;
+draw axes(0,0);
+drawoptions(withcolor pourpre);
+draw triangle(A,B,C);draw triangle(A',B',C');
+draw marqueangledroit(B,A,C);
+draw marqueangledroit(B',A',C');
+draw marquesegment(B,C,2);
+draw marquesegment(B',C',2);
+nomme.llft(A);nomme.lrt(B);nomme.ulft(C);
+nomme.llft(A');nomme.lrt(B');nomme.ulft(C');
+drawoptions(withcolor vertfonce);
+draw vecteur.lrt(B,u);draw vecteur.lrt(C,u);
+fin;
+\end{exemple}%
+
 \section{Divers}
 \subsection{Composition des étiquettes}
-Tous les textes et étiquettes peuvent être composés en utilisant la macro ci-dessous. Cette macro utilise \verb+latexmp+ si ce fichier est chargé ou l'écriture dans un fichier externe (adaptation de la macro \verb+TEX+) dans le cas contraire.
+Tous les textes et étiquettes peuvent être composés en utilisant la macro ci-dessous.
 \begin{description}
- \item[LaTeX(ch)] \label{latex} Figure formée de la chaîne \verb+ch+ composée avec \LaTeX. Il est donc possible d'utiliser la macro \verb|decimal()| de \MP.
+ \item[LaTeX(ch)] \label{latex} Figure formée de la chaîne \verb+ch+ composée avec \LaTeX{} et mise à l'échelle \verb|defaultscale|. Cette macro utilise la commande \verb|textext| de \verb|luamplib| dans le cas de l'utilsation de Lua\LaTeX{} et \verb|textext| de \verb|latexmp| dans le cas d'une compilation \MP{} \og standard \fg. Ce dernier cas nécessite alors deux compilations.
 \end{description}
 
 
@@ -1102,12 +1273,24 @@
 \begin{exemple}[0.65]
 repere(-1,7,1cm,-1,1,1cm);
 for i=2 upto 6:
-label(LaTeX("$\frac{1}{"&decimal(i)&"}$"),(i*cm,0));
+label(LaTeX("$\frac{1}{"&decimal(i)&"}$"),(i,0));
 endfor
 fin;
 \end{exemple}
 
+\begin{description}
+\item[label.pos(fig,point)] Commande de \MP{} qui permet de placer la figure \verb|fig| au niveau du point \verb|point|.
+\end{description}
 
+\begin{exemple}[0.55]
+repere(-1,5,1cm,-1,4,1cm);
+draw axes(1,1);
+label.ulft(LaTeX("Abscisses"),(5,0.1));
+label.lrt(LaTeX("Ordonnées"),(0.1,4));
+label(LaTeX("$f(x)=\pi^2\sqrt{x}$"),(2,2));
+fin;
+\end{exemple}
+
 \subsection{Couleurs}
 Certaines couleurs sont définies par leur nom et peuvent être utilisées directement : 
 
@@ -1117,11 +1300,11 @@
  path rectangle;
  save a,b,dech,decv;
  a:=25;b:=12;dech:=70;decv:=-20;
- rectangle = (0,0)--(a,0)--(a,b)--(0,b)--cycle;
+ rectangle = ((0,0)--(a,0)--(a,b)--(0,b)--cycle) transformed inverse _T;
  vardef couleur(expr t)=
     image(%
           fill rectangle withcolor scantokens(t);
-          label.rt(LaTeX("\smash{" & t & "}"),(a,b/4))
+          label.rt(LaTeX("\smash{" & t & "}"),(a,b/4) transformed inverse _T)
           )
  enddef;
  draw couleur("rouge");
@@ -1151,6 +1334,54 @@
 
 Toutes ces couleurs sont définies selon le modèle \og rgb \fg. Pour les obtenir selon le modèle \og cmyk \fg, remplacer la première lettre par une majuscule.
 
+
+\subsection{Remplissage}
+Pour remplir des chemins fermés avec autre chose que de la couleur, \verb+repere+ permet l'utilisation de la syntaxe \verb+fill p avec motif+ où \verb+motif+ est un des motifs décrits ci-dessous. Cette instruction peut être complétée par des options de dessin (\verb+withpen+, \verb+withcolor+...).
+
+\begin{description}
+\item[hachures(pas,angle)] hachures espacées de \verb+pas+ et formant un angle en degrés de \verb+angle+ avec l'horizontale. Si les valeurs sont omises, \verb|pas| vaut 5 et \verb+angle+ vaut 60.
+
+
+\item[briques(larg,haut,dec)] briques de largeur \verb+larg+, de hauteur \verb+haut+ et décalées d'une ligne à l'autre de \verb+dec+. Si les valeurs sont omises, \verb|larg| vaut 12, \verb|haut| vaut 6 et \verb+dec+ vaut 6.
+
+
+\item[vagues(per,amp,dec)] (d'après le manuel de l'utilisateur) \og vagues \fg{} de période \verb+per+, d'amplitude \verb+amp+ et décalées d'une ligne à l'autre de \verb+dec+. Si les valeurs sont omises, \verb|per| vaut 20, \verb|amp| vaut 3 et \verb+dec+ vaut 10.
+\end{description}
+
+
+
+\begin{exemple}[0.55]
+repere(-1.5,4.5,1cm,-1.5,7.5,1cm);
+path c[];picture lab;
+c1=fullcircle scaled 2.5;
+for k=1 upto 6:
+  i:=(k-1) mod 2;j:=(k-1) div 2;
+  c[k]:=c1 shifted (3*i,3*j);
+endfor;
+fill c1 withcolor lime;
+fill c1 avec hachures(10,30) dashed evenly;
+fill c2 withcolor lime;
+fill c2 avec hachures();
+fill c3 withcolor (0,0.65,0.8,0.48);
+fill c3 avec briques(15,5,4);
+fill c4 withcolor (0,0.65,0.8,0.48);
+fill c4 avec briques();
+fill c5 withcolor (1,0,0,0.2);
+fill c5 avec vagues(30,10,20)
+           withpen pencircle scaled 2;
+fill c6 withcolor (1,0,0,0.2);
+fill c6 avec vagues();
+for k=1 upto 6:
+  i:=(k-1) mod 2;j:=(k-1) div 2;
+  draw c[k];
+  lab:=thelabel("c"&decimal(k),3*(i,j));
+  unfill bbox lab;draw lab;
+endfor;
+fin;
+\end{exemple}
+
+
+
 \subsection{Figures pour une présentation}
 \begin{description}
 \item[figureinter] exporte la figure telle qu'elle est au moment où cette commande apparait. La numérotation est incrémentée et la figure peut continuer.
@@ -1161,12 +1392,12 @@
  repere(-3,3,0.7cm,-1,5,0.7cm);
   path C_f;
   vardef f(expr x)=x**2 enddef;
-  C_f=courbefonc(f,-3,3,50);
+  C_f= courbefonc(f)();
   draw quadrillage(1,1);
   draw axes(1,1);
   draw cadre;
   figureinter;
-  draw courbepoints(f,-2,2,9) withcolor rouge;
+  draw courbepoints(f)(-2,2,9) withcolor rouge;
   figureinter;
   draw C_f withcolor bleu withpen pencircle scaled 1;
  fin;
@@ -1193,6 +1424,9 @@
 \end{minipage}
 \end{center}
 
+
+
+
 \subsection{Code embarqué dans un document \LaTeX}
 
 Certains packages permettent d'écrire du code \MP{} directement dans un document \LaTeX. \verb|repere| est compatible avec, entre autres, \verb|emp| et \verb|mpgraphics|.
@@ -1223,13 +1457,12 @@
 \begin{document}
 \begin{empfile}
 \begin{empcmds}
- input latexmp;
  input repere;
 \end{empcmds}
 \begin{emp}(0,0)
- repere(-3,3,0.8cm,-2.5,2.5,1cm);
- draw axes(1,1);
- fin;
+  repere(-3,3,1cm,-2,2,1cm);
+   draw axes(1,1);
+  fin;
 \end{emp}
 \end{empfile}
 \end{document}
@@ -1247,13 +1480,12 @@
 \usepackage[runs=2]{mpgraphics}
 \begin{document}
 \begin{mpdefs}
- input latexmp;
  input repere;
 \end{mpdefs}
 \begin{mpdisplay}
- repere(-3,3,0.8cm,-2.5,2.5,1cm);
- draw axes(1,1);
- fin;
+  repere(-3,3,1cm,-2,2,1cm);
+   draw axes(1,1);
+  fin;
 \end{mpdisplay}
 \end{document}
 \end{lstlisting}
@@ -1260,29 +1492,66 @@
 \end{minipage}
 
 
-\section{Exemples d'utilisation simultanée de \texttt{repere} et \texttt{geometriesyr}}
+Il est aussi possible d'utiliser Lua\LaTeX{} avex le package \verb|luamplib|. Il faut alors charger les packages \verb|siunitx| et \verb|esvect| utilisés par \verb|repere|.
 
-\label{exgeom}Il est possible, dans une figure créée avec \verb+repere+, d'utiliser certaines macros de \verb+geometriesyr+. Il faut alors charger \verb+geometriesyr+ \emph{avant} \verb|repere|.
+\begin{center}
+\begin{minipage}[t]{0.45\linewidth}
+{\centering \textbf{Utilisation de Lua\LaTeX}\par}
 
-\begin{exemple}[0.6]
-repere(-1,10,0.5cm,-1,9,0.5cm);
-pair A,B,C,A',B',C',u;
-A=_c(3,1);B=_c(5,2);C=_c(1,5);u=_c(3,3);
-A'-A=B'-B=C'-C=u;
-draw projectionaxes(A,LaTeX("$x_A$"),
-                 LaTeX("$y_A$")) dashed evenly;
-draw axes(0,0);
-drawoptions(withcolor pourpre);
-draw triangle(A,B,C);draw triangle(A',B',C');
-draw codeperp(B,A,C,7);draw codeperp(B',A',C',7);
-draw codesegments(B,C,B',C',2);
-nomme.llft(A);nomme.lrt(B);nomme.ulft(C);
-nomme.llft(A');nomme.lrt(B');nomme.ulft(C');
+
+\verb|lualatex monfichier.tex|
+
+\begin{lstlisting}[frame=single,frameround=tttt,backgroundcolor=\color{LightSteelBlue},language={[LaTeX]TeX}]
+\documentclass{article}
+\usepackage{fontspec}
+\usepackage{siunitx}
+\usepackage{esvect}
+\usepackage{luamplib}
+\begin{document}
+\everymplib{input repere;}
+\begin{mplibcode}
+  repere(-3,3,1cm,-2,2,1cm);
+  draw axes(1,1);
+fin;
+\end{mplibcode}
+\end{document}
+\end{lstlisting}
+\end{minipage}
+\end{center}
+
+\section{Dessin à main levée avec \texttt{geometriesyr}}
+
+\label{exgeom}Il est possible, dans une figure créée avec \verb+repere+, d'utiliser le \og dessin à main levée \fg{} de \verb+geometriesyr+. Il faut alors charger \verb+geometriesyr+ \emph{avant} \verb|repere| et utiliser les fonctions de dessin telles que \verb|cercles|, \verb|triangle|...
+
+\begin{exemple}
+repere(-0.5,5,1cm,-0.5,5,1cm);
+coulpoint:=blue;coullabel:=blue;
+pair A,B,C,D;
+A=(0.5,0.5);B=(4,1);C=(3,4);
+typetrace:="mainlevee";
+draw axes(1,1);
+drawoptions(withcolor violet);
+draw triangle(A,B,C);
+nomme.llft(A);nomme.lrt(B);
+nomme.top(C);
+draw marqueangle(B,A,C,1);
 drawoptions(withcolor vertfonce);
-draw vecteur.lrt(B,u);draw vecteur.lrt(C,u);
+draw cercles(CentreCercleC(A,B,C),A);
 fin;
-\end{exemple}%
+\end{exemple}
 
+
+
+\begin{codecache}
+end
+\end{codecache}
+
+\makeatletter
+\immediate\closeout\verbatim at out
+\makeatother
+\end{document}
+
+
 \vspace{2em}
 
 
@@ -1357,7 +1626,6 @@
 \makeatletter
 \immediate\closeout\verbatim at out
 \makeatother
-%\addtocontents{toc}{\protect\end{multicols}}
 \end{document}
 
 

Modified: trunk/Master/texmf-dist/metapost/repere/repere.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/repere/repere.mp	2016-06-21 12:47:34 UTC (rev 41512)
+++ trunk/Master/texmf-dist/metapost/repere/repere.mp	2016-06-21 21:24:54 UTC (rev 41513)
@@ -1,8 +1,8 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%                        repere.mp                           %%
 %%   Macros pour la construction de figures dans un repère    %%
-%%                    o.peault at gmail.com                      %%
-%%               Version 13.12 (Décembre 2013)                %%
+%%                 o.peault at openmailbox.org                   %%
+%%                 Version 16.06 (Juin 2016)                  %%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
 % This work may be distributed and/or modified under the conditions of
@@ -13,18 +13,20 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 input format;
+if not known mplib: input latexmp fi;
 
 warningcheck:=0;
 
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%   REPERE   %%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 numeric _nfig,_nbaxes,theta,taillegrad,taillepoint,taillecroix,facteurx,facteury;
-boolean flecheaxe,displayfrac,coupe;
+boolean flecheaxe,displayfrac,coupe,boolgradxpart,boolgradypart;
 _nfig:=1;
 path cadre;
 numeric _diag,_largcadre,_hautcadre,_tfig;
-pair _O,_I,_J;
+pair _O,_I,_J,_O_;
 transform _T;
 picture _axorlab; pair poslabO;
 
@@ -35,10 +37,35 @@
 boolean rep_groupe;
 rep_groupe:=false;
 
+%%%%%%%%%%% Sauvegarde macros plain
 
 let oldbeginfig=beginfig;
 let oldendfig=endfig;
 
+let olddraw = draw;
+let olddrawarrow = drawarrow;
+let olddrawdblarrow = drawdblarrow;
+let oldfill = fill;
+vardef theoldlabel@#(expr s,z) =  % Position s near z
+  save p; picture p;
+  if picture s:  p=s
+  else:    p = s infont defaultfont scaled defaultscale
+  fi;
+  p shifted (z + labeloffset*laboff@# -
+     (labxf@#*lrcorner p + labyf@#*ulcorner p
+       + (1-labxf@#-labyf@#)*llcorner p
+     )
+  )
+enddef;
+vardef oldbbox primary p =
+  llcorner p-(bboxmargin,bboxmargin) -- lrcorner p+(bboxmargin,-bboxmargin)
+  -- urcorner p+(bboxmargin,bboxmargin) -- ulcorner p+(-bboxmargin,bboxmargin)
+  -- cycle
+enddef;
+
+
+%%%%%%% Redéfinition beginfig
+
 def beginfig(expr c)=
   oldbeginfig(c);
   _nfig:=c;
@@ -51,9 +78,11 @@
   rep_groupe:=false
 enddef;
 
+
+%%%%%%%%%% Définition du repère
+
 vardef repere@#(text t)=
  if (str @#="") or (str @#="larg") or (str @#="orth") or (str @#="prop"): 
-%    _nfig:=_nfig+1;definitionrepere@#(t)
     definitionrepere@#(t)
  else:
     reperenum@#(t)
@@ -84,17 +113,75 @@
   _T:=identity xscaled Ux yscaled Uy slanted cosd(theta) yscaled sind(theta);
   _defcadre;
   settout(Xmin,Xmax,Ymin,Ymax);
-  _O:=_c(0,0); xO:=0 ; yO:=0;
-  _I:=_c(1,0); _J:=_c(0,1);
+  _O:=_cart(0,0); xO:=0 ; yO:=0;_O_:=(0,0);
+  _I:=_cart(1,0); _J:=_cart(0,1);
   taillegrad:=0.8mm;taillepoint:=3;taillecroix:=1mm;_nbaxes:=0;_axorlab:=nullpicture;poslabO:=(0,0);
   marque_p := "plein";displayfrac:=false;flecheaxe:=true;coupe:=true;
+  boolgradxpart:=true;boolgradypart:=true;
   defaultscale:=1;
   unitex:=abs(_I);unitey:=abs(_J);unite:=unitex;
   facteurx:=1;facteury:=1;
   string extranumx,extranumy;
   extranumx=extranumy="";
+  init_traces;
 enddef;
 
+%%%% Initialisations tracés (redéfinition draw etc.)
+def init_traces =
+  %% draw
+  def draw expr p =
+    addto currentpicture
+    if picture p:
+      also p
+    else:
+      doublepath p transformed _T withpen currentpen
+    fi
+    _op_
+  enddef;
+  %% fill
+  def fill expr c =
+    if path c:
+       addto currentpicture contour (c transformed _T) _op_
+    else:
+      olddraw c
+    fi
+  enddef;
+  %% thelabel
+  vardef thelabel@#(expr s,z) =  % Position s near z
+    save p; picture p;
+    if picture s:  p=s
+    else:    p = s infont defaultfont scaled defaultscale
+    fi;
+    p shifted (_cart(z) + labeloffset*laboff@# -
+       (labxf@#*lrcorner p + labyf@#*ulcorner p
+         + (1-labxf@#-labyf@#)*llcorner p
+       )
+    )
+  enddef;
+  %% drawarrow
+  def drawarrow expr p = _apth:=p transformed _T; _finarr enddef;
+  def drawdblarrow expr p = _apth:=p transformed _T; _findarr enddef;
+  %% bbox
+  vardef bbox primary p =
+    if picture p: oldbbox p transformed inverse _T
+    else: oldbbox p
+    fi
+  enddef;
+enddef;
+
+def _finarr text t =
+  olddraw _apth t;
+  filldraw arrowhead _apth  t
+enddef;
+
+vardef arrowhead expr p = %redéfinition flèches
+  save q,e; path q; pair e;
+  e = point length p of p;
+  q = gobble(p shifted -e cutafter makepath(pencircle scaled 2ahlength))
+    cuttings;
+  (q rotated .5ahangle & reverse q rotated -.5ahangle -- 0.5*(point 0 of q)-- cycle)  shifted e
+enddef;
+
 def setaxes(expr a,b,c,d)=
   AxeXmin:=a;AxeXmax:=b;AxeYmin:=c;AxeYmax:=d
 enddef;
@@ -121,16 +208,19 @@
 let setall=settout;
 
 def fin =
-  if _nbaxes=1: draw _axorlab fi;
-  if coupe: clip currentpicture to cadre fi;
+  if _nbaxes=1: olddraw _axorlab fi;
+  if coupe: clip currentpicture to (cadre transformed _T) fi;
   if bf: oldendfig; bf:=false;_nfig:=_nfig+1 fi;
 enddef;
 
 def _defcadre=
-   cadre:=_c(Xmin,Ymin)--_c(Xmin,Ymax)--_c(Xmax,Ymax)--_c(Xmax,Ymin)--cycle;
+   cadre:=(Xmin,Ymin)--(Xmin,Ymax)--(Xmax,Ymax)--(Xmax,Ymin)--cycle;
    _diag:=abs(llcorner cadre - urcorner cadre);
+   _diag_:=abs(llcorner _cart(cadre) - urcorner _cart(cadre));
    _largcadre:=abs(llcorner cadre - lrcorner cadre);
+   _largcadre_:=abs(llcorner _cart(cadre) - lrcorner _cart(cadre));
    _hautcadre:=abs(llcorner cadre - ulcorner cadre);
+   _hautcadre_:=abs(llcorner _cart(cadre) - ulcorner _cart(cadre));
    _tfig:=max(_largcadre,_hautcadre);         % compatibilité geometriesyr
 enddef;
 
@@ -139,7 +229,7 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 def interaxes(expr a,b) =
-  _O:=_c(a,b);
+  _O:=_cart(a,b);_O_:=(a,b);
   xO:=a;
   yO:=b;
 enddef;
@@ -163,7 +253,7 @@
   if numeric st: pic:=LaTeX("$\num{" & decimal(st) & extranumx & "}$")
   elseif string st: pic:=LaTeX(st)
   else: pic:=st fi;
-  thelabel.@#(pic,_c(ab,yO) shifted (dec*_posgradx@#))
+  theoldlabel.@#(pic,_cart(ab,yO) shifted (dec*_posgradx@#))
 enddef;
 
 vardef _etiqy_@#(expr ro,dec,st)=   %étiquettes axe des ordonnées
@@ -172,17 +262,17 @@
   if numeric st: pic:=LaTeX("$\num{" & decimal(st) & extranumy & "}$")
   elseif string st: pic:=LaTeX(st)
   else: pic:=st fi;
-  thelabel.@#(pic,_c(xO,ro) shifted (dec*_posgrady@#))
+  theoldlabel.@#(pic,_cart(xO,ro) shifted (dec*_posgrady@#))
 enddef;
 
 
 vardef graduationx(expr x)=          %%%%%%% graduation axe des abscisses
-   ((0,taillegrad)--(0,-taillegrad)) rotated (theta-90) shifted _c(x,yO)
+   ((0,taillegrad)--(0,-taillegrad)) rotated (theta-90) shifted _cart(x,yO)
 enddef;
 
 
 vardef graduationy(expr y)=          %%%%%%% graduation axe des ordonnées
-   ((taillegrad,0)--(-taillegrad,0)) shifted _c(xO,y)
+   ((taillegrad,0)--(-taillegrad,0)) shifted _cart(xO,y)
 enddef;
 
 vardef etiquettex@#(expr x)=
@@ -195,9 +285,9 @@
 enddef;
 
 
-vardef dessinaxex=_c(AxeXmin,yO)--_c(AxeXmax,yO) enddef;
+vardef dessinaxex=_cart(AxeXmin,yO)--_cart(AxeXmax,yO) enddef;
 
-vardef dessinaxey=_c(xO,AxeYmin)--_c(xO,AxeYmax) enddef;
+vardef dessinaxey=_cart(xO,AxeYmin)--_cart(xO,AxeYmax) enddef;
 
 
 vardef graduationsaxex(expr grad)=      %%%% ensemble des graduations abscisses
@@ -205,10 +295,10 @@
    $=image(%
     imax:=floor((GradXmax-xO)/grad);imin:=ceiling((GradXmin-xO)/grad);
     for i=imin upto imax-1:
-     draw graduationx(arrondimil(i*grad)+xO) withpen pencircle scaled 0.5bp;
+     olddraw graduationx(arrondimil(i*grad)+xO) withpen pencircle scaled 0.5bp;
     endfor
     % dernière graduation
-    if AxeXmax*Ux-(imax*grad+xO)*Ux>ahlength: draw graduationx(arrondimil(imax*grad)+xO) withpen pencircle scaled 0.5bp fi);
+    if AxeXmax*Ux-(imax*grad+xO)*Ux>ahlength: olddraw graduationx(arrondimil(imax*grad)+xO) withpen pencircle scaled 0.5bp fi);
    $
 enddef;
 
@@ -217,10 +307,10 @@
    $=image(%
     imax:=floor((GradYmax-yO)/grad);imin:=ceiling((GradYmin-yO)/grad);
     for i=imin upto imax-1:
-     draw graduationy(arrondimil(i*grad)+yO) withpen pencircle scaled 0.5bp;
+     olddraw graduationy(arrondimil(i*grad)+yO) withpen pencircle scaled 0.5bp;
     endfor;
     % dernière graduation
-    if AxeYmax*Uy-(imax*grad+yO)*Uy>ahlength: draw graduationy(arrondimil(imax*grad)+yO) withpen pencircle scaled 0.5bp fi);
+    if AxeYmax*Uy-(imax*grad+yO)*Uy>ahlength: olddraw graduationy(arrondimil(imax*grad)+yO) withpen pencircle scaled 0.5bp fi);
    $
 enddef;
 
@@ -242,15 +332,15 @@
 	   else: labmax:=nullpicture
    	fi;
    	% tracé première étiquette
-	   if xpart ((ulcorner labmin) transformed inverse _T)>=Xmin: draw labmin fi;
+	   if xpart ((ulcorner labmin) transformed inverse _T)>=Xmin: olddraw labmin fi;
    	% tracé autres étiquettes
    	for i=imin+1 upto imax-1:
     		if (i<>0):
-    		  draw etiquettex.@#(arrondimil(i*val)+xO)
+    		  olddraw etiquettex.@#(arrondimil(i*val)+xO)
     		fi;
    	endfor;
    	% tracé dernière étiquette
-   	if xpart ((lrcorner labmax) transformed inverse _T)<=Xmax: draw labmax fi;
+   	if xpart ((lrcorner labmax) transformed inverse _T)<=Xmax: olddraw labmax fi;
         );
       $
 enddef;
@@ -272,15 +362,15 @@
 	   else: labmax:=nullpicture
    	fi;
    	% tracé première étiquette
-   	if ypart (llcorner labmin) >=ypart _c(Xmin,Ymin): draw labmin fi;
+   	if ypart (llcorner labmin) >=ypart _cart(Xmin,Ymin): olddraw labmin fi;
    	% tracé autres étiquettes
    	for i=imin+1 upto imax-1:
     		if (i<>0):
-    		  draw etiquettey.@#(arrondimil(i*val)+yO)
+    		  olddraw etiquettey.@#(arrondimil(i*val)+yO)
     		fi;
    	endfor;
    	% tracé dernière étiquette
-   	if ypart (ulcorner labmax) <=ypart _c(Xmax,Ymax): draw labmax fi
+   	if ypart (ulcorner labmax) <=ypart _cart(Xmax,Ymax): olddraw labmax fi
          );
       $
 enddef;
@@ -290,38 +380,38 @@
    picture $;
    $=image(
    %    axe
-   if flecheaxe: drawarrow  else: draw fi dessinaxex;
+   if flecheaxe: olddrawarrow  else: olddraw fi dessinaxex;
    %    graduations
-   if grad>0: draw graduationsaxex(grad) fi;
+   if grad>0: olddraw graduationsaxex(grad) fi;
    %    étiquettes
    if val>0:
    	if nn=1:
 	       if str @#<>"":
-		  draw etiquettesaxex@#(val);
+		  olddraw etiquettesaxex@#(val);
 		  _axorlab:=etiquettex@#(xO)
 	       else:
-		  draw etiquettesaxex.bot(val);
+		  olddraw etiquettesaxex.bot(val);
 		  _axorlab:=etiquettex.bot(xO)
 	       fi;
 	       poslabO:=poslabO + unitvector(0,ypart _posgradx@#);
 	       if xO<>yO:
-		  draw _axorlab
+		  olddraw _axorlab
 	       elseif _nbaxes=2:
-		  draw _etiqx_(xO,0,xO) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
+		  olddraw _etiqx_(xO,0,xO) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
 	       fi
 	elseif nn=2:
 	       if str @#<>"":
-		  draw etiquettesaxex@#(val);
-		  draw etiquettex@#(xO)
+		  olddraw etiquettesaxex@#(val);
+		  olddraw etiquettex@#(xO)
 	       else:
-		  draw etiquettesaxex.bot(val);
-		  draw etiquettex.bot(xO)
+		  olddraw etiquettesaxex.bot(val);
+		  olddraw etiquettex.bot(xO)
 	       fi
 	else:
 	       if str @#<>"":
-		  draw etiquettesaxex@#(val)
+		  olddraw etiquettesaxex@#(val)
 	       else:
-		  draw etiquettesaxex.bot(val)
+		  olddraw etiquettesaxex.bot(val)
 	       fi
 	fi
    fi
@@ -334,38 +424,38 @@
    picture $;
    $=image(
    %    axe
-   if flecheaxe: drawarrow  else: draw fi dessinaxey;
+   if flecheaxe: olddrawarrow  else: olddraw fi dessinaxey;
    %    graduations
-   if grad>0: draw graduationsaxey(grad) fi;
+   if grad>0: olddraw graduationsaxey(grad) fi;
    %    étiquettes
    if val>0:
    	if nn=1:
 	       if str @#<>"":
-		  draw etiquettesaxey@#(val);
+		  olddraw etiquettesaxey@#(val);
 		  _axorlab:=etiquettey@#(yO)
 	       else:
-		  draw etiquettesaxey.lft(val);
+		  olddraw etiquettesaxey.lft(val);
 		  _axorlab:=etiquettey.lft(yO)
 	       fi;
 	       poslabO:=poslabO + unitvector(xpart _posgrady@#,0);
 	       if xO<>yO:
-		  draw _axorlab
+		  olddraw _axorlab
 	       elseif _nbaxes=2:
-		  draw _etiqy_(yO,0,yO) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
+		  olddraw _etiqy_(yO,0,yO) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
 	       fi
 	elseif nn=2:
 	       if str @#<>"":
-		  draw etiquettesaxey@#(val);
-		  draw etiquettey@#(yO)
+		  olddraw etiquettesaxey@#(val);
+		  olddraw etiquettey@#(yO)
 	       else:
-		  draw etiquettesaxey.lft(val);
-		  draw etiquettey.lft(yO)
+		  olddraw etiquettesaxey.lft(val);
+		  olddraw etiquettey.lft(yO)
 	       fi
 	else:
 	       if str @#<>"":
-		  draw etiquettesaxey@#(val)
+		  olddraw etiquettesaxey@#(val)
 	       else:
-		  draw etiquettesaxey.lft(val)
+		  olddraw etiquettesaxey.lft(val)
 	       fi
 	fi
    fi
@@ -535,7 +625,7 @@
 	   else: labmax:=nullpicture
    	fi;
    	% tracé première étiquette
-   	if ypart (llcorner labmin) >=ypart _c(Xmin,Ymin): draw labmin fi;
+   	if ypart (llcorner labmin) >=ypart _cart(Xmin,Ymin): draw labmin fi;
    	% tracé autres étiquettes
    	for i=imin+1 upto imax-1:
     		if (i<>0):
@@ -543,7 +633,7 @@
     		fi;
    	endfor;
    	% tracé dernière étiquette
-   	if ypart (ulcorner labmax) <=ypart _c(Xmax,Ymax): draw labmax fi
+   	if ypart (ulcorner labmax) <=ypart _cart(Xmax,Ymax): draw labmax fi
          );
       $
 enddef;
@@ -555,7 +645,7 @@
    grad:=num*pi/den;
    $=image(
    %    axe
-   if flecheaxe: drawarrow  else: draw fi dessinaxex;
+   if flecheaxe: olddrawarrow  else: olddraw fi dessinaxex;
    %    graduations
    if grad>0: draw graduationsaxex(grad) fi;
    %    étiquettes
@@ -599,7 +689,7 @@
    grad:=num*pi/den;
    $=image(
    %    axe
-   if flecheaxe: drawarrow  else: draw fi dessinaxey;
+   if flecheaxe: olddrawarrow  else: olddraw fi dessinaxey;
    %    graduations
    if grad>0: draw graduationsaxey(grad) fi;
    %    étiquettes
@@ -715,8 +805,9 @@
 	for _i=t:
 	   if numeric _i:
 		if var: if str @#="": draw _etiqx_.bot(tmp,taillegrad,tmp) else: draw _etiqx_@#(tmp,taillegrad,tmp) fi fi;
-%		draw ((0,taillegrad)--(0,-taillegrad)) shifted _c(_i,yO) withpen pencircle scaled 0.8bp;
-		draw graduationx(_i) withpen pencircle scaled 0.8bp;
+		if boolgradxpart:
+		   draw graduationx(_i) withpen pencircle scaled 0.8bp
+		fi;
 		tmp:=_i;
 		var:=true
 	   else:
@@ -738,7 +829,7 @@
 	for _i=t:
 	   if numeric _i:
 		if var: if str @#="": draw _etiqy_.lft(tmp,taillegrad,tmp) else: draw _etiqy_@#(tmp,taillegrad,tmp) fi fi;
-		draw ((taillegrad,0)--(-taillegrad,0)) shifted _c(xO,_i) withpen pencircle scaled 0.8bp;
+		draw ((taillegrad,0)--(-taillegrad,0)) shifted _cart(xO,_i) withpen pencircle scaled 0.8bp;
 		tmp:=_i;
 		var:=true
 	   else:
@@ -758,8 +849,8 @@
         draw axes(0,0);
         draw axexpart(1);
         draw axeypart(1);
-        label.llft(LaTeX("$0$"),_c(0,0));
- %       label.llft("0",_c(0,0));
+        label.llft(LaTeX("$0$"),_cart(0,0));
+ %       label.llft("0",_cart(0,0));
           );
   $
 enddef;
@@ -773,22 +864,33 @@
    (xA,yA) transformed _T
 enddef;
 
+vardef _coord(expr xA,yA)=
+   (xA,yA)
+enddef;
+
 vardef _cobjet(expr obj)=
    obj transformed _T
 enddef;
 
-vardef _c(text t)=
+vardef _cart(text t)=
    if long_texte(t)=2: _ccoord(t)
       else: _cobjet(t)
    fi
 enddef;
 
+vardef _c(text t)=
+   if long_texte(t)=2: _coord(t)
+   else: t
+   fi
+enddef;
+
+
 vardef pol(expr r,theta)=
- _c(r*cos(theta),r*sin(theta))
+ (r*cos(theta),r*sin(theta))
 enddef;
 
 vardef pold(expr r,theta)=
- _c(r*cosd(theta),r*sind(theta))
+ (r*cosd(theta),r*sind(theta))
 enddef;
 
 color coulpoint,coullabel,coullabelfonc;
@@ -799,15 +901,15 @@
  save $;
  picture $;
   if marque_p = "plein":
-    $:=image(fill fullcircle scaled taillepoint shifted pp withcolor coulpoint);
+    $:=image(oldfill fullcircle scaled taillepoint shifted _cart(pp) withcolor coulpoint);
   elseif marque_p = "creux":
     $:=image(%
-    fill fullcircle scaled taillepoint shifted pp withcolor background;
-    draw fullcircle scaled taillepoint shifted pp withcolor coulpoint);
+    oldfill fullcircle scaled taillepoint shifted _cart(pp) withcolor background;
+    olddraw fullcircle scaled taillepoint shifted _cart(pp) withcolor coulpoint);
   elseif marque_p = "croix":
   $:=image(%
-    draw ((-taillecroix,0)--(taillecroix,0)) shifted pp withcolor coulpoint;
-    draw ((0,-taillecroix)--(0,taillecroix)) shifted pp withcolor coulpoint)
+    olddraw ((-taillecroix,0)--(taillecroix,0)) shifted _cart(pp) withcolor coulpoint;
+    olddraw ((0,-taillecroix)--(0,taillecroix)) shifted _cart(pp) withcolor coulpoint)
   else: $:=nullpicture
   fi;
   $
@@ -850,12 +952,12 @@
    picture dess;
    if long_texte(t)=1: 
       dess:=image(ch:=_chaine(p);
-                  A:=_c(t,fonccourbe.p(t));
+                  A:=(t,fonccourbe.p(t));
                   label@#(LaTeX("$" & ch & "$"),A) withcolor coullabelfonc)
    else:
       dess:=image(%
         for _a=t:
-          if numeric _a: A:=_c(_a,fonccourbe.p(_a))
+          if numeric _a: A:=(_a,fonccourbe.p(_a))
           else: if string _a: label@#(_a,A) else: label@#(_a scaled defaultscale,A) fi withcolor coullabelfonc
           fi;
         endfor)
@@ -868,6 +970,8 @@
 vardef nommeobj@#(text t)=
  save $;
  picture $;
+ if long_texte(t)=4: $:=nommeangle@#(t)
+ else:
    for i=t:
      if pair i: $:=nommepoint@#(t)
      else: $:=nommecourbe@#(t)
@@ -874,6 +978,7 @@
      fi;
      exitif true;
    endfor
+ fi;
    $
 enddef;
 
@@ -886,11 +991,11 @@
    pair m;
    string ch;
    $=image(%
-   if long_texte(t)=1: drawarrow A--A+t;ch:=_chaine(t);label@#(LaTeX("$\vect{" & ijmath(ch) & "}$"),A+t/2)
+   if long_texte(t)=1: drawarrow A--A+t;ch:=_chaine(t);label@#(LaTeX("$\vv{" & ijmath(ch) & "}$"),A+t/2)
    else:
       for u=t:
         if pair u: drawarrow A--A+u; m:=A+u/2
-        else: if string u: if u<>"": label@#(LaTeX("$\vect{" & u & "}$"),m) fi else: label@#(u,m) fi
+        else: if string u: if u<>"": label@#(LaTeX("$\vv{" & u & "}$"),m) fi else: label@#(u,m) fi
         fi;
       endfor
    fi);
@@ -902,7 +1007,7 @@
    picture $;
    $=image(%
    for i=t:
-     MarquePoint(_c(i,fonccourbe.p(i)));
+     MarquePoint((i,fonccourbe.p(i)));
    endfor);
    $
 enddef;
@@ -924,24 +1029,24 @@
 vardef marquecheminouvertdroitefig(expr p)=
    halfcircle shifted (0,-0.5)
               scaled (2*taillepoint)
-              rotated (90+angle(direction infinity of p))
-              shifted (point infinity of p)
+              rotated (90+angle(direction infinity of _cart(p)))
+              shifted (point infinity of _cart(p))
 enddef;
 
-def marquecheminouvertdroite= draw marquecheminouvertdroitefig enddef;
+def marquecheminouvertdroite= olddraw marquecheminouvertdroitefig enddef;
 
 vardef marquecheminouvertgauchefig(expr p)=
    halfcircle shifted (0,-0.5)
               scaled (2*taillepoint)
-              rotated (-90+angle(direction 0 of p))
-              shifted (point 0 of p)
+              rotated (-90+angle(direction 0 of _cart(p)))
+              shifted (point 0 of _cart(p))
 enddef;
 
-def marquecheminouvertgauche= draw marquecheminouvertgauchefig enddef;
+def marquecheminouvertgauche= olddraw marquecheminouvertgauchefig enddef;
 
-vardef marquecheminouvert(expr p)=
-   marquecheminouvertdroite(p);
-   marquecheminouvertgauche(p)
+def marquecheminouvert(expr p) text t=
+   marquecheminouvertdroite(p) t;
+   marquecheminouvertgauche(p) t
 enddef;
 
 
@@ -964,9 +1069,9 @@
  picture $;
  O:=_chaine(a); I:=_chaine(b); J:=_chaine(c);
  $:=image(%
- draw vecteur.bot(_O,_c(1,0),ijmath(I)) withpen pencircle scaled 0.8 withcolor coulbase;
- draw vecteur.lft(_O,_c(0,1),ijmath(J)) withpen pencircle scaled 0.8 withcolor coulbase;
- nomme.llft(_O,LaTeX("$" & O & "$")) withcolor coulbase
+ draw vecteur.bot(_O_,(1,0),ijmath(I)) withpen pencircle scaled 0.8 withcolor coulbase;
+ draw vecteur.lft(_O_,(0,1),ijmath(J)) withpen pencircle scaled 0.8 withcolor coulbase;
+ nomme.llft(_O_,LaTeX("$" & O & "$")) withcolor coulbase
  );
  $
 enddef;
@@ -978,7 +1083,7 @@
  picture $;
  O:=_chaine(a); I:=_chaine(b); J:=_chaine(c);
  $:=image(%
- nomme.llft(_O,LaTeX("$" & O & "$")) withcolor coulbase;
+ nomme.llft(_O_,LaTeX("$" & O & "$")) withcolor coulbase;
  draw axexpart(1,LaTeX("$" & I & "$")) withcolor coulbase;
  draw axeypart(1,LaTeX("$" & J & "$")) withcolor coulbase;
  );
@@ -990,7 +1095,7 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
   numeric ep; color coul;
-  ep:= .2bp;                    %%%%%%%% épaisseur du trait
+  ep:= .3bp;                    %%%%%%%% épaisseur du trait
   coul := .7white;              %%%%%%%% couleur du trait
   def quadstyle= enddef;
 
@@ -999,12 +1104,12 @@
    picture $;
  $=image(if quadx>0:
     for i=ceiling((QuadXmin-xO)/quadx) upto floor((QuadXmax-xO)/quadx):
-     draw _c(arrondimil(i*quadx)+xO,QuadYmin)--_c(arrondimil(i*quadx)+xO,QuadYmax) quadstyle withpen pencircle scaled ep withcolor coul;
+     olddraw _cart(arrondimil(i*quadx)+xO,QuadYmin)--_cart(arrondimil(i*quadx)+xO,QuadYmax) quadstyle withpen pencircle scaled ep withcolor coul;
     endfor;
   fi;
   if quady>0:
     for i=ceiling((QuadYmin-yO)/quady) upto floor((QuadYmax-yO)/quady):
-     draw _c(QuadXmin,arrondimil(i*quady)+yO)--_c(QuadXmax,arrondimil(i*quady)+yO) withpen pencircle scaled ep withcolor coul quadstyle;
+     olddraw _cart(QuadXmin,arrondimil(i*quady)+yO)--_cart(QuadXmax,arrondimil(i*quady)+yO) withpen pencircle scaled ep withcolor coul quadstyle;
     endfor;
   fi);
   $
@@ -1016,7 +1121,7 @@
  $=image(if (quadx>0) and (quady>0):
     for i=ceiling(QuadXmin/quadx) upto floor(QuadXmax/quadx):
       for j=ceiling(QuadYmin/quady) upto floor(QuadYmax/quady):
-        draw (0,0) shifted _c(i*quadx,j*quady) withpen pencircle scaled 2;
+        olddraw (0,0) shifted _cart(i*quadx,j*quady) withpen pencircle scaled 2;
       endfor;
     endfor;
   fi);
@@ -1033,24 +1138,24 @@
   picture $;
   $=image(%
   for i= ceiling(QuadXmin*Ux*10/cm) upto floor(QuadXmax*Ux*10/cm):
-    if i mod 5 <> 0: draw (i*cm/10,QuadYmin*Uy)--(i*cm/10,QuadYmax*Uy) withpen pencircle scaled pm_epa withcolor pm_coula fi;
+    if i mod 5 <> 0: olddraw (i*cm/10,QuadYmin*Uy)--(i*cm/10,QuadYmax*Uy) withpen pencircle scaled pm_epa withcolor pm_coula fi;
   endfor
   for i= ceiling(QuadYmin*Uy*10/cm) upto floor(QuadYmax*Uy*10/cm):
-    if i mod 5<> 0: draw (QuadXmin*Ux,i*cm/10)--(QuadXmax*Ux,i*cm/10) withpen pencircle scaled pm_epa withcolor pm_coula fi;
+    if i mod 5<> 0: olddraw (QuadXmin*Ux,i*cm/10)--(QuadXmax*Ux,i*cm/10) withpen pencircle scaled pm_epa withcolor pm_coula fi;
   endfor
   %
   for i= ceiling(QuadXmin*Ux/cm)*2+1 step 2 until floor(QuadXmax*Ux/cm)*2-1:
-    draw (i*cm/2,QuadYmin*Uy)--(i*cm/2,QuadYmax*Uy) withpen pencircle scaled pm_epb withcolor pm_coulb;
+    olddraw (i*cm/2,QuadYmin*Uy)--(i*cm/2,QuadYmax*Uy) withpen pencircle scaled pm_epb withcolor pm_coulb;
   endfor
   for i= ceiling(QuadYmin*Uy/cm)*2+1 step 2 until floor(QuadYmax*Uy/cm)*2-1:
-    draw (QuadXmin*Ux,i*cm/2)--(QuadXmax*Ux,i*cm/2) withpen pencircle scaled pm_epb withcolor pm_coulb;
+    olddraw (QuadXmin*Ux,i*cm/2)--(QuadXmax*Ux,i*cm/2) withpen pencircle scaled pm_epb withcolor pm_coulb;
   endfor
   %
   for i= ceiling(QuadXmin*Ux/cm) upto floor(QuadXmax*Ux/cm):
-    draw (i*cm,QuadYmin*Uy)--(i*cm,QuadYmax*Uy) withpen pencircle scaled pm_epc withcolor pm_coulc;
+    olddraw (i*cm,QuadYmin*Uy)--(i*cm,QuadYmax*Uy) withpen pencircle scaled pm_epc withcolor pm_coulc;
   endfor
   for i= ceiling(QuadYmin*Uy/cm) upto floor(QuadYmax*Uy/cm):
-    draw (QuadXmin*Ux,i*cm)--(QuadXmax*Ux,i*cm) withpen pencircle scaled pm_epc withcolor pm_coulc;
+    olddraw (QuadXmin*Ux,i*cm)--(QuadXmax*Ux,i*cm) withpen pencircle scaled pm_epc withcolor pm_coulc;
   endfor);
   $
 enddef;
@@ -1060,47 +1165,51 @@
 %%%%%%%%%%  FONCTIONS - COURBES   %%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-vardef courbefonc(suffix f)(expr xmin, xmax, n) =   %Courbe représentative d'une fonction
+vardef courbef_(suffix f)(expr xmin, xmax, n) =   %Courbe représentative d'une fonction
    save $,x;
    path $;
-   $=( _c(xmin,f(xmin))
+   $=((xmin,f(xmin))
     for i=1 upto n-1:
-      .._c(xmin+i*(xmax-xmin)/(n-1),f(xmin+i*(xmax-xmin)/(n-1)))
+      ..(xmin+i*(xmax-xmin)/(n-1),f(xmin+i*(xmax-xmin)/(n-1)))
     endfor );
    $
 enddef;
 
-%%%%%%%%%% TEST %%%%%%%%%%%%%
-vardef courbefonct@#(expr xmin, xmax, n) =   %Courbe représentative d'une fonction
-   save $,x;
-   path $;
-   $=( _c(xmin,@#(xmin))
-    for i=1 upto n-1:
-      .._c(xmin+i*(xmax-xmin)/(n-1),@#(xmin+i*(xmax-xmin)/(n-1)))
-    endfor );
-   $
+
+vardef courbefonc(suffix f)(text t)=
+        save cc;path cc;
+        save k,Val;numeric k,Val[];
+        Val[1]:=Xmin;Val[2]:=Xmax;Val[3]:=60;
+        k:=1;
+        for i=t:
+           Val[k]:=i;
+           k:=k+1;
+        endfor
+        courbef_(f,Val[1],Val[2],Val[3])
 enddef;
-%%%%%%%%%% FINTEST %%%%%%%%%%%%%
 
+
+
+
 vardef courbepoints(suffix f)(expr xmin, xmax, n) =  %Points non reliés
    save $,x;
    picture $;
-   $=image(MarquePoint(_c(xmin,f(xmin)));
+   $=image(MarquePoint((xmin,f(xmin)));
            for i=1 upto n-1:
-              MarquePoint(_c(xmin+i*(xmax-xmin)/(n-1),f(xmin+i*(xmax-xmin)/(n-1))));
+              MarquePoint((xmin+i*(xmax-xmin)/(n-1),f(xmin+i*(xmax-xmin)/(n-1))));
            endfor );
    $
 enddef;
 
 vardef fonccourbe@#(expr x)=    %Ordonnée du point de la courbe @# d'abscisse x (dans le repère utilisateur)
-   ypart ((pointcourbe@#(x)) transformed inverse _T)
+   ypart pointcourbe@#(x)
 enddef;
 
 vardef pointcourbe@#(expr x)=   %Point de la courbe @# d'abscisse x dans le repère utilisateur
 save _P_,t;
   numeric t; pair _P_;
-  (t,whatever)=@# intersectiontimes (_c(x,2*Ymin-Ymax)--_c(x,2*Ymax-Ymin));
-  if t=-1: _P_:=_c(x,0)
+  (t,whatever)=@# intersectiontimes ((x,2*Ymin-Ymax)--(x,2*Ymax-Ymin));
+  if t=-1: _P_:=(x,0)
   else: _P_:=point t of @#
   fi;
   _P_
@@ -1111,10 +1220,10 @@
    path pp;
    pair v,w;
    pp:=@#;
-   (t,whatever) = pp intersectiontimes (_c(x,2*Ymin-Ymax)--_c(x,2*Ymax-Ymin));
+   (t,whatever) = pp intersectiontimes ((x,2*Ymin-Ymax)--(x,2*Ymax-Ymin));
    v:=direction t of pp;
-   w:=unitvector(v transformed inverse _T);
-   if xpart w = 0: d:=0 else: d:= (ypart w)/(xpart w) fi;
+%   w:=unitvector(v transformed inverse _T);
+   if xpart v = 0: d:=0 else: d:= (ypart v)/(xpart v) fi;
    d
 enddef;
 
@@ -1134,13 +1243,13 @@
 enddef;
 
 vardef ptantecedents(suffix P)(expr y,p)=
-  intercourbes(P,_c(Xmin,y)--_c(Xmax,y),p)
+  intercourbes(P,(Xmin,y)--(Xmax,y),p)
 enddef;
 
 vardef antecedents(suffix P)(expr y,p)=
   pair PP[];
   ptantecedents(PP,y,p);
-  for i=1 upto 10: P[i]:=xpart (PP[i] transformed inverse _T); endfor
+  for i=1 upto 10: P[i]:=xpart (PP[i]); endfor
 enddef;
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1160,13 +1269,13 @@
    picture $;
    for n=tt: i:=incr i ; N[i]:=n; endfor;
    if i=1: N2:=longtan fi;
-   (t,whatever) = p intersectiontimes (_c(N1,Ymin)--_c(N1,Ymax));
+   (t,whatever) = p intersectiontimes ((N1,Ymin)--(N1,Ymax));
    M:=point t of p;
    _v:=N2*unitvector(direction t of p);
    $=image(%
 		MarquePoint(M);
-		if (xpart senstan@#) <> 0: drawarrow M--M-_v*(xpart senstan@#) fi;
-		if (ypart senstan@#) <> 0: drawarrow M--M+_v*(ypart senstan@#) fi;
+		if (xpart senstan@#) <> 0: olddrawarrow _cart(M)--_cart(M)-_v*(xpart senstan@#) fi;
+		if (ypart senstan@#) <> 0: olddrawarrow _cart(M)--_cart(M)+_v*(ypart senstan@#) fi;
     );
    $
 enddef;
@@ -1176,7 +1285,7 @@
  path $;
  numeric m,t;
  pair M;
- (t,whatever) = p intersectiontimes (_c(a,Ymin)--_c(a,Ymax));
+ (t,whatever) = p intersectiontimes ((a,Ymin)--(a,Ymax));
  M:=point t of p;
  $=M-_diag*unitvector(direction t of p)--M+_diag*unitvector(direction t of p);
  $
@@ -1198,7 +1307,7 @@
 enddef;
 
 vardef souscourbe(expr p,xmin,xmax)=
- buildcycle(droiteeqx(xmax),p,droiteeqx(xmin),_c(Xmin,0)--_c(Xmax,0))
+ buildcycle(droiteeqx(xmax),p,droiteeqx(xmin),(Xmin,0)--(Xmax,0))
 enddef;
 
 
@@ -1209,9 +1318,9 @@
  pas=(b-a)/n;
  _rect_ =
  for i=0 upto n-1:
-   _c(a+i*pas,yO)--_segmrect_@#(p,a+i*pas,pas)--
+   (a+i*pas,yO)--_segmrect_@#(p,a+i*pas,pas)--
  endfor
- _c(b,yO)--cycle;
+ (b,yO)--cycle;
  _rect_
 enddef;
 
@@ -1224,8 +1333,8 @@
  _sousp=subpath (xpart(p intersectiontimes droiteeqx(a)),xpart(p intersectiontimes droiteeqx(a+pas))) of p;
  if _typerect@#=1: llcorner _sousp -- lrcorner _sousp
   elseif _typerect@#=2: ulcorner _sousp -- urcorner _sousp
-   elseif _typerect@#=3: (pointcourbe.p(a))--(pointcourbe.p(a) shifted _c(pas,0))
-    elseif _typerect@#=4: (pointcourbe.p(a+pas) shifted _c(-pas,0))--(pointcourbe.p(a+pas))
+   elseif _typerect@#=3: (pointcourbe.p(a))--(pointcourbe.p(a) shifted (pas,0))
+    elseif _typerect@#=4: (pointcourbe.p(a+pas) shifted (-pas,0))--(pointcourbe.p(a+pas))
  fi
 enddef;
 
@@ -1236,15 +1345,15 @@
  save $;
  path $;
  if (-(Ymax-Ymin)/(Xmax-Xmin)<a) and ((Ymax-Ymin)/(Xmax-Xmin)>a):
-  $:=_c(Xmin,a*Xmin+b)--_c(Xmax,a*Xmax+b);
+  $:=(Xmin,a*Xmin+b)--(Xmax,a*Xmax+b);
  else:
-  $:=_c(Ymin/a-b/a,Ymin)--_c(Ymax/a-b/a,Ymax);
+  $:=(Ymin/a-b/a,Ymin)--(Ymax/a-b/a,Ymax);
  fi;
  $
 enddef;
 
 vardef droiteeqx(expr c)=
-  _c(c,2*Ymin-Ymax)--_c(c,2*Ymax-Ymin)
+  (c,2*Ymin-Ymax)--(c,2*Ymax-Ymin)
 enddef;
 
 vardef droiteeqcart(expr a,b,c)=
@@ -1296,10 +1405,10 @@
    else: B:=point 0 of d; A:= point infinity of d
   fi;
   $=A--
-  if ypart A>=ypart _c(Xmin,Ymax): _c(Xmin,Ymax)-- fi
-  if ypart A>ypart _c(Xmin,Ymin): _c(Xmin,Ymin)-- fi
-  if ypart B>ypart _c(Xmax,Ymin): _c(Xmax,Ymin)-- fi
-  if ypart B>=ypart _c(Xmax,Ymax): _c(Xmax,Ymax)-- fi
+  if ypart A>=ypart (Xmin,Ymax): (Xmin,Ymax)-- fi
+  if ypart A>ypart (Xmin,Ymin): (Xmin,Ymin)-- fi
+  if ypart B>ypart (Xmax,Ymin): (Xmax,Ymin)-- fi
+  if ypart B>=ypart (Xmax,Ymax): (Xmax,Ymax)-- fi
   B--cycle;
   $
 enddef;
@@ -1313,10 +1422,10 @@
    else: B:=point 0 of d; A:= point infinity of d
   fi;
   $=A--
-  if ypart A<=ypart _c(Xmin,Ymin): _c(Xmin,Ymin)-- fi
-  if ypart A<ypart _c(Xmin,Ymax): _c(Xmin,Ymax)-- fi
-  if ypart B<ypart _c(Xmax,Ymax): _c(Xmax,Ymax)-- fi
-  if ypart B<=ypart _c(Xmax,Ymin): _c(Xmax,Ymin)-- fi
+  if ypart A<=ypart (Xmin,Ymin): (Xmin,Ymin)-- fi
+  if ypart A<ypart (Xmin,Ymax): (Xmin,Ymax)-- fi
+  if ypart B<ypart (Xmax,Ymax): (Xmax,Ymax)-- fi
+  if ypart B<=ypart (Xmax,Ymin): (Xmax,Ymin)-- fi
   B--cycle;
   $
 enddef;
@@ -1325,11 +1434,11 @@
 %%%%%%%%%%   PROJECTIONS   %%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 vardef projetex(expr A)=
-  _c(xpart (A transformed inverse _T),yO)
+  (xpart (A),yO)
 enddef;
 
 vardef projetey(expr A)=
-  _c(xO,ypart (A transformed inverse _T))
+  (xO,ypart (A))
 enddef;
 
 vardef projectionx@#(text t)=
@@ -1369,8 +1478,8 @@
   for i=t:
    if not numeric i:
      if pair i: _A:=i;
-     elseif n=1: if ypart _A > ypart _O: draw projectionx.bot(_A,i,-dd) else: draw projectionx.top(_A,i,dd) fi;n:=n+1
-     else: if xpart _A > xpart _O: draw projectiony.lft(_A,i,-dd) else: draw projectiony.rt(_A,i,dd) fi;n:=n+1
+     elseif n=1: if ypart _A > ypart _O_: draw projectionx.bot(_A,i,-dd) else: draw projectionx.top(_A,i,dd) fi;n:=n+1
+     else: if xpart _A > xpart _O_: draw projectiony.lft(_A,i,-dd) else: draw projectiony.rt(_A,i,dd) fi;n:=n+1
      fi;
    fi;
   endfor;
@@ -1391,7 +1500,7 @@
 vardef _suiterecfonc_(expr x)=0 enddef;
 numeric _suiterecdeb_, _suiterecfin_, _suiterecinit_;
 
-vardef suiterec(suffix f)(expr deb,fin,init)= 		%escalier un+1=f(un), u_deb=init
+vardef suiterec(suffix f)(expr deb,fin,init)= %escalier un+1=f(un), u_deb=init
   vardef _suiterecfonc_(expr x)=f(x) enddef;
   _suiterecdeb_:=deb;_suiterecfin_:=fin;_suiterecinit_:=init;	%stocke les valeurs pour réutilisation
   save $,un;
@@ -1398,9 +1507,9 @@
   path $;
   numeric un;
   un=init;
-  $=_c(un,yO)
+  $=(un,yO)
   for i=deb upto fin-1:
-    --_c(un,f(un))--_c(f(un),f(un))
+    --(un,f(un))--(f(un),f(un))
     hide(un:=f(un))
   endfor;
   $
@@ -1430,29 +1539,27 @@
       deb:=deb+1;un:=_suiterecfonc_(un)
     fi;
     for i=deb upto fin:
-      draw projectionx.@#(_c(un,un));
+      draw projectionx.@#((un,un));
       un:=_suiterecfonc_(un);
     endfor
   elseif nom="_val":
     if deb=_suiterecdeb_:
-%      label.@#(format("%10f",arrondi(10**_prec,un)),_c(un,yO));
       draw etiquettex.@#(arrondi(10**_prec,un));
       deb:=deb+1;un:=_suiterecfonc_(un)
     fi;
     for i=deb upto fin:
-%      draw projectionx.@#(_c(un,un),format("%10f",arrondi(10**_prec,un)));
       lab:=LaTeX("$\num{" &  decimal(arrondi(10**_prec,un)) & "}$");
-      draw projectionx.@#(_c(un,un),lab,-taillegrad);
+      draw projectionx.@#((un,un),lab,-taillegrad);
       un:=_suiterecfonc_(un);
     endfor
   else:
     if deb=_suiterecdeb_:
-      label.@#(LaTeX("$" & nom & "_{" & decimal(deb) & "}" & "$"),_c(un,yO));
+      label.@#(LaTeX("$" & nom & "_{" & decimal(deb) & "}" & "$"),(un,yO));
       deb:=deb+1;un:=_suiterecfonc_(un)
     fi;
     for i=deb upto fin:
       lab:=LaTeX("$" & nom & "_{" & decimal(i) & "}" & "$");
-      draw projectionx.@#(_c(un,un),lab);
+      draw projectionx.@#((un,un),lab);
       un:=_suiterecfonc_(un);
     endfor
   fi);
@@ -1483,7 +1590,7 @@
       deb:=deb+1;
     fi;
     for i=deb-1 upto fin-1:
-      draw projectiony.@#(_c(un,_suiterecfonc_(un)));
+      draw projectiony.@#((un,_suiterecfonc_(un)));
       un:=_suiterecfonc_(un);
     endfor
   elseif nom="_val":
@@ -1492,7 +1599,7 @@
     fi;
     for i=deb-1 upto fin-1:
       lab:=LaTeX("$\num{" &  decimal(arrondi(10**_prec,un)) & "}$");
-      draw projectiony.@#(_c(un,_suiterecfonc_(un)),lab,-taillegrad);
+      draw projectiony.@#((un,_suiterecfonc_(un)),lab,-taillegrad);
       un:=_suiterecfonc_(un);
     endfor
   else:
@@ -1501,7 +1608,7 @@
     fi;
     for i=deb-1 upto fin-1:
       lab:=LaTeX("$" & nom & "_{" & decimal(i+1) & "}" & "$");
-      draw projectiony.@#(_c(un,_suiterecfonc_(un)),lab);
+      draw projectiony.@#((un,_suiterecfonc_(un)),lab);
       un:=_suiterecfonc_(un);
     endfor
   fi);
@@ -1523,11 +1630,11 @@
 %%%%%%%%%%   INTERVALLES   %%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 vardef bornex[](expr val)=
- ((1mm,-2mm)--(0,-2mm)--(0,2mm)--(1mm,2mm)) if @<0: xscaled -1 fi shifted _c(val,xO)
+ ((1mm,-2mm)--(0,-2mm)--(0,2mm)--(1mm,2mm)) if @<0: xscaled -1 fi shifted _cart(val,xO)
 enddef;
 
 vardef borney[](expr val)=
- ((2mm,1mm)--(2mm,0)--(-2mm,0)--(-2mm,1mm)) if @<0: yscaled -1 fi shifted _c(yO,val)
+ ((2mm,1mm)--(2mm,0)--(-2mm,0)--(-2mm,1mm)) if @<0: yscaled -1 fi shifted _cart(yO,val)
 enddef;
 
 pair sensborne.FF,sensborne.FO,sensborne.OF,sensborne.OO;
@@ -1537,9 +1644,9 @@
   save $;
   picture $;
   $=image(%
-   draw _c(vmin,xO)--_c(vmax,xO) withpen pencircle scaled 2pt;
-   draw bornex[xpart sensborne@#](vmin) withpen pencircle scaled 2pt;
-   draw bornex[ypart sensborne@#](vmax) withpen pencircle scaled 2pt);
+   olddraw _cart(vmin,xO)--_cart(vmax,xO) withpen pencircle scaled 2pt;
+   olddraw bornex[xpart sensborne@#](vmin) withpen pencircle scaled 2pt;
+   olddraw bornex[ypart sensborne@#](vmax) withpen pencircle scaled 2pt);
   $
 enddef;
 
@@ -1547,9 +1654,9 @@
   save $;
   picture $;
   $=image(%
-   draw _c(yO,vmin)--_c(yO,vmax) withpen pencircle scaled 2pt;
-   draw borney[xpart sensborne@#](vmin) withpen pencircle scaled 2pt;
-   draw borney[ypart sensborne@#](vmax) withpen pencircle scaled 2pt);
+   olddraw _cart(yO,vmin)--_cart(yO,vmax) withpen pencircle scaled 2pt;
+   olddraw borney[xpart sensborne@#](vmin) withpen pencircle scaled 2pt;
+   olddraw borney[ypart sensborne@#](vmax) withpen pencircle scaled 2pt);
   $
 enddef;
 
@@ -1574,12 +1681,12 @@
    if known _valeursboitemoustache_[6]: _decboitemoustache_:=_valeursboitemoustache_[6] fi;
    if known _valeursboitemoustache_[7]: _largboitemoustache_:=_valeursboitemoustache_[7] fi;
    $=image(%
-   fill fullcircle scaled 3 shifted _c(_valeursboitemoustache_[1],yO);
-   draw _c(_valeursboitemoustache_[1],yO)--_c(_valeursboitemoustache_[2],yO);
-   draw _c(_valeursboitemoustache_[2],yO) shifted (0,-_largboitemoustache_/2)--_c(_valeursboitemoustache_[2],yO) shifted (0,_largboitemoustache_/2)--_c(_valeursboitemoustache_[4],yO) shifted (0,_largboitemoustache_/2)--_c(_valeursboitemoustache_[4],yO) shifted (0,-_largboitemoustache_/2)--cycle;
-   draw _c(_valeursboitemoustache_[3],yO) shifted (0,-_largboitemoustache_/2)--_c(_valeursboitemoustache_[3],yO) shifted (0,_largboitemoustache_/2);
-   draw _c(_valeursboitemoustache_[4],yO)--_c(_valeursboitemoustache_[5],yO);
-   fill fullcircle scaled 3 shifted _c(_valeursboitemoustache_[5],yO)%
+   oldfill fullcircle scaled 3 shifted _cart(_valeursboitemoustache_[1],yO);
+   olddraw _cart(_valeursboitemoustache_[1],yO)--_cart(_valeursboitemoustache_[2],yO);
+   olddraw _cart(_valeursboitemoustache_[2],yO) shifted (0,-_largboitemoustache_/2)--_cart(_valeursboitemoustache_[2],yO) shifted (0,_largboitemoustache_/2)--_cart(_valeursboitemoustache_[4],yO) shifted (0,_largboitemoustache_/2)--_cart(_valeursboitemoustache_[4],yO) shifted (0,-_largboitemoustache_/2)--cycle;
+   olddraw _cart(_valeursboitemoustache_[3],yO) shifted (0,-_largboitemoustache_/2)--_cart(_valeursboitemoustache_[3],yO) shifted (0,_largboitemoustache_/2);
+   olddraw _cart(_valeursboitemoustache_[4],yO)--_cart(_valeursboitemoustache_[5],yO);
+   oldfill fullcircle scaled 3 shifted _cart(_valeursboitemoustache_[5],yO)%
    ) shifted (0,_decboitemoustache_);
    $
 enddef;
@@ -1615,16 +1722,233 @@
    $=image(%
    for i=1 upto 5:
      if (i=1) or (i=5):
-       A:=_c(_valeursboitemoustache_[i],yO) shifted(0,_decboitemoustache_)
-       else: A:=_c(_valeursboitemoustache_[i],yO) shifted(0,_decboitemoustache_-_largboitemoustache_/2)
+       A:=_cart(_valeursboitemoustache_[i],yO) shifted(0,_decboitemoustache_)
+       else: A:=_cart(_valeursboitemoustache_[i],yO) shifted(0,_decboitemoustache_-_largboitemoustache_/2)
      fi;
-     draw projectionx@#(A,_lab_[i]);
+     draw projectionx@#(A transformed inverse _T,_lab_[i]);
    endfor);
    $
 enddef;
 
 
+numeric diampointsbatons;
+diampointsbatons:=5;
+
+vardef diagrammebatons(text t) =
+   save $;
+   picture $;
+   numeric tmp_taillepoint;
+   string tmp_marque_p;
+   tmp_taillepoint:=taillepoint;
+   tmp_marque_p := marque_p;
+   $=image(%
+     interim linecap:=butt;
+     marque_p:="plein";
+     taillepoint:=diampointsbatons*0.5;
+     for i=t:
+        draw i--projetex(i);
+        MarquePoint(i);
+     endfor
+     );
+   taillepoint:=tmp_taillepoint;
+   marque_p := tmp_marque_p;
+   $
+enddef;
+
+
+numeric largbarres;
+largbarres := 20;
+
+def barrei(expr p)=
+   (projetex(_cart(p)-0.5(largbarres,0))--(_cart(p)-0.5(largbarres,0))--(_cart(p)+0.5(largbarres,0))--projetex(_cart(p)+0.5(largbarres,0))) transformed inverse _T
+enddef;
+
+vardef diagrammebarres(text t)=
+   save $;
+   path $;
+   $:= for i=t: barrei(i)-- endfor cycle;
+   $
+enddef;
+
+
+vardef diagrammebinomiale(expr n,p)=
+   save $,Abin;
+   picture $;
+   pair Abin[];
+   $:=scantokens("diagrammebatons("&
+           "(0," & decimal(binomiale(n,p,0)) & ")" &
+           for i=0 upto n: ",(" & decimal(i) & "," & decimal(binomiale(n,p,i)) & ")" &
+           endfor
+           ")");
+   $
+enddef;
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%   POLYGONES   %%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+vardef polygone(text t)=
+  save poly;
+  path poly;
+  poly := 
+    for i=t:
+      i--
+    endfor
+    cycle;
+  poly
+enddef;
+
+if not known typetrace:
+  vardef triangle(expr A,B,C)=
+    polygone(A,B,C)
+  enddef;
+fi
+
+vardef parallelogramme(expr A,O,B)=
+  O--A--(A+B-O)--B--cycle
+enddef;
+
+vardef polygoneregulier(expr A,B,n)=
+  save poly,centre;
+  path poly;pair centre;
+  _cart(B)-centre = (_cart(A)-centre) rotated (360/n);
+  poly:= _cart(A)
+     for i = 1 upto n-1:
+       -- (_cart(A) rotatedaround(centre,(i*360)/n))
+     endfor
+     --cycle;
+  poly transformed inverse _T
+enddef;
+
+vardef equilateral(expr A,B)=
+  polygoneregulier(A,B,3)
+enddef;
+
+vardef carre(expr A,B)=
+  polygoneregulier(A,B,4)
+enddef;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%   CERCLES ET ARCS   %%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+vardef arccercle(expr A,O,B)=
+  path tmp,arc;
+  tmp:=fullcircle scaled (2*(abs(_cart(A)-_cart(O)))) rotated angle(_cart(A)-_cart(O)) shifted _cart(O);
+  if angle(_cart(B)-_cart(O))>angle(_cart(A)-_cart(O)):
+    arc:=subpath(0,(angle(_cart(B)-_cart(O))-angle(_cart(A)-_cart(O)))*(length tmp)/360) of tmp;
+  else:
+    arc:=subpath(0,(360-(angle(_cart(A)-_cart(O))-angle(_cart(B)-_cart(O))))*(length tmp)/360) of tmp;
+  fi
+  arc transformed inverse _T
+enddef;
+
+vardef cerclecr(expr O,r)=
+  fullcircle scaled (2*r*Ux) shifted _cart(O) transformed inverse _T
+enddef;
+
+vardef cerclecp(expr O,A)=
+  fullcircle scaled (2*abs(_cart(A)-_cart(O))) shifted _cart(O) transformed inverse _T
+enddef;
+
+vardef cerclecir(expr A,B,C)=
+  save O;pair O;
+  _cart(O)-0.5[_cart(A),_cart(B)]=whatever * (_cart(B)-_cart(A)) rotated 90;
+  _cart(O)-0.5[_cart(A),_cart(C)]=whatever * (_cart(C)-_cart(A)) rotated 90;
+  cerclecp(O,A)
+enddef;
+
+vardef cercle(text t)=
+   save $;path $;
+   save r;boolean r;
+   r:=false;
+   if long_texte(t)=3:
+     $:=cerclecir(t)
+   else:
+     for i=t:
+       if numeric i: r:=true fi;
+     endfor
+     if r: $:=cerclecr(t) else: $:=cerclecp(t) fi;
+   fi;
+   $   
+enddef;
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%   MARQUES ANGLES, SEGMENTS...   %%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+taille_marque_a:=0.4cm;
+sep_marque_a:=1.5;
+
+
+vardef arc_marqueangle(expr A,O,B,t)=
+  arccercle((_cart(O)+t*unitvector(_cart(A)-_cart(O))) transformed inverse _T,O,(_cart(O)+t*unitvector(_cart(B)-_cart(O))) transformed inverse _T)
+enddef;
+
+vardef marqueanglegeo(expr A,O,B,n)=
+  O--arc_marqueangle(A,O,B,taille_marque_a-(n-1)*sep_marque_a/2)
+  for i=1 upto n-1:
+   --reverse arc_marqueangle(A,O,B,taille_marque_a-(n-1)*sep_marque_a/2+(i-1)*sep_marque_a)--
+   arc_marqueangle(A,O,B,taille_marque_a-(n-1)*sep_marque_a/2+i*sep_marque_a)
+  endfor
+  --cycle
+enddef;
+
+
+vardef marqueangleor(expr A,O,B)=
+  arc_marqueangle(A,O,B,taille_marque_a)
+enddef;
+
+vardef marqueangle(text t)=
+  if long_texte(t)=4: marqueanglegeo(t)
+  else: marqueangleor(t)
+  fi
+enddef;
+
+vardef nommeangle@#(expr A,O,B,p)=
+  save P,a;pair P;path a;
+  a:=arc_marqueangle(A,O,B,taille_marque_a);
+  P:= point (arctime 0.5*arclength a of a) of a;
+  if string p: thelabel@#(p,P)
+  else: thelabel@#(p scaled defaultscale,P)
+  fi
+enddef;
+
+
+
+taille_marque_ad:=0.3cm;
+
+vardef marqueangledroit(expr A,O,B)=
+  parallelogramme((_cart(O)+taille_marque_ad*unitvector(_cart(A)-_cart(O))) transformed inverse _T,O,(_cart(O)+taille_marque_ad*unitvector(_cart(B)-_cart(O))) transformed inverse _T)
+enddef;
+
+taille_marque_s:=0.3cm;
+angle_marque_s:=60;
+sep_marque_s:=2;
+
+vardef milieu(expr A,B)=
+  0.5[A,B]
+enddef;
+
+vardef marqueunique_s(expr A,B)=
+   ((-taille_marque_s*unitvector(_cart(A)-_cart(B))/2)--(taille_marque_s*unitvector(_cart(A)-_cart(B))/2)) rotated angle_marque_s
+enddef;
+
+vardef marquesegment(expr A,B,n)=
+ save $;
+ picture $;
+ $=image(
+    for i=1 upto n:
+      draw marqueunique_s(A,B) shifted ((i-1-(n-1)/2)*sep_marque_s*unitvector(_cart(B)-_cart(A))) transformed inverse _T;
+    endfor
+    );
+  $ shifted milieu(_cart(A),_cart(B))
+enddef;
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%   FONCTIONS USUELLES   %%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -1677,13 +2001,13 @@
 vardef repbriques(expr larg,haut,dec)=
  numeric d;d=0;
  image(%
- for j=0 upto _hautcadre/haut:
-   draw ((0,0)--(_largcadre,0)) shifted (0,j*haut);
+ for j=0 upto _hautcadre_/haut:
+   olddraw ((0,0)--(_largcadre_,0)) shifted (0,j*haut);
    d:=d+dec;if d>larg: d:=d-larg fi;
-   for i=0 upto _largcadre/larg:
-     draw ((0,0)--(0,haut)) shifted (i*larg+d,j*haut);
+   for i=0 upto _largcadre_/larg:
+     olddraw ((0,0)--(0,haut)) shifted (i*larg+d,j*haut);
    endfor;
- endfor) shifted llcorner cadre
+ endfor) shifted llcorner _cart(cadre)
 enddef;
 
 
@@ -1700,9 +2024,9 @@
 
 vardef rephachures(expr pas,angle)=
  image(%
- for i=floor(-_diag/(2*pas)) upto ceiling(_diag/(2*pas)):
- draw ((-_diag/2,0)--(_diag/2,0)) shifted (0,i*pas);
- endfor) rotated angle shifted center cadre
+ for i=floor(-_diag_/(2*pas)) upto ceiling(_diag_/(2*pas)):
+ olddraw ((-_diag_/2,0)--(_diag_/2,0)) shifted (0,i*pas);
+ endfor) rotated angle shifted center _cart(cadre)
 enddef;
 
 numeric pervagues,ampvagues,decvagues;
@@ -1719,11 +2043,11 @@
 
 vardef repvagues(expr per,amp,dec)=   %D'après le manuel de l'utilisateur de MetaPost
  image(%
- for j=0 upto _hautcadre/dec:
-   for i=0 upto _largcadre/amp:
-    draw ((0,0){curl 0}..(per/4,-amp)..(per/2,0){curl 0}..(3*per/4,amp)..(per,0){curl 0}) shifted (i*per,j*dec);
+ for j=0 upto _hautcadre_/dec:
+   for i=0 upto _largcadre_/amp:
+    olddraw ((0,0){curl 0}..(per/4,-amp)..(per/2,0){curl 0}..(3*per/4,amp)..(per,0){curl 0}) shifted (i*per,j*dec);
    endfor;
- endfor) shifted llcorner cadre
+ endfor) shifted llcorner _cart(cadre)
 enddef;
 
 
@@ -1732,7 +2056,7 @@
  save _des_;
  picture _des_;
  _des_:=c;
- clip _des_ to p;
+ clip _des_ to (p transformed _T);
  _des_
  endgroup
 enddef;
@@ -1749,12 +2073,7 @@
 n_packages:=0;
 
 def LaTeX_AjoutPackage(expr t)=
-  if known latexmp_module:
      latexmp_packages:=latexmp_packages & "," & t
-  else:
-     n_packages:=n_packages+1;
-     LaTeX_packages[n_packages]:=t
-  fi
 enddef;
 
 def LaTeX_AjoutCommande(expr t)=
@@ -1777,54 +2096,23 @@
       latexmp_inputenc:=LaTeX_inputenc;
       if latexmp_inputenc="": latexmp_inputenc:="utf8" fi;
       if latexmp_packages="": latexmp_packages:="fourier" fi;
-      latexmp_packages:=latexmp_packages & ",textcomp,mathtools,mathrsfs,esvect[e],siunitx[output-decimal-marker={,}],babel[frenchb]";
+      latexmp_packages:=latexmp_packages & ",textcomp,mathtools,mathrsfs,esvect[e],siunitx[output-decimal-marker={,}],babel[french]";
       latexmp_preamble:=latexmp_preamble & "\newcommand{\vect}[1]{\vv{#1}}" & "\newcommand{\calc}{\mathscr{C}}" & "\newcommand{\calp}{\mathscr{P}}" & "\DecimalMathComma" ;
    fi
 enddef;
 
-vardef LaTeX primary sc =   %D'après TEX.mp
-  if known latexmp_module: LaTeXsetup; textext(sc) scaled defaultscale
-  else:
-  save n_p;
-  numeric n_p;
-  write "verbatimtex" to "mptextmp.mp";
-  write "%&latex" to "mptextmp.mp";
-  write "\documentclass[10pt]{article}" to "mptextmp.mp";
-  if LaTeX_inputenc="":
-     write "\usepackage[utf8]{inputenc}" to "mptextmp.mp"
-  else:
-     write "\usepackage[" & LaTeX_inputenc &"]{inputenc}" to "mptextmp.mp"
-  fi;
-  write "\usepackage[T1]{fontenc}" to "mptextmp.mp";
-  if known LaTeX_packages[1]:
-       n_p:=1;
-       forever: exitunless known LaTeX_packages[n_p];
-          write "\usepackage{" & LaTeX_packages[n_p] &"}" to "mptextmp.mp";
-          n_p:=n_p+1;
-       endfor
-  else:
-       write "\usepackage{fourier}" to "mptextmp.mp"
-  fi;
-  write "\usepackage{amsmath}" to "mptextmp.mp";
-  write "\usepackage{mathrsfs}" to "mptextmp.mp";
-  write "\usepackage[e]{esvect}" to "mptextmp.mp";
-  write "\usepackage[output-decimal-marker={,}]{siunitx}" to "mptextmp.mp";
-  write "\usepackage[frenchb]{babel}" to "mptextmp.mp";
-  write LaTeX_preamble to "mptextmp.mp";
-  write "\newcommand{\vect}[1]{\vv{#1}}" to "mptextmp.mp";
-  write "\newcommand{\calc}{\mathscr{C}}" to "mptextmp.mp";
-  write "\newcommand{\calp}{\mathscr{P}}" to "mptextmp.mp";
-  write "\begin{document}" to "mptextmp.mp";
-  write "etex" to "mptextmp.mp";
-  write "btex "& sc &" etex" to "mptextmp.mp";
-  write EOF to "mptextmp.mp";
-  scantokens "input mptextmp" scaled defaultscale
+vardef LaTeX primary sc =   
+  if known mplib: textext(sc) scaled defaultscale
+  else: LaTeXsetup; textext(sc) scaled defaultscale
   fi
 enddef;
+%vardef LaTeX primary sc =   
+%   LaTeXsetup; textext(sc) scaled defaultscale
+%enddef;
 
 %%%%%%%%%%%%%%%Figure intermédiaire%%%%%%%%%%%%%%%%%%%
 def figureinter=
-  clip currentpicture to cadre;
+  clip currentpicture to (cadre transformed _T);
   shipit;
   _nfig:=_nfig+1;
   charcode:=charcode+1;
@@ -1831,13 +2119,6 @@
 enddef;
 
 
-vardef arrowhead expr p = %redéfinition flèches
-  save q,e; path q; pair e;
-  e = point length p of p;
-  q = gobble(p shifted -e cutafter makepath(pencircle scaled 2ahlength))
-    cuttings;
-  (q rotated .5ahangle & reverse q rotated -.5ahangle -- 0.5*(point 0 of q)-- cycle)  shifted e
-enddef;
 
 def epaisseur=withpen pencircle scaled enddef;
 def couleur=withcolor enddef;
@@ -1865,6 +2146,8 @@
 enddef;
 
 
+%%%%%%%%%%%%%%% MATHS %%%%%%%%%%%%%%%%%
+
 vardef arrondi(expr p,x)=              %arrondi de x au p-ième
   round((x-floor(x))*p)/p+floor(x)
 enddef;
@@ -1886,6 +2169,44 @@
   b_
 enddef;
 
+vardef factorielle(expr n)=  %  Calcul de n!
+  save $;
+  numeric $;
+  $:= 1  for i=1 upto n: * i endfor;
+  $
+enddef;
+
+vardef binom(expr n,k)=    % calcul du coefficient binomial k parmi n
+  save $,p;
+  numeric $,p;
+  p:= min(k,n-k);
+  $:=1;
+  for i=1 upto p:
+   $:= ($*(n-i+1))/i;
+  endfor
+  $
+enddef;
+
+vardef binomiale(expr n,p,k)=
+   save $,ktmp,ptmp;
+   numeric $,ktmp,ptmp;
+   if k>n-k:
+      ktmp:=n-k;
+      ptmp:=1-p
+   else:
+      ktmp:=k;
+      ptmp:=p
+   fi;
+   $:=1;
+   for i=1 upto ktmp:
+      $:=((n-i+1)/i)*ptmp*$;
+   endfor
+   for i=1 upto n-ktmp:
+      $:=$*(1-ptmp);
+   endfor
+   $
+enddef;
+
 %%%%%%%%%%%%%%% COULEURS %%%%%%%%%%%%%%%%%%%
 cmykcolor Rouge,Vert,Bleu,Marron,Lime,Orange,Rose,Pourpre,Violet,Cyan,Magenta,Jaune,Olive,Noir,Grisfonce,Gris,Grisclair,Blanc,Beige,Marine,Moutarde,Vertfonce;
 



More information about the tex-live-commits mailing list