texlive[66988] Master/texmf-dist: repere (2may23)

commits+karl at tug.org commits+karl at tug.org
Tue May 2 22:27:27 CEST 2023


Revision: 66988
          http://tug.org/svn/texlive?view=revision&revision=66988
Author:   karl
Date:     2023-05-02 22:27:26 +0200 (Tue, 02 May 2023)
Log Message:
-----------
repere (2may23)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/metapost/repere/README.md
    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

Modified: trunk/Master/texmf-dist/doc/metapost/repere/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/repere/README.md	2023-05-02 19:18:11 UTC (rev 66987)
+++ trunk/Master/texmf-dist/doc/metapost/repere/README.md	2023-05-02 20:27:26 UTC (rev 66988)
@@ -1,4 +1,4 @@
-Package repere - Version 23.02 - February 9, 2023
+Package repere - Version 23.05 - May 2, 2023
 
 ---
 

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	2023-05-02 19:18:11 UTC (rev 66987)
+++ trunk/Master/texmf-dist/doc/metapost/repere/repere-doc.tex	2023-05-02 20:27:26 UTC (rev 66988)
@@ -48,7 +48,6 @@
 
 \usepackage{luamplib}
 \everymplib{verbatimtex \leavevmode etex;
-%            input geometriesyr16;
             input repere;}
 \mplibnumbersystem{decimal}
             
@@ -80,7 +79,6 @@
 }
 \makeatother
 
-%\definecolor{CoulParam}{rgb}{0.281,0.275,0.485}
 \definecolor{CoulParam}{rgb}{0.4,0,0.5}
 
 \definecolor{TestC}{rgb}{0.963,0.971,0.994}
@@ -525,7 +523,6 @@
 repere.larg(110,160,5cm,2000,7000,5cm);
  interaxes(120,3000);
  setaxes(120,160,3000,7000);
- setgrad(120,160,3000,7000);
  draw axex(10,10);
  draw axey(1000,1000);
 fin;
@@ -1156,8 +1153,8 @@
 C_f= courbefonc(f)(-2,2.5);
 draw axes(1,1);
 drawoptions(withpen pencircle scaled 1);
-draw p withcolor bleu;
-draw C_f withcolor rouge;
+draw p withcolor blue;
+draw C_f withcolor red;
 intercourbes(I,C_f,p);
 drawoptions(withcolor black);
 nomme.lft(I1);nomme.rt(I2);
@@ -1689,13 +1686,13 @@
 Cf= courbefonc(f)();
 ptantecedents(A,2,Cf);
 draw axes(1,1);
-drawoptions(dashed evenly withcolor rouge);
+drawoptions(dashed evenly withcolor red);
 draw Projectionx.lrt(A1,"$x_1$");
 draw Projectionx(A2);
 draw Projectiony(A1);
 draw Projectiony.urt(A2,"$y$");
 drawoptions();
-draw Cf withpen pencircle scaled 1 withcolor bleu;
+draw Cf withpen pencircle scaled 1 withcolor blue;
 fin;
 \end{exemple}
 
@@ -1711,12 +1708,12 @@
 A1=(-0.5,f(-0.5));A2=(2.8,f(2.8));
 A3=(0.75,f(0.75));
 draw axes(1,1);
-drawoptions(dashed evenly withcolor rouge);
+drawoptions(dashed evenly withcolor red);
 draw Projectionaxes(A1,"$x$","$f(x)$");
 draw Projectionaxes(A2,"$x$","$f(x)$");
 draw Projectionaxes(A3,"$x$","$f(x)$");
 drawoptions();
-draw Cf withpen pencircle scaled 1 withcolor bleu;
+draw Cf withpen pencircle scaled 1 withcolor blue;
 fin;
 \end{exemple}
 
@@ -1840,7 +1837,7 @@
  picture diag;
  draw axes(1,1);
  diag:=diagrammebatons((1,2),(2,4),(3,2),(4,1));
- draw diag withcolor rouge;
+ draw diag withcolor red;
 fin
 \end{exemple}
 
@@ -2048,7 +2045,7 @@
 \end{rpobjet}
 
 \begin{rpobjet}{marquesegment(<A>,<B>,<n>)}{picture}
-Figure formée d'une marque sur le segment $[AB]$. L'espace entre les marques est contrôlé par le paramètre \verb|sep_marque_s|.
+Figure formée de \verb|n| marques sur le segment $[AB]$. L'espace entre les marques est contrôlé par le paramètre \verb|sep_marque_s|.
 \end{rpobjet}
 
 \begin{exemple}
@@ -2172,7 +2169,27 @@
 fin;
 \end{exemple}
 
+\begin{rplabel}{nomme.pos(<A>,<O>,<B>,<texte>,<n>)}
+Même chose que précédemment avec en plus le tracé de \verb|n| arcs de cercle pour marquer l'angle.
+\end{rplabel}
 
+
+\begin{rplabel}{nomme(<A>,<O>,<B>,<texte>,<n>)}
+Même chose que précédemment mais la position est calculée automatiquement en fonction de l'angle.
+\end{rplabel}
+
+\begin{exemple}
+repere();
+pair A,B,C;
+A=(0,0);B=(4,0);C=(3,2.5);
+draw A--B--C--cycle;
+nomme.llft(A);nomme.lrt(B);nomme.top(C);
+nomme[15](B,A,C,"\ang{45}",1);
+nomme(C,B,A,"$\alpha$",2);
+fin;
+\end{exemple}
+
+
 \subsection{Cotes}
 
 \begin{rplabel}{cote(<A>,<B>,<texte>)}
@@ -2630,6 +2647,149 @@
 fin;
 \end{exemple}
 
+\subsection{Transformations}
+Un certain nombre de transformations sont prédéfinies dans \MP{}. Elles sont ici reprises et, parfois, légèrement modifiées, notamment en ce qui concerne la syntaxe.
+
+
+\begin{rpobjet}{translation(<vect>)(<obj>)}{pair, path ou picture}
+Image de \verb|obj| par la translation de vecteur \verb|vect|.
+\end{rpobjet}
+
+
+\begin{exemple}
+repere();
+pair A,B,C,C',u;
+path c;
+u=(1,-2);
+A=(1,1);B=(2,2);C=(4,2);
+nomme.ulft(B);
+c=cercle(B,A);draw c;
+draw translation(u)(c);
+C'=translation(u)(C);
+nomme.urt(C);nomme.urt(C');
+drawvecteur(B,u) withcolor red;
+fin;
+\end{exemple}
+
+
+\begin{rpobjet}{rotation(<pt>,<ang>)(<obj>)}{pair, path ou picture}
+Image de \verb|obj| par la rotation de centre \verb|pt| et d'angle \verb|ang|.
+\end{rpobjet}
+
+
+\begin{exemple}
+repere();
+pair A,B,C,B';
+A=(2,1);B=(3,3);C=(5,2);
+nomme.lrt(A);nomme.ulft(B);
+nomme.urt(C);
+B'=rotation(A,110)(B);
+nomme.llft(B');
+draw B--A--B';
+nomme(B,A,B',"\ang{110}",1);
+draw marquesegment(B,A,A,B');
+path seg; seg:=B--C;
+draw seg withcolor blue;
+draw rotation(A,110)(seg) withcolor blue;
+fin;
+\end{exemple}
+
+\begin{rpobjet}{symetrie(<pt>)(<obj>)}{pair, path ou picture}
+Image de \verb|obj| par la symétrie de centre \verb|pt|.
+\end{rpobjet}
+
+\begin{exemple}
+repere();
+ pair C,D,O;
+ path s,c;
+ C=(3,3);D=(1,4);
+ O=(0,2.5);
+ s=C--D;
+ c=cercle(D,1);
+ draw s;draw c;
+ nomme.bot(O) withcolor blue;
+ draw symetrie(O)(s);
+ draw symetrie(O)(c);
+fin;
+\end{exemple}
+
+
+\begin{rpobjet}{symetrie(<A>,<B>)(<obj>)}{pair, path ou picture}
+Image de \verb|obj| par la symétrie d'axe \verb|(AB)|.
+\end{rpobjet}
+
+
+\begin{exemple}
+repere(-4,4,1cm,0,5,1cm);
+ pair C,D,O,I;
+ path s,c;
+ C=(3,3);D=(1,4);
+ O=(1,0);I=(-1,4);
+ s=C--D;
+ c=cercle(D,1);
+ draw s;draw c;
+ draw droite(O,I) withcolor blue;
+ draw symetrie(O,I)(s);
+ draw symetrie(O,I)(c);
+fin;
+\end{exemple}
+
+\begin{rpobjet}{homothetie(<pt>,<rap>)(<obj>)}{pair, path ou picture}
+Image de \verb|obj| par l'homothétie de centre \verb|pt| et de rapport \verb|rap|.
+\end{rpobjet}
+
+\begin{exemple}
+repere();
+ pair O,A,B,C,D;
+ O=(1,1);
+ A=(2,1);B=(3,2);C=(3,3);D=(1,3);
+ path p;p:= polygone(A,B,C,D);
+ nomme.llft(O);
+ draw p;
+ draw homothetie(O,2)(p);
+fin
+\end{exemple}
+
+\begin{rpobjet}{similitude(<pt>,<rap>,<ang>)(<obj>)}{pair, path ou picture}
+Image de \verb|obj| par la similitude de centre \verb|pt|, de rapport \verb|rap| et d’angle \verb|ang|.
+\end{rpobjet}
+
+\bigskip
+
+À titre expérimental, on dispose du paramètre suivant qui permet de définir les points créés par l'image d'une figure par transformation.
+
+\begin{rpparam}
+extratransf & string & "" & Chaine qui désigne les caractères à ajouter au nom des points lors du dessin de l'image de certaines figures (notamment \verb|Triangle|, \verb|Segment|) par transformation. La valeur peut être \verb|"'", "''",...| ou un nombre. Les nouveaux points sont créés.
+\end{rpparam}
+
+\begin{exemple}[lefthand ratio=0.55]
+repere();
+extratransf:="'";
+pair A,B,C,u;
+u=(1,-2);
+A=(1,1);B=(2,2);C=(4,2);
+draw Triangle(A,B,C)()()();
+draw translation(u)(Triangle(A,B,C)()()());
+draw B'--C withcolor blue;
+drawvecteur(A,u) withcolor red;
+fin;
+\end{exemple}
+
+\begin{exemple}[lefthand ratio=0.55]
+repere();
+extratransf:="1";
+pair A,B,C,D,u,O;
+A=(2,1);B=(3,3);C=(5,2);
+O=(0,1);
+nomme.llft(O);
+draw Triangle(A,B,C)()()() withcolor blue;
+draw rotation(O,60)(Triangle(A,B,C)()()())
+                                    withcolor blue;
+draw B--O--B1 dashed evenly;
+fin;
+\end{exemple}
+
+
 \section{Dessin à main levée}
 L'idée de dessiner une figure comme si elle était faite à main levée vient de Christophe \bsc{Poulain} dans les macros de \verb|geometriesyr16.mp|\footnote{\url{https://melusine.eu.org/syracuse/poulecl/geometriesyr16/}} . Cette idée est reprise par Toby \bsc{Thurston} dans le document « Drawing with MetaPost »\footnote{\url{https://github.com/thruston/Drawing-with-Metapost/blob/master/Drawing-with-Metapost.pdf}}. Le principe est de modifier le tracé des chemins en changeant légèrement les angles de départ et d'arrivée pour créer une déformation qui rappelle le dessin à main levée.
 
@@ -2905,8 +3065,24 @@
 fin;
 \end{exemple}
 
+\subsection{Couleur de fond}
 
+Il est possible de modifier la couleur de fond en modifiant la couleur \verb|fond_coul|.
+\begin{rpparam}
+fond_coul & color & white & Couleur du fond de la figure
+\end{rpparam}
 
+\begin{exemple}
+repere(-3.5,3.5,1cm,-3.5,3.5,1cm);
+ fond_coul:=(0.9,0.9,1);
+ setquad(-3,3,-3,3);
+ draw quadrillage(1,1);
+ draw axes(1,1);
+fin;
+\end{exemple}
+
+
+
 \subsection{Francisation}
 Quelques mot-clefs ont été traduits.
 
@@ -3173,8 +3349,73 @@
 fin;
 \end{exemple}
 
+\section{Pixel art}
 
+Il est possible d'utiliser les tableaux pour dessiner des figures en pixel art.
 
+\begin{rpobjet}{pixart(<liste d'entiers> ou <liste de couleurs>)}{picture}
+Figure composée de carrés remplis d'une couleur qui est soit la couleur indiquée explicitement soit une couleur qui dépend de l'entier indiqué (celles-ci sont définies au départ mais peuvent être modifiées). On peut remplacer un entier par \verb|_| pour que la case ne soit pas remplie. Les pixels doivent être donnés de gauche à droite et de haut en bas.
+\end{rpobjet}
+
+
+\begin{exemple}
+tableau(3,3,1cm);
+draw pixart(0,1,2,
+              3,4,5,
+              6,7,_);
+fin;
+\end{exemple}
+
+\begin{exemple}
+tableau(3,3,1cm);
+fond_coul:=grisclair;
+draw pixart(0,1,2,
+              3,4,5,
+              6,7,_);
+fin;
+\end{exemple}
+
+
+\begin{exemple}
+tableau(3,3,1cm);
+draw pixart(blanc,noir,rouge,
+              vert,bleu,cyan,
+              magenta,jaune,_);
+fin;
+\end{exemple}
+
+\begin{rpdeclaration}{pixcoul(<liste de couleurs>)}
+Macro qui permet de définir les couleurs qui seront utilisées. La première correspond à 0, la deuxième à 1...
+
+Au départ la macro est appelée de la façon suivante :
+
+\qquad \verb|pixcoul(blanc,noir,rouge,vert,bleu,cyan,magenta,jaune);|
+\end{rpdeclaration}
+
+\begin{exemple}
+tableau(3,3,1cm);
+pixcoul(marron,lime,orange,rose,
+         pourpre,olive,violet,beige);
+draw pixart(0,1,2,
+              3,4,5,
+              6,7,_);
+fin;
+\end{exemple}
+
+
+\begin{rpparam}
+pixart_ep & numeric & 0.3 & Écart laissé vide entre les cases.
+\end{rpparam}
+
+\begin{exemple}
+tableau(3,3,1cm);
+pixart_ep:=2;
+draw pixart(0,1,2,
+              3,4,5,
+              6,7,_);
+fin;
+\end{exemple}
+
 \section{Quelques dessins}
 
 \begin{center}
@@ -3491,6 +3732,47 @@
 fin;
 \end{exemple}
 
+\subsection{Pixel art}
+
+\begin{exemple}
+tableau(11,8,0.4cm);
+pixart_ep:=0;
+draw pixart(0,0,1,0,0,0,0,0,1,0,0,
+              0,0,0,1,0,0,0,1,0,0,0,
+              0,0,1,1,1,1,1,1,1,0,0,
+              0,1,1,0,1,1,1,0,1,1,0,
+              1,1,1,1,1,1,1,1,1,1,1,
+              1,0,1,1,1,1,1,1,1,0,1,
+              1,0,1,0,0,0,0,0,1,0,1,
+              0,0,0,1,1,0,1,1,0,0,0);
+fin;
+\end{exemple}
+
+\begin{exemple}
+tableau(14,15,0.3cm);
+pixart_ep:=0;
+color b,n,v,r,c;
+b:=blanc;n:=noir;v:=0.6vert;
+r:=0.7rouge;c:=(1,0.2,0.2);
+draw pixart(_,_,_,_,_,_,_,_,_,_,_,n,n,_,
+              _,_,_,_,_,_,_,_,_,_,n,v,v,n,
+              _,_,_,_,_,_,_,n,n,n,n,v,v,n,
+              _,_,_,_,_,_,n,v,v,v,v,v,n,_,
+              _,_,_,_,_,n,v,n,n,n,v,n,_,_,
+              _,_,n,n,n,v,n,_,_,n,v,n,_,_,
+              _,n,c,c,v,c,n,_,n,v,n,_,_,_,
+              n,c,c,c,c,c,c,n,v,n,n,_,_,_,
+              n,c,c,c,c,c,n,c,v,c,c,n,_,_,
+              n,c,b,c,c,n,c,c,v,c,c,c,n,_,
+              n,c,c,b,r,n,c,c,c,c,c,c,n,_,
+              _,n,r,r,r,n,c,c,c,c,c,r,n,_,
+              _,_,n,n,n,n,c,c,c,b,r,r,n,_,
+              _,_,_,_,_,_,n,r,r,r,r,n,_,_,
+              _,_,_,_,_,_,_,n,n,n,n,_,_,_
+              );
+fin;
+\end{exemple}
+
 \end{document}
 
 

Modified: trunk/Master/texmf-dist/metapost/repere/repere.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/repere/repere.mp	2023-05-02 19:18:11 UTC (rev 66987)
+++ trunk/Master/texmf-dist/metapost/repere/repere.mp	2023-05-02 20:27:26 UTC (rev 66988)
@@ -2,7 +2,7 @@
 %%                        repere.mp                           %%
 %%   Macros pour la construction de figures dans un repère    %%
 %%                    o.peault at posteo.net                     %%
-%%               Version 23.02 (Février 2023)                 %%
+%%                 Version 23.05 (Mai 2023)                   %%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
 % This work may be distributed and/or modified under the conditions of
@@ -21,6 +21,7 @@
 %             segments, vecteurs, polygones complets
 % Octobre-Décembre 2022 : doc
 % Février 2023 : Main levée
+% Mai 2023 : Transformations, couleur de fond, pixart
 
 input format;
 if not known mplib: input latexmp fi;
@@ -140,7 +141,7 @@
   Ux:=_def3;Uy:=_def6;
   _T:=identity xscaled Ux yscaled Uy slanted cosd(theta) yscaled sind(theta);
   _defcadre;
-  setrepere(Xmin,Xmax,Ymin,Ymax);
+  settout(Xmin,Xmax,Ymin,Ymax);
   _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:=5;_nbaxes:=0;_axorlab:=nullpicture;poslabO:=(0,0);
@@ -167,7 +168,7 @@
     fi
     _op_
   enddef;
-  def draw expr p=
+  def Draw expr p=
     if (path p) and (type_trace="mainlevee"):
          ddraw mainleveepath(p)
     else:
@@ -174,6 +175,7 @@
          ddraw p
     fi
   enddef;
+  def draw expr p= Draw p enddef;
   %% fill
   def fill expr c =
     if path c:
@@ -182,6 +184,10 @@
       olddraw c
     fi
   enddef;
+  %% fill
+  def filldraw expr c =
+  addto currentpicture contour (c transformed _T) withpen currentpen
+  _op_ enddef;
   %% thelabel
   vardef thelabel@#(expr s,z) =  % Position s near z
     save p; picture p;
@@ -214,7 +220,7 @@
     if type_trace="mainlevee":
          ddrawarrow mainleveepath(p)
     else:
-         ddrawarrow p
+       ddrawarrow p
     fi
   enddef;
   def ddrawdblarrow expr p = _apth:=p transformed _T; _findarr enddef;
@@ -222,7 +228,7 @@
     if type_trace="mainlevee":
          ddrawdblarrow mainleveepath(p)
     else:
-         ddrawdblarrow p
+       ddrawdblarrow p
     fi
   enddef;
   %% bbox
@@ -244,6 +250,9 @@
     fi
     _op_
   enddef;
+  def filldraw expr c =
+    addto currentpicture contour c withpen currentpen
+    _op_ enddef;
   vardef thelabel@#(expr s,z) =  % Position s near z
     save p; picture p;
     if picture s:  p=s
@@ -266,13 +275,13 @@
 
 def _finarr text t =
   olddraw _apth t;
-  filldraw arrowhead _apth  t
+  oldfilldraw arrowhead _apth  t
 enddef;
 
 def _findarr text t =
   olddraw _apth t;
-  filldraw arrowhead _apth withpen currentpen  t;
-  filldraw arrowhead  reverse _apth  withpen currentpen  t
+  oldfilldraw arrowhead _apth withpen currentpen  t;
+  oldfilldraw arrowhead  reverse _apth  withpen currentpen  t
 enddef;
 
 vardef arrowhead expr p = %redéfinition flèches
@@ -355,8 +364,7 @@
 enddef;
 
 def setgrad(expr a,b,c,d)=
-  GradXmin:=a;GradXmax:=b;GradYmin:=c;GradYmax:=d;
-  setval(a,b,c,d);
+  GradXmin:=a;GradXmax:=b;GradYmin:=c;GradYmax:=d
 enddef;
 
 def setval(expr a,b,c,d)=
@@ -377,9 +385,25 @@
 let setall=setrepere;
 let settout=setrepere;
 
+color fond_coul;
+
+
 def fin =
   if _nbaxes=1: olddraw _axorlab fi;
   if coupe: clip currentpicture to (cadre transformed _T) fi;
+%  Gestion du fond
+  if known fond_coul:
+    background:=fond_coul;
+    save tmpfig;
+    picture tmpfig;
+    tmpfig:=currentpicture;
+    currentpicture:=nullpicture;
+    newinternal bboxmargin;
+    bboxmargin:=0bp;
+    fill bbox tmpfig withcolor background;
+    draw tmpfig;
+  fi;
+% Fin gestion du fond
   if bf: oldendfig; bf:=false;_nfig:=_nfig+1 fi;
   rep_tab:=false;   % Ajout octobre 2021
   traces_orig;
@@ -475,9 +499,9 @@
 enddef;
 
 
-%vardef cheminaxex=_cart(AxeXmin,yO)--_cart(AxeXmax,yO) enddef;
+%vardef dessinaxex=_cart(AxeXmin,yO)--_cart(AxeXmax,yO) enddef;
 
-%vardef cheminaxey=_cart(xO,AxeYmin)--_cart(xO,AxeYmax) enddef;
+%vardef dessinaxey=_cart(xO,AxeYmin)--_cart(xO,AxeYmax) enddef;
 
 vardef cheminaxex=
       (AxeXmin,yO)--
@@ -504,7 +528,9 @@
      olddraw graduationx(arrondimil(i*grad)+xO) withpen pencircle scaled 0.5bp;
     endfor
     % dernière graduation
-    if AxeXmax*Ux-(imax*grad+xO)*Ux>ahlength: olddraw 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;
 
@@ -526,27 +552,27 @@
    picture $,labmin,labmax;
    numeric imin,imax;
      $=image(%
-     imin:=ceiling((ValXmin-xO)/val);imax:=floor((ValXmax-xO)/val);
-     % définition première étiquette
+   	imin:=ceiling((ValXmin-xO)/val);imax:=floor((ValXmax-xO)/val);
+   	% définition première étiquette
         if (imin<>0):
-         labmin:= etiquettex.@#(arrondimil(imin*val)+xO)
-     else: labmin:=nullpicture
-     fi;
-     % définition dernière étiquette
+   	    labmin:= etiquettex.@#(arrondimil(imin*val)+xO)
+	   else: labmin:=nullpicture
+   	fi;
+   	% définition dernière étiquette
         if (imax<>0):
-         labmax:= etiquettex.@#(arrondimil(imax*val)+xO)
-     else: labmax:=nullpicture
-     fi;
-     % tracé première étiquette
-     if xpart ((ulcorner labmin) transformed inverse _T)>=Xmin: olddraw labmin fi;
-     % tracé autres étiquettes
-     for i=imin+1 upto imax-1:
-        if (i<>0):
-          olddraw etiquettex.@#(arrondimil(i*val)+xO)
-        fi;
-     endfor;
-     % tracé dernière étiquette
-     if xpart ((lrcorner labmax) transformed inverse _T)<=Xmax: olddraw labmax fi;
+   	    labmax:= etiquettex.@#(arrondimil(imax*val)+xO)
+	   else: labmax:=nullpicture
+   	fi;
+   	% tracé première étiquette
+	   if xpart ((ulcorner labmin) transformed inverse _T)>=Xmin: olddraw labmin fi;
+   	% tracé autres étiquettes
+   	for i=imin+1 upto imax-1:
+    		if (i<>0):
+    		  olddraw etiquettex.@#(arrondimil(i*val)+xO)
+    		fi;
+   	endfor;
+   	% tracé dernière étiquette
+   	if xpart ((lrcorner labmax) transformed inverse _T)<=Xmax: olddraw labmax fi;
         );
       $
 enddef;
@@ -556,27 +582,27 @@
    picture $,labmin,labmax;
    numeric imin,imax;
      $=image(%
-     imin:=ceiling((ValYmin-yO)/val);imax:=floor((ValYmax-yO)/val);
-     % définition première étiquette
+   	imin:=ceiling((ValYmin-yO)/val);imax:=floor((ValYmax-yO)/val);
+   	% définition première étiquette
         if (imin<>0):
-         labmin:= etiquettey.@#(arrondimil(imin*val)+yO)
-     else: labmin:=nullpicture
-     fi;
-     % définition dernière étiquette
+   	    labmin:= etiquettey.@#(arrondimil(imin*val)+yO)
+	   else: labmin:=nullpicture
+   	fi;
+   	% définition dernière étiquette
         if (imax<>0):
-         labmax:= etiquettey.@#(arrondimil(imax*val)+yO)
-     else: labmax:=nullpicture
-     fi;
-     % tracé première étiquette
-     if ypart (llcorner labmin) >=ypart _cart(Xmin,Ymin): olddraw labmin fi;
-     % tracé autres étiquettes
-     for i=imin+1 upto imax-1:
-        if (i<>0):
-          olddraw etiquettey.@#(arrondimil(i*val)+yO)
-        fi;
-     endfor;
-     % tracé dernière étiquette
-     if ypart (ulcorner labmax) <=ypart _cart(Xmax,Ymax): olddraw labmax fi
+   	    labmax:= etiquettey.@#(arrondimil(imax*val)+yO)
+	   else: labmax:=nullpicture
+   	fi;
+   	% tracé première étiquette
+   	if ypart (llcorner labmin) >=ypart _cart(Xmin,Ymin): olddraw labmin fi;
+   	% tracé autres étiquettes
+   	for i=imin+1 upto imax-1:
+    		if (i<>0):
+    		  olddraw etiquettey.@#(arrondimil(i*val)+yO)
+    		fi;
+   	endfor;
+   	% tracé dernière étiquette
+   	if ypart (ulcorner labmax) <=ypart _cart(Xmax,Ymax): olddraw labmax fi
          );
       $
 enddef;
@@ -597,35 +623,35 @@
    if grad>0: olddraw graduationsaxex(grad) fi;
    %    étiquettes
    if val>0:
-     if nn=1:
-         if str @#<>"":
-      olddraw etiquettesaxex@#(val);
-      _axorlab:=etiquettex@#(xO)
-         else:
-      olddraw etiquettesaxex.bot(val);
-      _axorlab:=etiquettex.bot(xO)
-         fi;
-         poslabO:=poslabO + unitvector(0,ypart _posgradx@#);
-         if xO<>yO:
-      olddraw _axorlab
-         elseif _nbaxes=2:
-      olddraw _etiqx_(xO,0,xO) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
-         fi
-  elseif nn=2:
-         if str @#<>"":
-      olddraw etiquettesaxex@#(val);
-      olddraw etiquettex@#(xO)
-         else:
-      olddraw etiquettesaxex.bot(val);
-      olddraw etiquettex.bot(xO)
-         fi
-  else:
-         if str @#<>"":
-      olddraw etiquettesaxex@#(val)
-         else:
-      olddraw etiquettesaxex.bot(val)
-         fi
-  fi
+   	if nn=1:
+	       if str @#<>"":
+		  olddraw etiquettesaxex@#(val);
+		  _axorlab:=etiquettex@#(xO)
+	       else:
+		  olddraw etiquettesaxex.bot(val);
+		  _axorlab:=etiquettex.bot(xO)
+	       fi;
+	       poslabO:=poslabO + unitvector(0,ypart _posgradx@#);
+	       if xO<>yO:
+		  olddraw _axorlab
+	       elseif _nbaxes=2:
+		  olddraw _etiqx_(xO,0,xO) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
+	       fi
+	elseif nn=2:
+	       if str @#<>"":
+		  olddraw etiquettesaxex@#(val);
+		  olddraw etiquettex@#(xO)
+	       else:
+		  olddraw etiquettesaxex.bot(val);
+		  olddraw etiquettex.bot(xO)
+	       fi
+	else:
+	       if str @#<>"":
+		  olddraw etiquettesaxex@#(val)
+	       else:
+		  olddraw etiquettesaxex.bot(val)
+	       fi
+	fi
    fi
    );
    $
@@ -647,35 +673,35 @@
    if grad>0: olddraw graduationsaxey(grad) fi;
    %    étiquettes
    if val>0:
-     if nn=1:
-         if str @#<>"":
-      olddraw etiquettesaxey@#(val);
-      _axorlab:=etiquettey@#(yO)
-         else:
-      olddraw etiquettesaxey.lft(val);
-      _axorlab:=etiquettey.lft(yO)
-         fi;
-         poslabO:=poslabO + unitvector(xpart _posgrady@#,0);
-         if xO<>yO:
-      olddraw _axorlab
-         elseif _nbaxes=2:
-      olddraw _etiqy_(yO,0,yO) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
-         fi
-  elseif nn=2:
-         if str @#<>"":
-      olddraw etiquettesaxey@#(val);
-      olddraw etiquettey@#(yO)
-         else:
-      olddraw etiquettesaxey.lft(val);
-      olddraw etiquettey.lft(yO)
-         fi
-  else:
-         if str @#<>"":
-      olddraw etiquettesaxey@#(val)
-         else:
-      olddraw etiquettesaxey.lft(val)
-         fi
-  fi
+   	if nn=1:
+	       if str @#<>"":
+		  olddraw etiquettesaxey@#(val);
+		  _axorlab:=etiquettey@#(yO)
+	       else:
+		  olddraw etiquettesaxey.lft(val);
+		  _axorlab:=etiquettey.lft(yO)
+	       fi;
+	       poslabO:=poslabO + unitvector(xpart _posgrady@#,0);
+	       if xO<>yO:
+		  olddraw _axorlab
+	       elseif _nbaxes=2:
+		  olddraw _etiqy_(yO,0,yO) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
+	       fi
+	elseif nn=2:
+	       if str @#<>"":
+		  olddraw etiquettesaxey@#(val);
+		  olddraw etiquettey@#(yO)
+	       else:
+		  olddraw etiquettesaxey.lft(val);
+		  olddraw etiquettey.lft(yO)
+	       fi
+	else:
+	       if str @#<>"":
+		  olddraw etiquettesaxey@#(val)
+	       else:
+		  olddraw etiquettesaxey.lft(val)
+	       fi
+	fi
    fi
    );
    $
@@ -759,15 +785,15 @@
      else: fraction:=""
    fi;
    if dd=1:
-     if nn=1:
-       fr:=tt
-       else: fr:=decimal nn & tt
-     fi
+   	if nn=1:
+   	  fr:=tt
+   	  else: fr:=decimal nn & tt
+   	fi
    else:
-     if nn=1:
-       fr:="\" & fraction & "frac{" & tt & "}{" & decimal dd & "}"
-       else: fr:="\" & fraction & "frac{" & decimal nn & tt & "}{" & decimal dd & "}"
-     fi
+   	if nn=1:
+   	  fr:="\" & fraction & "frac{" & tt & "}{" & decimal dd & "}"
+   	  else: fr:="\" & fraction & "frac{" & decimal nn & tt & "}{" & decimal dd & "}"
+   	fi
    fi;
    if n<0:
      s:="-"
@@ -800,27 +826,27 @@
    numeric imin,imax,val;
     val:=n*pi/d;
      $=image(%
-     imin:=ceiling((ValXmin-xO)/val);imax:=floor((ValXmax-xO)/val);
-     % définition première étiquette
+   	imin:=ceiling((ValXmin-xO)/val);imax:=floor((ValXmax-xO)/val);
+   	% définition première étiquette
         if (imin<>0):
-         labmin:= etiquettexpi.@#(imin*n,d)
-     else: labmin:=nullpicture
-     fi;
-     % définition dernière étiquette
+   	    labmin:= etiquettexpi.@#(imin*n,d)
+	   else: labmin:=nullpicture
+   	fi;
+   	% définition dernière étiquette
         if (imax<>0):
-         labmax:= etiquettexpi.@#(imax*n,d)
-     else: labmax:=nullpicture
-     fi;
-     % tracé première étiquette
-     if xpart ((ulcorner labmin) transformed inverse _T)>=Xmin: draw labmin fi;
-     % tracé autres étiquettes
-     for i=imin+1 upto imax-1:
-        if (i<>0):
-          draw etiquettexpi.@#(i*n,d)
-        fi;
-     endfor;
-     % tracé dernière étiquette
-     if xpart ((lrcorner labmax) transformed inverse _T)<=Xmax: draw labmax fi;
+   	    labmax:= etiquettexpi.@#(imax*n,d)
+	   else: labmax:=nullpicture
+   	fi;
+   	% tracé première étiquette
+	   if xpart ((ulcorner labmin) transformed inverse _T)>=Xmin: draw labmin fi;
+   	% tracé autres étiquettes
+   	for i=imin+1 upto imax-1:
+    		if (i<>0):
+    		  draw etiquettexpi.@#(i*n,d)
+    		fi;
+   	endfor;
+   	% tracé dernière étiquette
+   	if xpart ((lrcorner labmax) transformed inverse _T)<=Xmax: draw labmax fi;
         );
       $
 enddef;
@@ -831,27 +857,27 @@
    numeric imin,imax,val;
     val:=n*pi/d;
      $=image(%
-     imin:=ceiling((ValYmin-yO)/val);imax:=floor((ValYmax-yO)/val);
-     % définition première étiquette
+   	imin:=ceiling((ValYmin-yO)/val);imax:=floor((ValYmax-yO)/val);
+   	% définition première étiquette
         if (imin<>0):
-         labmin:= etiquetteypi.@#(imin*n,d)
-     else: labmin:=nullpicture
-     fi;
-     % définition dernière étiquette
+   	    labmin:= etiquetteypi.@#(imin*n,d)
+	   else: labmin:=nullpicture
+   	fi;
+   	% définition dernière étiquette
         if (imax<>0):
-         labmax:= etiquetteypi.@#(imax*n,d)
-     else: labmax:=nullpicture
-     fi;
-     % tracé première étiquette
-     if ypart (llcorner labmin) >=ypart _cart(Xmin,Ymin): draw labmin fi;
-     % tracé autres étiquettes
-     for i=imin+1 upto imax-1:
-        if (i<>0):
-          draw etiquetteypi.@#(i*n,d)
-        fi;
-     endfor;
-     % tracé dernière étiquette
-     if ypart (ulcorner labmax) <=ypart _cart(Xmax,Ymax): draw labmax fi
+   	    labmax:= etiquetteypi.@#(imax*n,d)
+	   else: labmax:=nullpicture
+   	fi;
+   	% tracé première étiquette
+   	if ypart (llcorner labmin) >=ypart _cart(Xmin,Ymin): draw labmin fi;
+   	% tracé autres étiquettes
+   	for i=imin+1 upto imax-1:
+    		if (i<>0):
+    		  draw etiquetteypi.@#(i*n,d)
+    		fi;
+   	endfor;
+   	% tracé dernière étiquette
+   	if ypart (ulcorner labmax) <=ypart _cart(Xmax,Ymax): draw labmax fi
          );
       $
 enddef;
@@ -875,31 +901,31 @@
    %    étiquettes
    if nn=1:
        if str @#<>"":
-    draw etiquettesaxexpi@#(num,den);
-    _axorlab:=etiquettexpi@#(xO/pi,1)
+	  draw etiquettesaxexpi@#(num,den);
+	  _axorlab:=etiquettexpi@#(xO/pi,1)
        else:
-    draw etiquettesaxexpi.bot(num,den);
-    _axorlab:=etiquettexpi.bot(xO/pi,1)
+	  draw etiquettesaxexpi.bot(num,den);
+	  _axorlab:=etiquettexpi.bot(xO/pi,1)
        fi;
        poslabO:=poslabO + unitvector(0,ypart _posgradx@#);
        if xO<>yO:
-    draw _axorlab
+	  draw _axorlab
        elseif _nbaxes=2:
-    draw  _etiqx_(xO,0,fracmultpi(xO/pi,1)) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
+	  draw  _etiqx_(xO,0,fracmultpi(xO/pi,1)) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
        fi
    elseif nn=2:
        if str @#<>"":
-    draw etiquettesaxexpi@#(num,den);
-    draw etiquettexpi@#(xO/pi,1)
+	  draw etiquettesaxexpi@#(num,den);
+	  draw etiquettexpi@#(xO/pi,1)
        else:
-    draw etiquettesaxexpi.bot(num,den);
-    draw etiquettexpi.bot(xO/pi,1)
+	  draw etiquettesaxexpi.bot(num,den);
+	  draw etiquettexpi.bot(xO/pi,1)
        fi
    else:
        if str @#<>"":
-    draw etiquettesaxexpi@#(num,den)
+	  draw etiquettesaxexpi@#(num,den)
        else:
-    draw etiquettesaxexpi.bot(num,den)
+	  draw etiquettesaxexpi.bot(num,den)
        fi
    fi
    );
@@ -925,32 +951,32 @@
    %    étiquettes
    if nn=1:
        if str @#<>"":
-    draw etiquettesaxeypi@#(num,den);
-    _axorlab:=etiquetteypi@#(yO/pi,1)
+	  draw etiquettesaxeypi@#(num,den);
+	  _axorlab:=etiquetteypi@#(yO/pi,1)
        else:
-    draw etiquettesaxeypi.lft(num,den);
-    _axorlab:=etiquetteypi.lft(yO/pi,1)
+	  draw etiquettesaxeypi.lft(num,den);
+	  _axorlab:=etiquetteypi.lft(yO/pi,1)
        fi;
        poslabO:=poslabO + unitvector(xpart _posgrady@#,0);
        if xO<>yO:
-    draw _axorlab
+	  draw _axorlab
        elseif _nbaxes=2:
-    draw  _etiqy_(yO,0,fracmultpi(yO/pi,1)) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
-%    draw _etiqy_(yO,0,yO) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
+	  draw  _etiqy_(yO,0,fracmultpi(yO/pi,1)) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
+%	  draw _etiqy_(yO,0,yO) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
        fi
    elseif nn=2:
        if str @#<>"":
-    draw etiquettesaxeypi@#(num,den);
-    draw etiquetteypi@#(yO/pi,1)
+	  draw etiquettesaxeypi@#(num,den);
+	  draw etiquetteypi@#(yO/pi,1)
        else:
-    draw etiquettesaxeypi.lft(num,den);
-    draw etiquetteypi.lft(yO/pi,1)
+	  draw etiquettesaxeypi.lft(num,den);
+	  draw etiquetteypi.lft(yO/pi,1)
        fi
    else:
        if str @#<>"":
-    draw etiquettesaxeypi@#(num,den)
+	  draw etiquettesaxeypi@#(num,den)
        else:
-    draw etiquettesaxeypi.lft(num,den)
+	  draw etiquettesaxeypi.lft(num,den)
        fi
    fi
    );
@@ -1032,19 +1058,19 @@
    boolean var;
    var:=false;
    $=image(%
-  for _i=t:
-     if numeric _i:
-    if var: if str @#="": draw _etiqx_.bot(tmp,taillegrad,tmp) else: draw _etiqx_@#(tmp,taillegrad,tmp) fi fi;
-    if gradxpart:
-       olddraw graduationx(_i) withpen pencircle scaled 0.8bp
-    fi;
-    tmp:=_i;
-    var:=true
-     else:
-    if str @#="": draw _etiqx_.bot(tmp,taillegrad,_i) else: draw _etiqx_@#(tmp,taillegrad,_i) fi;
-    var:=false
-     fi;
-  endfor;
+	for _i=t:
+	   if numeric _i:
+		if var: if str @#="": draw _etiqx_.bot(tmp,taillegrad,tmp) else: draw _etiqx_@#(tmp,taillegrad,tmp) fi fi;
+		if gradxpart:
+		   olddraw graduationx(_i) withpen pencircle scaled 0.8bp
+		fi;
+		tmp:=_i;
+		var:=true
+	   else:
+		if str @#="": draw _etiqx_.bot(tmp,taillegrad,_i) else: draw _etiqx_@#(tmp,taillegrad,_i) fi;
+		var:=false
+	   fi;
+	endfor;
    if var: if str @#="": draw _etiqx_.bot(tmp,taillegrad,tmp) else: draw _etiqx_@#(tmp,taillegrad,tmp) fi fi);
    $
 enddef;
@@ -1056,20 +1082,20 @@
    boolean var;
    var:=false;
    $=image(%
-  for _i=t:
-     if numeric _i:
-    if var: if str @#="": draw _etiqy_.lft(tmp,taillegrad,tmp) else: draw _etiqy_@#(tmp,taillegrad,tmp) fi fi;
-%    olddraw ((taillegrad,0)--(-taillegrad,0)) shifted _cart(xO,_i) withpen pencircle scaled 0.8bp;
-    if gradypart:
-       olddraw graduationy(_i) withpen pencircle scaled 0.8bp
-    fi;
-    tmp:=_i;
-    var:=true
-     else:
-    if str @#="": draw _etiqy_.lft(tmp,taillegrad,_i) else: draw _etiqy_@#(tmp,taillegrad,_i) fi;
-    var:=false
-     fi;
-  endfor;
+	for _i=t:
+	   if numeric _i:
+		if var: if str @#="": draw _etiqy_.lft(tmp,taillegrad,tmp) else: draw _etiqy_@#(tmp,taillegrad,tmp) fi fi;
+%		olddraw ((taillegrad,0)--(-taillegrad,0)) shifted _cart(xO,_i) withpen pencircle scaled 0.8bp;
+		if gradypart:
+		   olddraw graduationy(_i) withpen pencircle scaled 0.8bp
+		fi;
+		tmp:=_i;
+		var:=true
+	   else:
+		if str @#="": draw _etiqy_.lft(tmp,taillegrad,_i) else: draw _etiqy_@#(tmp,taillegrad,_i) fi;
+		var:=false
+	   fi;
+	endfor;
    if var: if str @#="": draw _etiqy_.lft(tmp,taillegrad,tmp) else: draw _etiqy_@#(tmp,taillegrad,tmp) fi fi);
    $
 enddef;
@@ -1187,7 +1213,6 @@
 
 def labelang = draw thelabelang enddef;
 
-
 vardef nommepoint@#(text t)=
    save $,ch,dess,latch;
    pair $;
@@ -1200,13 +1225,18 @@
    fi;
    if long_texte(t)=1:
       dess:=image(draw marquepointFig(t);
-                  ch:=_chaine(t);
-                  mylabel@#("$" & ch & "$",t) withcolor coullabel)
+                  ch:="$" & _chaine(t) & "$";
+                  if _ext_tr_<>"": ch:=aj_extr_trsf(t,ch) fi;
+                  mylabel@#(ch,t) withcolor coullabel)
    else:
       dess:=image(%
       for PP=t:
-        if pair PP: marquepoint(PP); $:=PP
-        else: if string PP: mylabel@#(PP,$) else: mylabel@#(PP scaled defaultscale,$) fi withcolor coullabel
+        if pair PP:
+           marquepoint(PP); $:=PP
+        elseif string PP:
+           mylabel@#(PP,$) withcolor coullabel;
+        else:
+           mylabel@#(PP scaled defaultscale,$) withcolor coullabel
         fi;
       endfor)
    fi;
@@ -1262,8 +1292,9 @@
    fi;
    if long_texte(t)=1:
       dess:=image(draw marquepointFig(t);
-                  ch:=_chaine(t);
-                  mylabel@#("$" & ch & "$",t,an) withcolor coullabel)
+                  ch:="$" & _chaine(t) & "$";
+                  if _ext_tr_<>"": ch:=aj_extr_trsf(t,ch) fi;
+                  mylabel@#(ch,t,an) withcolor coullabel)
    else:
       dess:=image(%
       for PP=t:
@@ -1301,10 +1332,12 @@
 vardef nommeFig@#(text t)=
  save $;
  picture $;
- if long_texte(t)=4: $:=nommeangle@#(t)
+ if long_texte(t)=4: $:=nommeangle@#(t,0)
+ elseif long_texte(t)=5: $:=nommeangle@#(t)
  else:
    for i=t:
-     if pair i: $:=nommepoint@#(t)
+     if pair i: 
+           $:=nommepoint@#(t)
      elseif str @#="": $:=nommeautoobj(t)
      else: $:=nommecourbe@#(t)
      fi;
@@ -2068,9 +2101,9 @@
    c:= ypart direction t of p;
    _v:=N2*unitvector(direction t of p);
    $=image(%
-    marquepoint(M);
-    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;
+		marquepoint(M);
+		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;
     );
 %   $=image(%
 %    drawdblarrow (M-)--(M+ )
@@ -2346,7 +2379,7 @@
 
 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
+  _suiterecdeb_:=deb;_suiterecfin_:=fin;_suiterecinit_:=init;	%stocke les valeurs pour réutilisation
   save $,un;
   path $;
   numeric un;
@@ -2359,7 +2392,7 @@
   $
 enddef;
 
-vardef suiterecprojx@#(text t)=     %projections et étiquettes sur axe x, utilise les valeurs de suiterec
+vardef suiterecprojx@#(text t)=   	%projections et étiquettes sur axe x, utilise les valeurs de suiterec
   save $,deb,fin,nom,_qw_,un,lab;
   picture $;
   string nom,lab;
@@ -2366,13 +2399,13 @@
   numeric deb,fin,_qw_,un,_prec;
   deb:=_suiterecdeb_;fin:=_suiterecfin_;un:=_suiterecinit_;
   _qw_:=1;
-  for i=t:      %récupère les éventuelles nouvelles valeurs pour deb et fin
+  for i=t:			%récupère les éventuelles nouvelles valeurs pour deb et fin
     if _qw_ =1: if string i: nom:=i else: nom:="_val";_prec:=i fi;
     elseif _qw_=2:
-        deb:=i;
-        for j=_suiterecdeb_ upto i-1:
-          un:=_suiterecfonc_(un);
-        endfor
+    		deb:=i;
+    		for j=_suiterecdeb_ upto i-1:
+    		  un:=_suiterecfonc_(un);
+    		endfor
     elseif _qw_=3: fin:=i
     fi;
     _qw_:=_qw_+1;
@@ -2410,7 +2443,7 @@
   $
 enddef;
 
-vardef suiterecprojy@#(text t)=     %projections et étiquettes sur axe y, utilise les valeurs de suiterec
+vardef suiterecprojy@#(text t)=   	%projections et étiquettes sur axe y, utilise les valeurs de suiterec
   save $,deb,fin,nom,_qw_,un,lab;
   picture $;
   string nom,lab;
@@ -2417,13 +2450,13 @@
   numeric deb,fin,_qw_,un,_prec;
   deb:=_suiterecdeb_;fin:=_suiterecfin_;un:=_suiterecinit_;
   _qw_:=1;
-  for i=t:        %récupère les éventuelles nouvelles valeurs pour deb et fin
+  for i=t:				%récupère les éventuelles nouvelles valeurs pour deb et fin
     if _qw_ =1: if string i: nom:=i else: nom:="_val";_prec:=i fi;
     elseif _qw_=2:
-        deb:=i;
-        for j=_suiterecdeb_ upto i-2:
-          un:=_suiterecfonc_(un);
-        endfor
+    		deb:=i;
+    		for j=_suiterecdeb_ upto i-2:
+    		  un:=_suiterecfonc_(un);
+    		endfor
     elseif _qw_=3: fin:=i
     fi;
     _qw_:=_qw_+1;
@@ -2970,10 +3003,11 @@
   fi
 enddef;
 
-vardef nommeangle@#(expr A,O,B,p)=
+vardef nommeangle@#(expr A,O,B,p,n)=
   save P,a;pair P;path a;
   save marque_p; string marque_p;
   marque_p:="";
+  if n>0: draw marqueangle(A,O,B,n) fi;
   a:=arc_marqueangle(A,O,B,taille_marque_a);
   P:= point (arctime 0.5*arclength a of a) of a;
   if str @# = "":
@@ -3139,8 +3173,11 @@
 %   "\ang[round-mode=places,round-pad = false,drop-zero-decimal,round-precision=" & decimal(arr) & "]{" & decimal(nb) & "}"
 %enddef;
 
+numeric _tmp_puiss_dix_;
 vardef AffichageAngle(expr nb,arr)=
-   "\ang{" & decimal(arrondi(10**(arr),nb)) & "}"
+   _tmp_puiss_dix_:=round(10**arr);
+   "\ang{" & decimal(arrondi(_tmp_puiss_dix_,nb)) & "}"
+%   "\ang{" & decimal(arrondi(10**arr,nb)) & "}"
 enddef;
 
 
@@ -3147,12 +3184,18 @@
 %
 %%%%%%%%%%%%%%%%   Segments   %%%%%%%%%%%%%%%
 vardef Segment(suffix AA,BB)(text t)(text s)=
-  save ll_seg,posAA,anghh,count_tmp,chAA,chBB,chcote;
+  save ll_seg,posAA,anghh,count_tmp,chAA,chBB,chcote,pA,pB;
   numeric ll_seg,anghh,count_tmp;
   string chAA,chBB,chcote;
+  pair pA,pB;
+  pA:=AA;pB:=BB;
   count_tmp:=0;
   if AffCotes:
-     chcote:=decimal(abs(BB-AA));
+      if _tr_rapp_<>1:
+        chcote:=decimal(_tr_rapp_*abs(BB-AA))
+      else:
+        chcote:=decimal(abs(BB-AA))
+      fi;
      if UnitCotes<>"":
        chcote:="\SI[round-pad = false,round-mode=places,round-precision=" & decimal(ArrondiCotes) & "]{" & chcote & "}{" & UnitCotes & "}"
      else:
@@ -3173,31 +3216,44 @@
     elseif count_tmp=2: chBB:=i
     fi;
   endfor
+  % On modifie les noms si on est dans une transformation et on définit les points
+  if  _ext_tr_<>"":
+    chAA:=aj_extr_trsf(AA,chAA);
+    chBB:=aj_extr_trsf(BB,chBB);
+  fi
+  % On modifie les points si on est dans une transformation
+    if _tr_bool_:
+      def _transform_fig_= enddef;
+      pA:=_transform_pt_(AA);
+      pB:=_transform_pt_(BB);
+    fi
   for i=s:
     chcote:=i;
   endfor
-  SegmentComplet(AA,BB)(chAA,chBB,chcote)
+  SegmentComplet(pA,pB)(chAA,chBB,chcote)
 enddef;
 
 
 
-vardef SegmentComplet(expr AA,BB)(expr chAA,chBB,cotei) text t=
+vardef SegmentComplet(expr AA,BB)(expr chAA,chBB,cotei)=
 %% Les extrémités étant données, trace le segment, le nom des points et la cote
 %% La position du nom est calculée automatiquement
-  save tmp,anghh,tmpana,tmpanb;
+  save tmp,anghh,tmpana,tmpanb,chA,chB;
   picture tmp;
+  string chA,chB;
+  chA:=chAA;chB:=chBB;
   numeric anghh,tmpana,tmpanb;
   anghh:=angle(BB-AA);
   tmpana=anghh+180 ;
   tmpanb=anghh ;
   tmp:=image(%
-    draw AA--BB t;
-    nomme[tmpana](AA,chAA) t withpen currentpen;
-    nomme[tmpanb](BB,chBB) t withpen currentpen;
+    draw AA--BB;
+    nomme[tmpana](AA,chA) withpen currentpen;
+    nomme[tmpanb](BB,chB) withpen currentpen;
     if xpart AA <= xpart BB:
-       cote(AA,BB,cotei) t
+       cote(AA,BB,cotei)
     else:
-       cote(BB,AA,cotei) t
+       cote(BB,AA,cotei)
     fi;
   );
   tmp
@@ -3357,25 +3413,38 @@
 
 boolean rep_ad_A,rep_ad_B,rep_ad_C;
 
-def cotepolyplacee(suffix ptA,ptB)(expr chcote,sensdirect) text t=
+def cotepolyplacee(suffix ptA,ptB)(expr chcote,sensdirect)=
    if xpart ptA<= xpart ptB:
        if sensdirect:
-         cote(ptA,ptB,chcote) t
+         cote(ptA,ptB,chcote)
        else:
-         cote.top(ptA,ptB,chcote) t
+         cote.top(ptA,ptB,chcote)
        fi
    else:
        if sensdirect:
-         cote.top(ptB,ptA,chcote) t
+         cote.top(ptB,ptA,chcote)
        else:
-         cote(ptB,ptA,chcote) t
+         cote(ptB,ptA,chcote)
        fi
    fi
 enddef;
 
-vardef TriangleComplet(suffix AA,BB,CC)(expr chAA,chBB,chCC,coteAB,coteBC,coteCA,angAA,angBB,angCC) =
+def nommeangleaigu(expr B,A,C,chang,sensdirect)=
+  if sensdirect:
+     nomme(B,A,C,chang,1)
+  else:
+     nomme(C,A,B,chang,1)
+  fi
+enddef;
+
+
+vardef TriangleComplet(expr pAA,pBB,pCC)(expr chAA,chBB,chCC,coteAB,coteBC,coteCA,angAA,angBB,angCC) =
 %% Trace le triangle, les noms des points, les cotes et les angles
-  save tmpang,tmpfig,tmpscale,sensdir;
+  save tmpang,tmpfig,tmpscale,sensdir,chA,chB,chC,AA,BB,CC;
+  pair AA,BB,CC;
+  AA:=pAA;BB:=pBB;CC:=pCC;
+  string chA,chB,chC;
+  chA:=chAA;chB:=chBB;chC:=chCC;
   numeric tmpang,tmpscale;
   boolean sensdir;
   if angle(CC rotatedaround(AA,-angle(BB-AA)) - AA)>0:
@@ -3411,8 +3480,7 @@
           if rep_ad_A and AutoAngleDroit:
              draw marqueangledroit(BB,AA,CC) withpen currentpen
           else:
-             draw marqueangle(BB,AA,CC) withpen currentpen;
-             nomme(BB,AA,CC,angAA);
+             nommeangleaigu(BB,AA,CC,angAA,sensdir);
           fi;
         fi;
         if rep_type_triangle=2:
@@ -3419,8 +3487,7 @@
           if rep_ad_B and AutoAngleDroit:
              draw marqueangledroit(CC,BB,AA) withpen currentpen
           else:
-             draw marqueangle(CC,BB,AA) withpen currentpen;
-             nomme(CC,BB,AA,angBB);
+             nommeangleaigu(CC,BB,AA,angBB,sensdir);
           fi;
         fi;
      else:
@@ -3428,8 +3495,7 @@
           if rep_ad_A and AutoAngleDroit:
              draw marqueangledroit(BB,AA,CC) withpen currentpen
           else:
-             draw marqueangle(BB,AA,CC);
-             nomme(BB,AA,CC,angAA);
+             nommeangleaigu(BB,AA,CC,angAA,sensdir);
           fi;
         fi
         if (nang>=2):
@@ -3436,8 +3502,7 @@
           if rep_ad_B and AutoAngleDroit:
              draw marqueangledroit(CC,BB,AA) withpen currentpen
           else:
-             draw marqueangle(CC,BB,AA) withpen currentpen;
-             nomme(CC,BB,AA,angBB);
+             nommeangleaigu(CC,BB,AA,angBB,sensdir);
           fi;
         fi
         if (nang=3):
@@ -3444,8 +3509,7 @@
           if rep_ad_C and AutoAngleDroit:
              draw marqueangledroit(AA,CC,BB) withpen currentpen
           else:
-             draw marqueangle(AA,CC,BB) withpen currentpen;
-             nomme(AA,CC,BB,angCC);
+             nommeangleaigu(AA,CC,BB,angCC,sensdir);
           fi;
         fi
      fi
@@ -3730,9 +3794,9 @@
   rep_tri_lc:=abs(rep_tri_BB-rep_tri_AA);
   rep_tri_lb:=abs(rep_tri_CC-rep_tri_AA);
   rep_tri_la:=abs(rep_tri_BB-rep_tri_CC);
-  rep_tri_angA:=(angle(rep_tri_CC-rep_tri_AA) -angle(rep_tri_BB-rep_tri_AA) ) mod 360;
-  rep_tri_angB:=(angle(rep_tri_AA-rep_tri_BB)-angle(rep_tri_CC-rep_tri_BB)) mod 360;
-  rep_tri_angC:=180 - rep_tri_angB - rep_tri_angA;
+  rep_tri_angA:=abs(angle(rep_tri_CC-rep_tri_AA) -angle(rep_tri_BB-rep_tri_AA) );
+  rep_tri_angB:=abs(angle(rep_tri_AA-rep_tri_BB)-angle(rep_tri_CC-rep_tri_BB));
+  rep_tri_angC:=(180 - rep_tri_angB - rep_tri_angA);
   % Angles droits ?
   if arrondi(10**rep_int_arr,rep_tri_lc**2)=arrondi(10**rep_int_arr,(rep_tri_la)**2+(rep_tri_lb)**2):
      rep_ad_C:=true
@@ -3797,26 +3861,21 @@
 
 
 
-vardef ProcessAffTriangles(text q)(text p)(text c)(text a)=
+vardef ProcessAffTriangles(suffix A,B,C)(text p)(text c)(text a)=
 %% Gestion de l'affichage 
-  save chAA,chBB,chCC,cha,chb,chc,changA,changB,changC,count_tmp,ch,nang;
+  save chAA,chBB,chCC,cha,chb,chc,changA,changB,changC,count_tmp,ch,nang,AA,BB,CC;
   string chAA,chBB,chCC,cha,chb,chc,changA,changB,changC,ch;
   chAA=chBB=chCC=cha=chb=chc=changA=changB=changC="";
+  pair AA,BB,CC;
+  AA:=A;BB:=B;CC:=C;
   numeric count_tmp,nang;
   boolean tmpaffcotes,tmpaffangles;
   tmpaffcotes:=AffCotes;tmpaffangles:=AffAngles;
   if AffDonnees: AffCotes:=true;AffAngles:=true fi;
   % Noms des points passés en argument
-  count_tmp:=0;
-  forsuffixes i=q:
-    count_tmp:=count_tmp+1;
-    ch:=_chaine(i);
-    if count_tmp=1:     chAA:=
-    elseif count_tmp=2: chBB:=
-    else:               chCC:=
-    fi
-    "$" & ch & "$";
-  endfor
+   chAA:="$" & _chaine(A) & "$";
+   chBB:="$" & _chaine(B) & "$";
+   chCC:="$" & _chaine(C) & "$";
   % On modifie le nom des points si des valeurs sont passées dans p
   count_tmp:=0;
   for i=p:
@@ -3827,8 +3886,26 @@
     fi
     i;
   endfor
+    % On modifie les noms si on est dans une transformation et on définit les points
+    if  _ext_tr_<>"":
+      chAA:=aj_extr_trsf(A,chAA);
+      chBB:=aj_extr_trsf(B,chBB);
+      chCC:=aj_extr_trsf(C,chCC);
+    fi
+  % On modifie les points si on est dans une transformation
+    if _tr_bool_:
+      def _transform_fig_= enddef;
+      AA:=_transform_pt_(A);
+      BB:=_transform_pt_(B);
+      CC:=_transform_pt_(C);
+    fi
   % Cotes données par les longueurs
     if AffCotes:
+      if _tr_rapp_<>1:
+        rep_tri_la:=rep_tri_la*_tr_rapp_;
+        rep_tri_lb:=rep_tri_lb*_tr_rapp_;
+        rep_tri_lc:=rep_tri_lc*_tr_rapp_;
+      fi;
       if UnitCotes<>"":
         cha:=AffichageCoteAvecUnite(rep_tri_la,ArrondiCotes,UnitCotes);
         chb:=AffichageCoteAvecUnite(rep_tri_lb,ArrondiCotes,UnitCotes);
@@ -3866,7 +3943,7 @@
   if count_tmp>0: nang:= count_tmp elseif AffAngles: nang:=3 else: nang:=0 fi;
   AffCotes:=tmpaffcotes;AffAngles:=tmpaffangles;
 %
-  TriangleComplet(q)(chAA,chBB,chCC,chc,cha,chb,changA,changB,changC)
+  TriangleComplet(AA,BB,CC)(chAA,chBB,chCC,chc,cha,chb,changA,changB,changC)
 enddef;
 
 
@@ -3873,6 +3950,188 @@
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%   TRANSFORMATIONS   %%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+string extratransf;  % Chaine à ajouter aux nom des points 
+boolean  _tr_bool_;    % Indique qu'il faudra traiter la chaine précédente
+extratransf:="";
+ _tr_bool_:=false;
+
+numeric _tr_ang_rot_; % Angle à gérer pour l'affichage des points
+_tr_ang_rot_:=0;
+numeric _tr_rapp_; %Rapport d'agrandissement-réduction
+_tr_rapp_:=1;
+
+
+%% Translation
+
+vardef translationpoint(expr u)(expr A)=
+  A+u
+enddef;
+
+vardef translation(expr u)(text t)=
+ type_tr:=1;
+ if path t:
+    t shifted u
+ elseif pair t:
+    t+u
+ else:
+   def _transform_pt_= translationpoint(u) enddef;
+   def _transform_fig_= shifted u enddef;
+   _ext_tr_:=extratransf;
+    _tr_bool_ := true;
+   t
+   hide(_ext_tr_:=""; _tr_bool_:=false;
+         def _transform_pt_=  enddef;
+         def _transform_fig_= enddef;)
+ fi
+enddef;
+
+
+%% Rotation
+
+vardef rotationpoint(expr O,a)(expr A)=
+  A rotatedaround(O,a)
+enddef;
+
+vardef rotation(expr O,a)(text t)=
+ type_tr:=1;
+ if path t:
+    t rotatedaround(O,a)
+ elseif pair t:
+    t rotatedaround(O,a)
+ else:
+   def _transform_pt_= rotationpoint(O,a) enddef;
+   def _transform_fig_= rotatedaround(_cart(O),a) enddef;
+   _tr_ang_rot_:=a;
+   _ext_tr_:=extratransf;
+   _tr_bool_ := true;
+   t _transform_fig_
+   hide(_ext_tr_:="";_tr_bool_:=false;
+        def _transform_pt_=  enddef;
+        def _transform_fig_= enddef;
+        _tr_ang_rot_:=0;)
+ fi
+enddef;
+
+%% Symétrie centrale
+
+vardef symetriecentralepoint(expr O)(expr A)=
+  A rotatedaround(O,180)
+enddef;
+
+vardef symetriecentrale(expr O)(text t)=
+ type_tr:=1;
+ if path t:
+    t rotatedaround(O,180)
+ elseif pair t:
+    t rotatedaround(O,180)
+ else:
+   def _transform_pt_= symetriecentralepoint(O) enddef;
+   def _transform_fig_= rotatedaround(_cart(O),180) enddef;
+   _tr_ang_rot_:=180;
+   _ext_tr_:=extratransf;
+   _tr_bool_ := true;
+   t _transform_fig_
+   hide(_ext_tr_:="";_tr_bool_:=false;
+        def _transform_pt_=  enddef;
+        def _transform_fig_= enddef;
+        _tr_ang_rot_:=0;)
+ fi
+enddef;
+
+%% Symétrie axiale
+
+vardef symetrieaxialepoint(expr B,C)(expr A)=
+  A reflectedabout(B,C)
+enddef;
+
+vardef symetrieaxiale(expr B,C)(text t)=
+ type_tr:=1;
+ if path t:
+    t reflectedabout(B,C)
+ elseif pair t:
+    t reflectedabout(B,C)
+ else:
+   def _transform_pt_= symetrieaxialepoint(O) enddef;
+   def _transform_fig_= reflectedabout(_cart(B),_cart(C)) enddef;
+%   _tr_ang_rot_:=180;
+   _ext_tr_:=extratransf;
+   _tr_bool_ := true;
+   t _transform_fig_
+   hide(_ext_tr_:="";_tr_bool_:=false;
+        def _transform_pt_=  enddef;
+        def _transform_fig_= enddef;
+        _tr_ang_rot_:=0;)
+ fi
+enddef;
+
+%% Symétrie
+
+vardef symetrie(text r)(text t)=
+  if long_texte(r)=1:
+    symetriecentrale(r)(t)
+  else:
+    symetrieaxiale(r)(t)
+  fi
+enddef;
+
+
+
+%% Homothétie
+
+vardef homothetiepoint(expr O,k)(expr A)=
+  k[O,A]
+enddef;
+
+vardef homothetie(expr O,k)(text t)=
+ type_tr:=1;
+ if path t:
+    t shifted -O scaled k shifted O
+ elseif pair t:
+    k[O,t]
+ else:
+    def _transform_pt_= homothetiepoint(O,k) enddef;
+    def _transform_fig_= shifted -O scaled k shifted O enddef;
+    _ext_tr_:=extratransf;
+    _tr_bool_ := true;
+    _tr_rapp_:=abs(k);
+   t _transform_fig_
+   hide(_ext_tr_:=""; _tr_bool_:=false;
+         def _transform_pt_=  enddef;
+         def _transform_fig_= enddef;
+         _tr_rapp_:=1;)
+ fi
+enddef;
+
+%% Similitude
+
+vardef similitudepoint(expr O,k,a)(expr A)=
+  k[O,A] rotatedaround(O,a)
+enddef;
+
+vardef similitude(expr O,k,a)(text t)=
+ type_tr:=1;
+ if path t:
+    t rotatedaround(O,a) shifted -O scaled k shifted O
+ elseif pair t:
+    k[O,t] rotatedaround(O,a)
+ else:
+    def _transform_pt_= similitudepoint(O,k,a) enddef;
+    def _transform_fig_=rotatedaround(_cart(O),a) shifted -O scaled k shifted O enddef;
+    _ext_tr_:=extratransf;
+    _tr_bool_ := true;
+    _tr_rapp_:=abs(k);
+   t _transform_fig_
+   hide(_ext_tr_:=""; _tr_bool_:=false;
+         def _transform_pt_=  enddef;
+         def _transform_fig_= enddef;
+         _tr_rapp_:=1;)
+ fi
+enddef;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%   FONCTIONS USUELLES   %%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -4148,11 +4407,54 @@
   c
 enddef;
 
+string _ext_tr_; % Chaine à rajouter aux étiquette lors d'une transformation
+_ext_tr_:="";
 
+vardef ajout_extra_trsf(expr ch)= % ajoute _ext_tr_ en dernière ou avant dernière pos
+  save n;
+  numeric n;
+  n:=length(ch);
+  if n>1:
+    if substring (n-1,n) of ch = "$":
+      substring (0,n-1) of ch & _ext_tr_ & substring (n-1,n) of ch
+    else:
+      ch & _ext_tr_
+    fi
+  else:
+    ch
+  fi
+enddef;
+
+vardef aj_extr_trsf(expr A,ch)=
+  save tmpch,tmpchi,n;
+  numeric n;
+  string tmpch,tmpchi;
+  n:=length(ch);
+    if substring (n-1,n) of ch = "$":
+      tmpchi:=substring (1,n-1) of ch; %   Sans les $
+      if (ASCII _ext_tr_ > 47) and (ASCII _ext_tr_ < 58):
+        tmpch:="$" & tmpchi & "_" & _ext_tr_ & "$";
+        tmpchi:= tmpchi & "[]";
+        scantokens("pair " & tmpchi & ";");
+        tmpchi:= substring(0,n-1) of tmpchi & _ext_tr_ & "]";
+      else:
+        tmpchi:= tmpchi & _ext_tr_;
+        tmpch:="$" & tmpchi & "$";
+        scantokens("pair " & tmpchi & ";");
+      fi
+      scantokens(tmpchi) :=  _transform_pt_(A);
+    else:
+      tmpch:=ch;
+    fi
+  tmpch
+enddef;
+
+
 %%%%%%%%%%%%%%% MATHS %%%%%%%%%%%%%%%%%
 
 vardef arrondi(expr p,x)=              %arrondi de x au p-ième
-  round((x-floor(x))*p)/p+floor(x)
+%  round((x-floor(x))*p)/p+floor(x)
+  round(p*x)/p
 enddef;
 
 vardef arrondimil(expr x)=
@@ -4635,6 +4937,65 @@
   endfor
 enddef;
 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%  PIXEL ART %%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+color pixart_coul[],pixart_grille_coul;
+numeric pixart_ep;
+pixart_ep:=0.3;
+pixart_grille_coul:=background;
+
+
+def pixcoul(text t)=
+ save cnt;
+ numeric cnt;
+ cnt:=0;
+  for i=t:
+    pixart_coul[cnt]:=i;
+    cnt := cnt +1;
+  endfor
+enddef;
+
+pixcoul(white,black,red,green,blue,cyan,magenta,jaune);
+
+vardef contour_case_pix(expr n,m)=
+  save tmpne,tmpse;
+  pair tmpne,tmpse;
+  tmpne:=0.5*(pixart_ep,pixart_ep) transformed inverse _T;
+  tmpse:=0.5*(pixart_ep,-pixart_ep) transformed inverse _T;
+  (((0,0)+tmpne)--((1,0)-tmpse)--((1,1)-tmpne)--((0,1)+tmpse)--cycle)
+      shifted (_tab(n,m)-(0.5,0.5))
+enddef;
+
+
+vardef pixart(text t)=
+ save _;
+ numeric _;
+ _:=-1;
+ grille_ep:=pixart_ep;
+ save cnt,lig,col;
+ numeric cnt,lig,col;
+ cnt:=0;
+ lig:=rep_tab_p;col:=1;
+ image(%
+   for i=t:
+   if numeric i:
+    if i>-1: filldraw contour_case_pix(col,lig) withcolor pixart_coul[i] fi
+   elseif color i:
+     filldraw contour_case_pix(col,lig) withcolor i
+   fi;
+    if col=rep_tab_n:
+      lig:=lig-1;col:=1;
+    else:
+      col:=col+1;
+    fi
+   endfor
+ )
+enddef;
+
+
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%  DESSINS %%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



More information about the tex-live-commits mailing list.