texlive[51363] Master/texmf-dist: repere (11jun19)

commits+karl at tug.org commits+karl at tug.org
Tue Jun 11 23:01:21 CEST 2019


Revision: 51363
          http://tug.org/svn/texlive?view=revision&revision=51363
Author:   karl
Date:     2019-06-11 23:01:20 +0200 (Tue, 11 Jun 2019)
Log Message:
-----------
repere (11jun19)

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	2019-06-11 21:01:04 UTC (rev 51362)
+++ trunk/Master/texmf-dist/doc/metapost/repere/README.md	2019-06-11 21:01:20 UTC (rev 51363)
@@ -1,4 +1,4 @@
-Package repere - Version 17.11.2 - November 12, 2017
+Package repere - Version 19.06 - June 11, 2019
 
 This package provides MetaPost macros for drawing sec­ondary school math­e­mat­ics figures in a coordinate system :
 - axis, grids

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	2019-06-11 21:01:04 UTC (rev 51362)
+++ trunk/Master/texmf-dist/doc/metapost/repere/repere-doc.tex	2019-06-11 21:01:20 UTC (rev 51363)
@@ -3,10 +3,10 @@
 %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
-% (pdf)latex repere-doc.tex
+% pdflatex repere-doc.tex
+% mptopdf repere-doc.mp
+% mptopdf repere-doc.mp
+% pdflatex repere-doc.tex
 
   \usepackage{calc,ifthen}
 
@@ -149,6 +149,7 @@
                \IfFileExists{\jobname.\thenumfig}%
                    {\begin{minipage}[c]{\largeurfig}
                         \centering \includegraphics{\jobname.\thenumfig}\par
+%                        \centering a\includegraphics{reperedocfig2.mps}a\par
                     \end{minipage}}{}
                \par}
 
@@ -239,6 +240,7 @@
 
 
 \begin{codecache}
+%outputtemplate := "%j-%c.mps";
 input geometriesyr16;
 input repere;
 \end{codecache}
@@ -592,7 +594,7 @@
 
 \item[pointe(A,B,C...)] permet de marquer plusieurs points.
 
-\item[nomme.pos(A,nom)] marque le point et affiche son nom à 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+A+ est affiché. S'il s'agit d'un élément d'un tableau de points (\verb+A1+, \verb+A2+...), le nombre est affiché en indice.
+\item[nomme.pos(A,nom)] marque le point et affiche son nom à la position \verb+pos+ (qui peut être \verb|rt|, \verb|urt|, \verb|top|, \verb|ulft|...). \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+A+ est affiché. S'il s'agit d'un élément d'un tableau de points (\verb+A1+, \verb+A2+...), le nombre est affiché en indice.
 \end{description}
 
 
@@ -618,7 +620,23 @@
 fin;
 \end{exemple}
 
+\begin{description}
+\item[nomme{[a]}(A,nom)] Il est possible d'obtenir un placement plus fin des étiquettes en remplaçant la position au sens de \MP{} (\verb|rt|, \verb|urt|...) par un nombre qui représente alors la position de l'étiquette par rapport au point en degrés.
+\end{description}
 
+\begin{exemple}[0.55]
+repere(-3,3.5,1cm,-3,3,1cm);
+ pair A,B,C[];
+ A=(-2,-1);B=(1,-2);
+ nomme[40](A);nomme[70](A);nomme[100](A);
+ nomme[-110](B);
+ for i=0 upto 8:
+   C[i]:= (1+1.5*cosd(40i),1+1.5*sind(40i));
+   nomme[40*i](C[i]) couleur pourpre;
+ endfor
+draw cadre;
+fin;
+\end{exemple}
 
 
 \subsection{Vecteurs}
@@ -680,6 +698,28 @@
 fin;
 \end{exemple}
 
+\subsection{Demi-droites}
+\begin{description}
+\item[demidroite(A,B)] demi-droite $[AB)$.
+
+\item[demidroite(A,a)] demi-droite d'origine $A$ qui fait un angle $a$ avec la direction $(Ox)$.
+\end{description}
+
+
+\begin{exemple}
+repere(-4,4,0.9cm,-3,4,0.9cm);
+pair A,B,C;
+numeric a;
+A=(-1,1);B=(2,2);C=(-1,-2);
+draw axes(1,0);
+draw demidroite(A,B);
+nomme.llft(A);nomme.lrt(B);
+draw demidroite(C,0) dashed evenly;
+draw demidroite(C,120);
+nomme.llft(C);
+fin;
+\end{exemple}
+
 \subsection{Courbes et fonctions}
 \MP{} permet de définir simplement des fonctions (en utilisant par exemple la syntaxe suivante :
 \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.
@@ -973,7 +1013,31 @@
 fin;
 \end{exemple}
 
+\begin{description}
+\item[spline(A,<y'A>,B,<y'B>,C,<y'C>...)()] Courbe passant par les points $A$, $B$, $C$ représentant une fonction cubique par morceaux telle que $f(x_A)=y_A$, $f(x_B)=y_B$... et, le cas échéant, $f'(x_A)=y'_A$, $f'(x_B)=y'_B$... sur l'intervalle définissant le repère.
+\item[spline(A,<y'A>,B,<y'B>,C,<y'C>...)(xmin,xmax)] Même courbe que précédemment mais sur l'intervalle $[xmin;xmax]$.
+\end{description}
 
+\begin{exemple}[0.55]
+repere.orth(-1,10,7cm,-1,10);
+pair A,B,C,D;
+A=(0,1);B=(3,7);C=(6,2);D=(9,6);
+path S,T;
+S=spline(A,B,C,D)();
+T=spline(A,0.5,B,C,0,D,-2)();
+draw quadrillage(1,1);
+draw axes(1,1);
+draw S epaisseur 1 couleur bleu;
+draw T epaisseur 1 couleur rouge;
+draw tangente.double(T,0) couleur rouge;
+draw tangente.double(T,6) couleur rouge;
+draw tangente.double(T,9) couleur rouge;
+nomme.lrt(A);nomme.top(B);
+nomme.llft(C);nomme.rt(D);
+fin;
+\end{exemple}
+
+
 \section{Suites}
 \begin{description}
 \item[suite(u,deb,fin)] figure formée des points $(i;u_i)$ pour $i$ variant entre \verb+deb+ et \verb+fin+.
@@ -1442,13 +1506,19 @@
 \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|.
+\item[taille\_marque\_a] Valeur numérique (qui vaut par défaut \verb|0.4cm|) donnant le rayon des arcs de cercles servant à marquer les angles.
 
+\item[sep\_marque\_a] Valeur numérique (qui vaut par défaut \verb|1.5bp|) donnant la différence de rayon entre les différents arcs servant à marquer les angles.
+
+\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| permettant de marquer l'angle géométrique $\widehat{AOB}$. Les arcs (si \verb|n| est supérieur à 1) sont séparés de \verb|sep_marque_a|.
+
 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|.
+\item[nomme.pos(A,O,B,texte)] Place le texte à la position \verb|pos| par rapport au point central de l'arc de cercle de centre $O$ et de rayon \verb|taille_marque_a|. \verb|pos| peut être \verb|rt|, \verb|urt|, \verb|top|, etc. ou un angle donné par rapport à la direction $(Ox)$.
+
+\item[nomme(A,O,B,texte)] Même chose que précédemment mais la position est calculée automatiquement en fonction de l'angle.
 \end{description}
 
 
@@ -1464,7 +1534,8 @@
 drawarrow marqueangle(A,C,B);
 fill marqueangle(B,A,C,1) withcolor vert;
 draw marqueangle(B,A,C,1);
-nomme.rt(B,A,C,"\ang{45}");
+nomme[20](B,A,C,"\ang{45}");
+nomme(C,B,A,"$\alpha$");
 fin;
 \end{exemple}
 
@@ -1491,7 +1562,7 @@
 drawoptions(withcolor vertfonce);
 draw vecteur.lrt(B,u);draw vecteur.lrt(C,u);
 fin;
-\end{exemple}%
+\end{exemple}
 
 \section{Divers}
 \subsection{Composition des étiquettes}

Modified: trunk/Master/texmf-dist/metapost/repere/repere.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/repere/repere.mp	2019-06-11 21:01:04 UTC (rev 51362)
+++ trunk/Master/texmf-dist/metapost/repere/repere.mp	2019-06-11 21:01:20 UTC (rev 51363)
@@ -2,7 +2,7 @@
 %%                        repere.mp                           %%
 %%   Macros pour la construction de figures dans un repère    %%
 %%                    o.peault at posteo.net                     %%
-%%              Version 17.11.2 (Novembre 2017)               %%
+%%                 Version 19.06 (Juin 2019)                  %%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
 % This work may be distributed and/or modified under the conditions of
@@ -12,6 +12,10 @@
 %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
+% Mars 2019 : changement spline
+% Juin 2019 : demi-droites, nomme[<angle>]
+% À faire : extratextx, extratexty
+
 input format;
 if not known mplib: input latexmp fi;
 
@@ -965,21 +969,50 @@
   for p_ = t: if pair p_: MarquePoint(p_); fi endfor;
 enddef;
 
+% Juin 2019 : placement fin des étiquettes (angle donné)
+vardef thelabelang@#(expr s,z)=
+     save tmpang,tmpfig,tmppt,tmppath,tmpstr;
+     string tmpstr;
+     numeric tmpang;
+     pair tmppt;
+     path tmppath;
+     save p; picture p;
+     tmpstr := str @#;
+     if picture s:  p=s
+     else:    p = LaTeX(s)
+     fi;
+     tmppath := llcorner p -- lrcorner p -- urcorner p -- ulcorner p -- cycle;
+     if ASCII tmpstr = 91:
+        tmpang := scantokens substring(1,length(tmpstr)-1) of tmpstr
+     else:
+        tmpang := scantokens tmpstr
+     fi;
+     tmppt := tmppath intersectionpoint (0.5urcorner p-- (0.5urcorner p + 100 * (dir (180+tmpang))));
+      p shifted (-tmppt + _cart(z) + labeloffset*(cosd(tmpang),sind(tmpang)) )
+enddef;
 
+def labelang = draw thelabelang enddef;
+
+
 vardef nommepoint@#(text t)=
    save $,ch,dess,latch;
    pair $;
    string ch,latch;
    picture dess;
+   if (ASCII str @# < 58) or (ASCII str @# = 91):
+       def mylabel = labelang enddef
+   else:
+       def mylabel = label enddef
+   fi;
    if long_texte(t)=1:
       dess:=image(draw MarquePointFig(t);
                   ch:=_chaine(t);
-                  label@#("$" & ch & "$",t) withcolor coullabel)
+                  mylabel@#("$" & ch & "$",t) withcolor coullabel)
    else:
       dess:=image(%
       for PP=t:
         if pair PP: MarquePoint(PP); $:=PP
-        else: if string PP: label@#(PP,$) else: label@#(PP scaled defaultscale,$) fi withcolor coullabel
+        else: if string PP: mylabel@#(PP,$) else: mylabel@#(PP scaled defaultscale,$) fi withcolor coullabel
         fi;
       endfor)
    fi;
@@ -987,6 +1020,8 @@
 enddef;
 
 
+
+
 vardef nommecourbe@#(suffix p)(text t)=
    save A,ch,dess;
    pair A;
@@ -1043,7 +1078,7 @@
    elseif prefnomme="left": xpart A < xpart B
    elseif prefnomme="top": ypart A > ypart B
    elseif prefnomme="bottom": ypart A < ypart B
-   elseif hide(errmessage "string 'prefnomme' should be set to left, right, top or bottom")
+   else: hide(errmessage "string 'prefnomme' should be set to left, right, top or bottom")
    fi
 enddef;
 
@@ -1053,6 +1088,7 @@
   pair Pt,P[];
   numeric nbint,pp,T[];
   intercourbestimes(T)(cadre,p);
+  show T[1];
   Pt:=_O;pp:=0;
   if known T[1]:
     Pt:= point T[1] of p;
@@ -1103,22 +1139,39 @@
   nommeautoobjtex(p,"$" & _chaine(p) & "$")
 enddef;
 
+vardef estcadree primary f =
+  show llcorner f; show llcorner cadre transformed _T;
+  show urcorner f; show urcorner cadre;
+      (xpart urcorner f <= xpart urcorner (cadre transformed _T))
+  and (ypart urcorner f <= ypart urcorner (cadre transformed _T))
+  and (xpart llcorner f >= xpart llcorner (cadre transformed _T))
+  and (ypart llcorner f >= ypart llcorner (cadre transformed _T))
+enddef;
+
 % Avec label donné
 vardef nommeautoobjtex(expr p,leg)=
-  save ptA,pos,ttmp;
+  save ptA,pos,ttmp,tmpfig;
   pair ptA;
+  picture tmpfig;
   numeric ttmp;
   string pos;
   ttmp:=pointnommetime(p);
   ptA:= point ttmp of p;
   pos:=position(ptA,ttmp,p);
-  if string leg:
-     scantokens("thelabel." & pos)(leg,ptA)
-  else:
-    scantokens("thelabel." & pos)(leg scaled defaultscale,ptA)
-  fi
+  for i=0 upto 120:
+    tmpfig :=
+        if string leg:
+           scantokens("thelabel." & pos)(leg,ptA)
+        else:
+          scantokens("thelabel." & pos)(leg scaled defaultscale,ptA)
+        fi;
+    exitif estcadree tmpfig;
+    ptA := point (ttmp + ((-1)**(i+1))*round((i+1)/2)*length(p)/60) of p;
+  endfor
+  tmpfig
 enddef;
 
+
 vardef nommeautoobj(text t)=
   if long_texte(t)=1: nommeautoobjsuf(t)
   else: nommeautoobjtex(t)
@@ -1420,6 +1473,7 @@
    pp:=subpath(xpart(pp intersectiontimes q)+0.01,length pp) of pp;
                    %0.01(?!) pour que le point trouvé ne soit pas dans le sous-chemin...
    i:=i+1;
+   exitif i=10;
   endfor;
 enddef;
 
@@ -1620,28 +1674,67 @@
 enddef;
 
 
-% Novembre 2017
+%% Novembre 2017
+%vardef deriveesplinecubique(suffix k)(suffix xs,ys)(expr n)=
+%% renvoie les dérivées pour interpolation avec splines cubiques
+%% source : https://en.wikipedia.org/wiki/Spline_interpolation
+%% xs[] et ys[] sont des listes, n est le nombre de valeurs
+%% Renvoie les dérivées dans la liste k[]
+%  (2k[0] + k[1])/(xs[1] - xs[0]) = 3(ys[1]-ys[0])/((xs[1]-xs[0])**2);
+%  for i=1 upto n-1:
+%    k[i-1]/(xs[i] - xs[i-1]) + 2k[i]/(xs[i] - xs[i-1]) + 2k[i]/(xs[i+1] - xs[i]) + k[i+1]/(xs[i+1] - xs[i]) = 3(ys[i] - ys[i-1])/((xs[i]-xs[i-1])**2) + 3(ys[i+1] - ys[i])/((xs[i+1]-xs[i])**2);
+%  endfor
+%  (k[n-1] + 2k[n])/(xs[n]-xs[n-1]) = 3(ys[n]-ys[n-1])/((xs[n]-xs[n-1])**2);
+%enddef;
+
+%Mars 2019
 vardef deriveesplinecubique(suffix k)(suffix xs,ys)(expr n)=
 % renvoie les dérivées pour interpolation avec splines cubiques
 % source : https://en.wikipedia.org/wiki/Spline_interpolation
 % xs[] et ys[] sont des listes, n est le nombre de valeurs
 % Renvoie les dérivées dans la liste k[]
-  (2k[0] + k[1])/(xs[1] - xs[0]) = 3(ys[1]-ys[0])/((xs[1]-xs[0])**2);
+  if not derex[0]:
+    (2k[0] + k[1])/(xs[1] - xs[0]) = 3(ys[1]-ys[0])/((xs[1]-xs[0])**2)
+  fi;
   for i=1 upto n-1:
-    k[i-1]/(xs[i] - xs[i-1]) + 2k[i]/(xs[i] - xs[i-1]) + 2k[i]/(xs[i+1] - xs[i]) + k[i+1]/(xs[i+1] - xs[i]) = 3(ys[i] - ys[i-1])/((xs[i]-xs[i-1])**2) + 3(ys[i+1] - ys[i])/((xs[i+1]-xs[i])**2);
+     if not derex[i]:
+        k[i-1]/(xs[i] - xs[i-1]) + 2k[i]/(xs[i] - xs[i-1]) + 2k[i]/(xs[i+1] - xs[i]) + k[i+1]/(xs[i+1] - xs[i]) = 3(ys[i] - ys[i-1])/((xs[i]-xs[i-1])**2) + 3(ys[i+1] - ys[i])/((xs[i+1]-xs[i])**2)
+     fi;
   endfor
-  (k[n-1] + 2k[n])/(xs[n]-xs[n-1]) = 3(ys[n]-ys[n-1])/((xs[n]-xs[n-1])**2);
+  if not derex[n]:
+     (k[n-1] + 2k[n])/(xs[n]-xs[n-1]) = 3(ys[n]-ys[n-1])/((xs[n]-xs[n-1])**2)
+  fi;
 enddef;
 
-% Novembre 2017
+%% Novembre 2017
+%vardef splineinterpolfonct_pt(text t)(expr x)=
+%% t est la liste des points A,B,C...
+%  save xa,ya,dd,n;
+%  numeric xa[],ya[],dd[],n;
+%  n:=-1;
+%  for i=t:
+%    n := n + 1;
+%    xa[n] := xpart i; ya[n] := ypart i;
+%  endfor
+%  deriveesplinecubique(dd)(xa,ya)(n);
+%  splinederfonct((xa[0],ya[0],dd[0]) for ii=1 upto n: , (xa[ii],ya[ii],dd[ii]) endfor)(x)
+%enddef;
+
+% Mars 2019
 vardef splineinterpolfonct_pt(text t)(expr x)=
-% t est la liste des points A,B,C...
-  save xa,ya,dd,n;
+% t est la liste A,[y'1,]B,[y'2,]C,[y'3,]... 
+  save xa,ya,dd,n,derex;
   numeric xa[],ya[],dd[],n;
+  boolean derex[];
   n:=-1;
   for i=t:
-    n := n + 1;
-    xa[n] := xpart i; ya[n] := ypart i;
+    if numeric i: 
+       dd[n]:=i;derex[n]:=true;
+    else:
+       n := n + 1;
+       derex[n]:=false;
+       xa[n] := xpart i; ya[n] := ypart i
+    fi;
   endfor
   deriveesplinecubique(dd)(xa,ya)(n);
   splinederfonct((xa[0],ya[0],dd[0]) for ii=1 upto n: , (xa[ii],ya[ii],dd[ii]) endfor)(x)
@@ -1827,6 +1920,31 @@
 enddef;
 
 
+% demi-droites juin 2019
+vardef demidroitept(expr A,B)=
+  A--(_diag/abs(A-B))[A,B]
+enddef;
+
+vardef demidroiteangle(expr A,alpha)=
+  demidroitept(A,A + dir alpha)
+enddef;
+
+vardef demidroite(text t)=
+  save reptmp,repbool;
+  path reptmp;
+  boolean repbool;
+  repbool:=false;
+  for i=t:
+    if numeric i: repbool := true fi;
+  endfor
+  if repbool:
+    reptmp := demidroiteangle(t)
+  else:
+    reptmp := demidroitept(t)
+  fi;
+  reptmp
+enddef;
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%   DEMI-PLANS   %%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -2420,15 +2538,18 @@
 
 vardef nommeangle@#(expr A,O,B,p)=
   save P,a;pair P;path a;
+  save marque_p; string marque_p;
+  marque_p:="";
   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)
+  if str @# = "":
+    nommepoint[angle (P-O)](P,p)
+  else:
+    nommepoint@#(P,p)
   fi
 enddef;
 
 
-
 taille_marque_ad:=0.3cm;
 
 vardef marqueangledroit(expr A,O,B)=



More information about the tex-live-commits mailing list