texlive[60946] Master/texmf-dist: repere (4nov21)

commits+karl at tug.org commits+karl at tug.org
Thu Nov 4 21:40:59 CET 2021


Revision: 60946
          http://tug.org/svn/texlive?view=revision&revision=60946
Author:   karl
Date:     2021-11-04 21:40:58 +0100 (Thu, 04 Nov 2021)
Log Message:
-----------
repere (4nov21)

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	2021-11-04 08:06:20 UTC (rev 60945)
+++ trunk/Master/texmf-dist/doc/metapost/repere/README.md	2021-11-04 20:40:58 UTC (rev 60946)
@@ -1,5 +1,7 @@
-Package repere - Version 19.06 - June 11, 2019
+Package repere - Version 21.11 - November 4, 2021
 
+---
+
 This package provides MetaPost macros for drawing sec­ondary school math­e­mat­ics figures in a coordinate system :
 - axis, grids
 - points, vectors
@@ -6,8 +8,15 @@
 - functions (curves, tangents, integrals, sequences)
 - statistic diagrams
 - plane geometry (polygons, circles)
+- arrays and game boards
 
 The doc is in french...
 
-License LPPL 1.3
+---
 
+Author : Olivier Péault   
+E-mail : o.peault at posteo.net
+
+Licence   : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
+
+

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	2021-11-04 08:06:20 UTC (rev 60945)
+++ trunk/Master/texmf-dist/doc/metapost/repere/repere-doc.tex	2021-11-04 20:40:58 UTC (rev 60946)
@@ -49,10 +49,17 @@
   \usepackage{array}
   \usepackage{tabularx}
   \renewcommand{\tabularxcolumn}[1]{>{\arraybackslash}m{#1}}
+  \newcolumntype{M}[1]{>{\arraybackslash}m{#1}}
+  \usepackage{longtable}
   
   \usepackage{tcolorbox}
   \tcbset{colframe=black,boxsep=0pt,left=3pt,right=3pt,top=0pt,bottom=0pt,boxrule=0.4pt,colback=LightGoldenrod}
   
+
+
+  \usepackage{babel}
+ \frenchbsetup{og=«,fg=»}
+
   \usepackage{listings}
   \lstset{columns=flexible,%
           language=MetaPost,%
@@ -60,12 +67,8 @@
           basicstyle=\ttfamily,
           literate={é}{{\'e}}1}
 
-
-  \usepackage{babel}
   \usepackage[colorlinks=true,urlcolor=blue]{hyperref}
 
-
-
 %%%%%%%%%%%%%%%%%%% moreverb.sty
 \makeatletter
 \newwrite\verbatim at out
@@ -148,7 +151,8 @@
                  \inscode
                \IfFileExists{\jobname.\thenumfig}%
                    {\begin{minipage}[c]{\largeurfig}
-                        \centering \includegraphics{\jobname.\thenumfig}\par
+                        \centering \includegraphics{\jobname-\thenumfig.pdf}\par
+%                        \centering \includegraphics{\jobname.\thenumfig}\par
 %                        \centering a\includegraphics{reperedocfig2.mps}a\par
                     \end{minipage}}{}
                \par}
@@ -173,7 +177,8 @@
                  \whiledo{\value{numfig}<\value{reptmp}}
                  {\refstepcounter{numfig}
                   \IfFileExists{\jobname.\thenumfig}%
-                   {\includegraphics{\jobname.\thenumfig}
+                   {\includegraphics{\jobname-\thenumfig.pdf}
+%                   {\includegraphics{\jobname.\thenumfig}
                     \qquad}{}
                    }
                  \par}
@@ -212,12 +217,13 @@
                    \par\vspace{2ex}}
                    
 \newenvironment{figreperedoc}%
-                  {\refstepcounter{numfig}
+                  {\refstepcounter{numfig}%
                    \verbatimwrite}%
                    {%
                    \endverbatimwrite%
                    \IfFileExists{\jobname.\thenumfig}%
-                      {\includegraphics{\jobname.\thenumfig}}{}
+                      {\includegraphics{\jobname-\thenumfig.pdf}}{}
+%                      {\includegraphics{\jobname.\thenumfig}}{}
                    }
 
 
@@ -960,33 +966,33 @@
 
 \subsubsection*{Interpolation à l'aide de splines cubiques}
 
-\begin{description}
-\item[splineder(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$ et $f'(x_A)=y'_A$ sur l'intervalle définissant le repère.
-\item[splineder(A,y'A,B,y'B,C,y'C...)(xmin,xmax)] Même courbe que précédemment mais sur l'intervalle $[xmin;xmax]$.
-\item[splineder(xA,yA,y'A,xB,yB,y'B,...)()] Même courbe que précédemment (sur l'intervalle définissant le repère) mais les valeurs sont données sous forme de liste. 
-\item[splineder(xA,yA,y'A,xB,yB,y'B,...)(xmin,xmax)] Même courbe que précédemment mais sur l'intervalle $[xmin;xmax]$.
-\end{description}
+%\begin{description}
+%\item[splineder(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$ et $f'(x_A)=y'_A$ sur l'intervalle définissant le repère.
+%\item[splineder(A,y'A,B,y'B,C,y'C...)(xmin,xmax)] Même courbe que précédemment mais sur l'intervalle $[xmin;xmax]$.
+%\item[splineder(xA,yA,y'A,xB,yB,y'B,...)()] Même courbe que précédemment (sur l'intervalle définissant le repère) mais les valeurs sont données sous forme de liste. 
+%\item[splineder(xA,yA,y'A,xB,yB,y'B,...)(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);
+%draw quadrillage(1,1);
+%draw axes(1,1);
+%path H;H=splineder(1,2,0.5,4,8,0,8,2,2)();
+%draw H epaisseur 1 couleur bleu;
+%draw tangente.double(H,1) couleur bleu;
+%draw tangente.double(H,4) couleur bleu;
+%draw tangente.double(H,8) couleur bleu;
+%pair A,B,C; A:=(1,8);B:=(4,4);C:=(7,6);
+%path I;I=splineder(A,-1,B,0.5,C,2)(0,7.5);
+%draw I epaisseur 1 couleur rouge;
+%draw tangente.double(I,1) couleur rouge;
+%draw tangente.double(I,4) couleur rouge;
+%draw tangente.double(I,7) couleur rouge;
+%fin;
+%\end{exemple}
+%
+%
 
-\begin{exemple}[0.55]
-repere.orth(-1,10,7cm,-1,10);
-draw quadrillage(1,1);
-draw axes(1,1);
-path H;H=splineder(1,2,0.5,4,8,0,8,2,2)();
-draw H epaisseur 1 couleur bleu;
-draw tangente.double(H,1) couleur bleu;
-draw tangente.double(H,4) couleur bleu;
-draw tangente.double(H,8) couleur bleu;
-pair A,B,C; A:=(1,8);B:=(4,4);C:=(7,6);
-path I;I=splineder(A,-1,B,0.5,C,2)(0,7.5);
-draw I epaisseur 1 couleur rouge;
-draw tangente.double(I,1) couleur rouge;
-draw tangente.double(I,4) couleur rouge;
-draw tangente.double(I,7) couleur rouge;
-fin;
-\end{exemple}
-
-
-
 \begin{description}
 \item[spline(A,B,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$...  sur l'intervalle définissant le repère.
 \item[spline(A,B,C...)(xmin,xmax)] Même courbe que précédemment mais sur l'intervalle $[xmin;xmax]$.
@@ -1285,7 +1291,8 @@
  draw projboitemoustache.bot(1) dashed evenly;
  drawoptions(withcolor blue);
  draw boitemoustache(0,3.14,6,8,10,2cm,0.7cm);
- draw projboitemoustache.bot(0.0456,"$\pi$","$\num{2x3}$","$x$","Max") dashed evenly;
+ draw projboitemoustache.bot(0.0456,"$\pi$","$\numproduct{2x3}$","$x$","Max")
+                                                                     dashed evenly;
 fin;
 \end{exemplev}
 
@@ -1564,11 +1571,62 @@
 fin;
 \end{exemple}
 
+
+\subsection{Cotes}
+
+\begin{description}
+\item[cote(A,B,texte)] Figure formée du texte orienté dans la direction du segment $[AB]$, placé au niveau du milieu et situé « sous » le segment.
+
+\item[cote.top(A,B,texte)] Même chose mais le texte est placé au-dessus du segment.
+\end{description}
+
+\begin{exemple}
+repere(0,6,1cm,0,6,1cm);
+pair A,B,C;
+A=(1,1);B=(2,5);C=(5,2);
+nomme.llft(A);
+nomme.top(B);
+nomme.lrt(C);
+draw triangle(A,B,C);
+cote(A,C,"\SI{5}{cm}");
+cote(B,C,"de $B$ vers $C$") couleur rouge;
+cote(C,B,"de $C$ vers $B$") couleur bleu;
+cote.top(A,B,"au-dessus");
+fin;
+\end{exemple}
+
+\begin{description}
+\item[cotefleche(A,B,texte)] Figure formée d'une double flèche et du texte orienté dans la direction du segment $[AB]$, placés au niveau du milieu et situés « sous » le segment.
+
+\item[cotefleche.top(A,B,texte)] Même chose mais la double flèche et le texte sont placés au-dessus du segment.
+
+\item[dec\_cote] Variable numérique qui indique le décalage entre le segment et la double flèche. La valeur par défaut est \SI{4}{mm}.
+
+\item[traits\_cote] Variable booléenne qui indique si des traits délimitant la double flèche doivent être tracés. La valeur par défaut est \verb|false|.
+
+\end{description}
+
+\begin{exemple}
+repere(0,6,1cm,0,6,1cm);
+pair A,B,C;
+A=(1,1);B=(2,5);C=(5,2);
+nomme.llft(A);
+nomme.top(B);
+nomme.lrt(C);
+draw triangle(A,B,C);
+cotefleche(A,C,"\SI{5}{cm}");
+cotefleche.top(A,B,"Texte") couleur rouge;
+traits_cote:=true;
+dec_cote:=8mm;
+cotefleche.top(B,C,"Avec traits");
+fin;
+\end{exemple}
+
 \section{Divers}
 \subsection{Composition des étiquettes}
 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{} 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.
+ \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'utilisation 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}
 
 
@@ -1858,9 +1916,441 @@
 fin;
 \end{exemple}
 
+\section{Tableaux et grilles}
+Il est possible d'utiliser \verb|repere| pour représenter des tableaux ou « damiers » et placer des objets dans chacune des cases. La figure devra alors débuter par une commande \verb|tableau| au lieu de la commande \verb|repere| et la numérotation sera automatique.
 
+\subsection{Définition du tableau}
 
+\begin{description}
+\item[tableau(n,m,u)] débute une figure et définit un tableau de $n$ colonnes et $m$ lignes. La largeur des colonnes est égale à la hauteur des lignes et vaut \verb|u|.
+\item[tableau(n,m,ux,uy)] débute une figure et définit un tableau de $n$ colonnes et $m$ lignes. La largeur des colonnes vaut \verb|ux| et la hauteur des lignes vaut \verb|uy|.
+\item[fin] termine la figure.
+\end{description}
+
+\subsection{Grille}
+
+\begin{description}
+\item[grille(x,y)] quadrillage avec un pas de x sur les colonnes et de y sur les lignes.
+\end{description}
+La couleur et l'épaisseur des lignes peuvent être modifiées localement mais on peut aussi les changer globalement : 
+\begin{description}
+\item[coullignes] variable contenant la couleur des lignes de la grille. La valeur par défaut est \verb|black|.
+\item[eplignes] variable contenant l'épaisseur des lignes de la grille. La valeur par défaut est \verb|0.7bp|.
+ \end{description}
+
+
+\begin{exemple}
+tableau(8,8,0.7cm);
+coullignes:=olive;
+draw grille(1,1);
+draw grille(2,2) epaisseur 2;
+fin;
+\end{exemple}
+
+\begin{description}
+\item[damier(x,y)] figure formée de la grille et des cases coloriées alternativement.
+\item[coultableau{[]}] variables qui contiennent les couleurs des cases.
+
+Les valeurs par défaut sont \verb|coultableau[1]=0.45white| et \verb|coultableau[2]:=0.9white|.
+
+\end{description}
+
+\begin{exemple}
+tableau(5,5,1cm);
+  coultableau[1]:=jaune;
+  coultableau[2]:=0.7rouge;
+  draw damier(1,1);
+fin;
+\end{exemple}
+
+\subsection{Grille partielle}
+
+\begin{description}
+\item[lignesh(<suite de 0 et 1>)] Figure qui décrit les lignes horizontales qui doivent être tracées. De gauche à droite et de haut en bas.
+\item[lignesv(<suite de 0 et 1>)] Figure qui décrit les lignes verticales qui doivent être tracées. De gauche à droite et de haut en bas.
+\end{description}
+
+\begin{exemple}
+tableau(3,3,1cm);
+  draw grille(1,1);
+  draw coord;
+  draw lignesh(1,1,1,
+                1,0,1,
+                0,1,0,
+                1,1,1) epaisseur 3;
+  draw lignesv(1,0,0,1,
+                1,1,1,1,
+                1,0,1,1) epaisseur 3;
+fin;
+\end{exemple}
+
+\subsection{Coordonnées}
+
+\begin{description}
+\item[coordx] figure formée des numéros de colonnes placée par défaut en bas.
+\item[coordy] figure formée des numéros de lignes placée par défaut à gauche.
+\item[coord] figure formée des deux figures précédentes.
+\end{description}
+
+\begin{exemple}
+tableau(5,5,1cm);
+  draw grille(1,1);
+  draw coord;
+fin;
+\end{exemple}
+
+\begin{description}
+\item[style\_coord\_x] variable de type \verb|string| qui indique comment doivent être composées les coordonnées des colonnes. La valeur par défaut est \verb|"1"|. Les autres valeurs possibles sont \verb|"a"| (lettres minuscules), \verb|"A"| (lettres majuscules), \verb|"i"| (chiffres romains minuscules) et \verb|"I"| (chiffres romains majuscules).
+\item[style\_coord\_y] même chose pour les lignes.
+\item[deb\_coord\_x] variable de type \verb|numeric| qui indique la première valeur des colonnes. La valeur par défaut est \verb|1|.
+\item[deb\_coord\_y] même chose pour les lignes.
+\item[align\_coord\_y] variable de type \verb|string| qui indique comment doivent être alignés les numéros de lignes. La valeur par défaut est \verb|"c"| (centré). Les valeurs possibles sont \verb|"g"| ou \verb|"l"| (gauche) et \verb|"d"| ou \verb|"r"| (droite).
+\item[place\_coord] variable de type \verb|string| qui indique où les coordonnées doivent être affichées. La valeur par défaut est \verb|"bg"| (en bas à gauche). On peut utiliser une combinaison des lettres \verb|"b"| (en bas), \verb|"h"| (en haut), \verb|"g"| (à gauche) et \verb|"d"| (à droite).
+\item[inverse\_coord\_x] variable de type \verb|boolean| si le sens par défaut dans lequel  les numéros de colonnes doivent être écrits (de gauche à droite) doit être inversé. La valeur par défaut est \verb|false|.
+\item[inverse\_coord\_y]  variable de type \verb|boolean| si le sens par défaut dans lequel  les numéros de lignes doivent être écrits (de bas en haut) doit être inversé. La valeur par défaut est \verb|false|.
+\end{description}
+
+\begin{exemple}
+tableau(5,5,1cm);
+  draw grille(1,1);
+  style_coord_x:="a";
+  style_coord_y:="I";
+  deb_coord_x:=5;
+  deb_coord_y:=3;
+  draw coord;
+fin;
+\end{exemple}
+
+\begin{exemple}
+tableau(5,5,1cm);
+  draw grille(1,1);
+  style_coord_x:="A";
+  style_coord_y:="I";
+  place_coord:="hg";
+  inverse_coord_y:=true;
+  align_coord_y:="r";
+  draw coord;
+fin;
+\end{exemple}
+
+
+\begin{description}
+\item[numerotationdames] description
+\end{description}
+
+\subsection{Placements d'objets dans les cases}
+
+\begin{description}
+\item[case(x,y)] figure formée de la case de coordonnées \verb|(x,y)| remplie et de son contour dessiné avec l'épaisseur et la couleur de la grille.
+\item[cases((x1,y1),(x2,y2),...)] toutes les cases \verb|(x1,y1)|, \verb|(x2,y2)|... sont coloriées.
+\end{description}
+
 \begin{codecache}
+def couleur= withcolor enddef;
+\end{codecache}
+
+\begin{exemple}[0.6]
+tableau(5,5,1cm);
+ draw damier(1,1);
+ draw coord;
+ draw case(2,4) couleur rouge;
+ draw cases((1,2),(3,3),(5,1)) couleur bleu;
+fin;
+\end{exemple}
+
+On peut utiliser une variante de \verb|label| pour placer des objets dans les cases :
+
+\begin{description}
+\item[tablabel(obj,x,y)] Place l'objet \verb|obj| dans la case de coordonnées \verb|(x,y)|. L'objet peut être une chaine de caractère, un chemin ou une figure.
+\item[tablabels(obj)((x1,y1),(x2,y2)...)] Place l'objet \verb|obj| dans toutes les cases indiquées.
+\end{description} 
+
+\begin{exemple}[0.6]
+tableau(8,8,0.6cm);
+  draw grille(1,1);
+  draw coord;
+  tablabel(fullcircle scaled 0.8,5,3);
+  tablabels("X")((3,4),(6,1),(2,2)) couleur vert;
+  for i=5 upto 8:
+    for j=5 upto 8:
+      tablabel(decimal(i*j),i,j) couleur bleu;
+    endfor
+  endfor
+fin;
+\end{exemple}
+
+\begin{exemple}
+tableau(5,5,0.8cm);
+  draw grille(1,1);
+  inverse_coord_x:=true;
+  inverse_coord_y:=true;
+  deb_coord_x:=3;
+  deb_coord_y:=4;
+  draw coord;
+  tablabels("X")((3,4),(6,7),(4,8));
+fin;
+\end{exemple}
+
+\subsection{Quelques dessins}
+
+
+\begin{center}
+\renewcommand{\arraystretch}{1.2}
+\begin{longtable}{|m{5cm}|m{5cm}|>{\noindent\centering \rule{0pt}{0pt}\\ \arraybackslash}m{4cm}|}\hline
+\centering \bfseries Syntaxe & \centering \bfseries Exemples &\multicolumn{1}{c|}{\bfseries Résultat} \\\endhead \hline
+\verb|Pion(v)(coul1,coul2)| & \verb|Pion(1)(noir,0.85blanc)|&%\rule{0pt}{1.8cm}%
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Pion(1)(noir,0.85blanc),1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+ & \verb|Pion(1)(0.9blanc,noir)|&
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Pion(1)(0.9blanc,noir),1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+  & \verb|Pion(2)(noir,0.85blanc)|&
+\begin{figreperedoc}
+tableau(1,1,2cm);
+   tablabel(Pion(2)(noir,0.85blanc),1,1);
+ fin;
+\end{figreperedoc}
+ \\ \hline
+ & \verb|Pion(2)(0.9blanc,noir)|&
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Pion(2)(0.9blanc,noir),1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+\verb|Dame(v)(coul1,coul2)| & \verb|Dame(1)(noir,0.85blanc)|&
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Dame(1)(noir,0.85blanc),1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+ & \verb|Dame(1)(0.9blanc,noir)|&
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Dame(1)(0.9blanc,noir),1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+  & \verb|Dame(2)(noir,0.85blanc)|&
+\begin{figreperedoc}
+tableau(1,1,2cm);
+   tablabel(Dame(2)(noir,0.85blanc),1,1);
+ fin;
+\end{figreperedoc}
+ \\ \hline
+ & \verb|Dame(2)(0.9blanc,noir)|&
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Dame(2)(0.9blanc,noir),1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+\verb|Croix| & &
+\begin{figreperedoc}
+tableau(1,1,1.5cm);
+  tablabel(Croix,1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+\verb|Trou| & &
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Trou,1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+\verb|Marque(v)(coul)| &\verb|Marque(1)((0.9,0.7,0.7))| &
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Marque(1)((0.9,0.7,0.7)),1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+ &\verb|Marque(2)((0.8,0.65,0.5))| &
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Marque(2)((0.8,0.65,0.5)),1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+\verb|Mur(coul1,coul2)| &\verb|Mur(rouge,noir)| &
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Mur(rouge,noir),1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+\verb|Plot(coul1,coul2)| &\verb|Plot(0.7rouge,0.5rouge)| &
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Plot(0.7rouge,0.5rouge),1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+\verb|Caisse(coul1,coul2)| &\verb|Caisse(orange,marron)| &
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Caisse(orange,marron),1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+\verb|Robotdroite(coul1,coul2)| &\verb|Robotdroite(noir,0.6vert)| &
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Robotdroite(noir,0.6vert),1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+\verb|Robotgauche(coul1,coul2)| &\verb|Robotgauche(marine,0.6rouge)| &
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Robotgauche(marine,0.6rouge),1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+\verb|Bateau(numcases,coul)| &\verb|Bateau(1,violet)| &
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Bateau(1,violet),1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+ &\verb|Bateau(2,marron)| &
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Bateau(2,marron),1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+\verb|Eau(coul)| &\verb|Eau(marine)| &
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Eau(marine),1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+\verb|Fleche(coul1,coul2)| &\verb|Fleche(jaune,marine)| &
+\begin{figreperedoc}
+tableau(1,1,2cm);
+  tablabel(Fleche(jaune,marine),1,1);
+fin;
+\end{figreperedoc}
+\\ \hline
+\end{longtable}
+\end{center}
+
+
+\subsection{Exemples}
+
+\subsubsection*{Mots croisés}
+
+\begin{exemple}
+def moth(expr ch,n,m)=
+ for i=1 upto length ch:
+  tablabel(substring(i-1,i) of ch,n+i-1,m);
+ endfor
+enddef;
+
+tableau(8,8,0.8cm);
+ draw grille(1,1);
+ inverse_coord_y:=true;
+ style_coord_y:="I";
+ place_coord:="hg";
+ draw coord;
+ draw cases((3,3),(3,5),(2,7),(6,6),(7,4));
+ moth("OMELETTE",1,2);
+ moth("AMIES",4,3);
+fin;
+
+\end{exemple}
+
+\subsubsection*{Sudokus}
+
+\begin{exemple}
+tableau(9,9,0.8cm);
+ draw grille(1,1);
+ draw grille(3,3) epaisseur 2;
+ tablabels("1",(1,4),(4,8),(6,5),(7,3));
+ tablabels("2",(3,9),(5,6),(6,2));
+ tablabels("3",(1,1),(4,2),(9,6));
+ tablabels("4",(3,8),(8,7));
+ tablabels("5",(2,7),(4,9),(6,6),(7,1));
+ tablabels("6",(2,4),(5,8));
+ tablabels("7",(6,3),(7,2),(8,9),(9,5));
+ tablabels("8",(1,3),(3,7),(5,5),(8,8));
+ tablabels("9",(3,2));
+fin;
+\end{exemple}
+
+\subsubsection*{Dames}
+
+\begin{exemple}
+tableau(10,10,0.8cm);
+ picture pionblanc,pionnoir,dameblanche;
+ picture fleche;
+ pionblanc:=Pion(2)(0.9blanc,noir);
+ pionnoir:=Pion(2)(noir,0.85blanc);
+ dameblanche:=Dame(2)(0.9blanc,noir);
+ coultableau[1]:=0.7marron+0.3blanc;
+ coultableau[2]:=beige;
+ fleche:=Fleche(rouge,noir) rotated 135;
+ draw damier(1,1);
+ draw numerotationdames;
+ tablabels(pionblanc,31,36,39);
+ tablabels(pionnoir,3,7,16,19,23,30);
+ tablabels(dameblanche,15);
+ tablabel(fleche,5.5,5.5);
+fin;
+\end{exemple}
+
+\subsubsection*{Bataille navale}
+
+\begin{exemplev}{1}
+tableau(10,10,0.8cm);
+ draw grille(1,1);
+ inverse_coord_y:=true;
+ style_coord_x:="A";
+ place_coord:="hg";
+ draw coord;
+ tablabel(Bateau(4,marron),5.5,3);
+ tablabel(Bateau(3,0.5vert),7,8);
+ tablabel(Bateau(3,0.5vert) rotated 90,2,9);
+ tablabels(Bateau(1,violet),(4,10),(3,5),(8,1),(9,4));
+ tablabels(Eau(marine),(2,7),(3,7),(4,9),(4,2),(5,2));
+ tablabels(Croix,(5,3),(8,8));
+fin;
+\end{exemplev}
+
+\subsubsection*{Algoréa}
+
+\begin{exemplev}{1}
+tableau(13,5,1cm);
+ coultableau[1]:=(1,0.9,0.7);
+ coultableau[2]:=(1,0.9,0.7);
+ draw damier(1,1);
+ tablabels(Mur(0.8rouge,noir),(1,2),(1,3),(1,4),(13,2),(13,3),(13,4));
+ for i=1 upto 13:
+  tablabels(Mur(0.8rouge,noir),(i,1),(i,5));
+ endfor
+ tablabel(Robotdroite(noir,0.7vert),2,2);
+ for i=4,6,7,10,12:
+  tablabel(Caisse(orange,marron),i,3);
+  tablabel(Marque(2)((0.8,0.65,0.5)),i,4);
+ endfor
+fin;
+\end{exemplev}
+
+
+\begin{codecache}
 end
 \end{codecache}
 
@@ -1870,6 +2360,32 @@
 \end{document}
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 \vspace{2em}
 
 
@@ -1935,8 +2451,6 @@
 
 
 
-
-
 \begin{codecache}
 end
 \end{codecache}

Modified: trunk/Master/texmf-dist/metapost/repere/repere.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/repere/repere.mp	2021-11-04 08:06:20 UTC (rev 60945)
+++ trunk/Master/texmf-dist/metapost/repere/repere.mp	2021-11-04 20:40:58 UTC (rev 60946)
@@ -14,6 +14,8 @@
 
 % Mars 2019 : changement spline
 % Juin 2019 : demi-droites, nomme[<angle>]
+% Mars 2020 : filldraw
+% Octobre 2021 : nommerot, cote
 % À faire : extratextx, extratexty
 
 input format;
@@ -50,6 +52,7 @@
 let olddrawarrow = drawarrow;
 let olddrawdblarrow = drawdblarrow;
 let oldfill = fill;
+let oldfilldraw = filldraw;
 vardef theoldlabel@#(expr s,z) =  % Position s near z
   save p; picture p;
   if picture s:  p=s
@@ -155,9 +158,21 @@
   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
+    elseif path s: p=image(draw s)
+    else:          p = LaTeX(s)
+    fi;
+    p shifted (_cart(z) + labeloffset*laboff@# -
+       (labxf@#*lrcorner p + labyf@#*ulcorner p
+         + (1-labxf@#-labyf@#)*llcorner p
+       )
+    )
+  enddef;
+  vardef thelabelrot@#(expr s,z,an) =  % Position s near z
+    save p; picture p;
+    if picture s:  p=s
     else:    p = LaTeX(s)
     fi;
+    p:=p rotatedaround (center bbox p,an);
     p shifted (_cart(z) + labeloffset*laboff@# -
        (labxf@#*lrcorner p + labyf@#*ulcorner p
          + (1-labxf@#-labyf@#)*llcorner p
@@ -164,6 +179,7 @@
        )
     )
   enddef;
+  def labelrot = draw thelabelrot enddef;
   %% drawarrow
   def drawarrow expr p = _apth:=p transformed _T; _finarr enddef;
   def drawdblarrow expr p = _apth:=p transformed _T; _findarr enddef;
@@ -254,6 +270,7 @@
   if _nbaxes=1: olddraw _axorlab fi;
   if coupe: clip currentpicture to (cadre transformed _T) fi;
   if bf: oldendfig; bf:=false;_nfig:=_nfig+1 fi;
+  rep_tab:=false;   % Ajout octobre 2021
   traces_orig;
 enddef;
 
@@ -987,7 +1004,7 @@
      else:
         tmpang := scantokens tmpstr
      fi;
-     tmppt := tmppath intersectionpoint (0.5urcorner p-- (0.5urcorner p + 100 * (dir (180+tmpang))));
+     tmppt := tmppath intersectionpoint ((0.5urcorner p+0.5llcorner p)-- (0.5urcorner p +0.5llcorner p+ 100 * (dir (180+tmpang))));
       p shifted (-tmppt + _cart(z) + labeloffset*(cosd(tmpang),sind(tmpang)) )
 enddef;
 
@@ -1020,8 +1037,59 @@
 enddef;
 
 
+% Octobre 2021
+vardef thelabelangrot@#(expr s,z,an)=
+     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;
+     p:=p rotatedaround (center tmppath,an);
+     if ASCII tmpstr = 91:
+        tmpang := scantokens substring(1,length(tmpstr)-1) of tmpstr
+     else:
+        tmpang := scantokens tmpstr
+     fi;
+     tmppt := (tmppath rotatedaround (center tmppath,an)) intersectionpoint ((0.5urcorner p+0.5llcorner p)-- (0.5urcorner p +0.5llcorner p + 100 * (dir (180+tmpang))));
+      p shifted (-tmppt + _cart(z) + labeloffset*(cosd(tmpang),sind(tmpang)) )
+enddef;
 
+def labelangrot = draw thelabelangrot enddef;
 
+% Octobre 2021
+vardef nommepointrot@#(text t)(expr an)=
+   save $,ch,dess,latch;
+   pair $;
+   string ch,latch;
+   picture dess;
+   if (ASCII str @# < 58) or (ASCII str @# = 91):
+       def mylabel = labelangrot enddef
+   else:
+       def mylabel = labelrot enddef
+   fi;
+   if long_texte(t)=1:
+      dess:=image(draw MarquePointFig(t);
+                  ch:=_chaine(t);
+                  mylabel@#("$" & ch & "$",t,an) withcolor coullabel)
+   else:
+      dess:=image(%
+      for PP=t:
+        if pair PP: MarquePoint(PP); $:=PP
+        else: if string PP: mylabel@#(PP,$,an) else: mylabel@#(PP scaled defaultscale,$,an) fi withcolor coullabel
+        fi;
+      endfor)
+   fi;
+   dess
+enddef;
+
+def nommerot = draw nommepointrot enddef;
+
 vardef nommecourbe@#(suffix p)(text t)=
    save A,ch,dess;
    pair A;
@@ -1043,10 +1111,6 @@
 enddef;
 
 
-
-
-
-
 vardef nommeobj@#(text t)=
  save $;
  picture $;
@@ -1088,7 +1152,6 @@
   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;
@@ -1140,8 +1203,6 @@
 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))
@@ -1674,18 +1735,6 @@
 enddef;
 
 
-%% 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)=
@@ -1706,19 +1755,6 @@
   fi;
 enddef;
 
-%% 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)=
@@ -1776,8 +1812,6 @@
 
 
 
-
-
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%   TANGENTES   %%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -2739,9 +2773,6 @@
   else: LaTeXsetup; textext(sc) scaled defaultscale
   fi
 enddef;
-%vardef LaTeX primary sc =   
-%   LaTeXsetup; textext(sc) scaled defaultscale
-%enddef;
 
 
 % Mai 2017
@@ -2754,7 +2785,50 @@
 
 def legende = draw thelegende enddef;
 
+% Octobre 2021
+% Cote sans flèche
+vardef thecote@#(expr A, B, texte)=
+  save I; pair I;
+  save an; numeric an;
+  I=0.5[A,B];
+  an=angle(B-A);
+  if str @# ="top":
+     thelabelangrot[an+90](texte,I,an)
+  else:
+     thelabelangrot[an-90](texte,I,an)
+  fi
+enddef;
 
+def cote = draw thecote enddef;
+
+% Octobre 2021
+% Cote avec flèche
+numeric dec_cote;
+dec_cote:=4mm;
+boolean traits_cote;
+traits_cote:=false;
+
+vardef thecotefleche@#(expr a,b,t)=
+  save pp,an;
+  pair pp[];numeric an;
+  an := if str @# ="top": 90 else: -90 fi;
+  pp[1]:=dec_cote*(unitvector(b-a) rotated an) transformed inverse _T;
+  pp[2]:=(dec_cote+1mm)*(unitvector(b-a) rotated an) transformed inverse _T;
+  image(%
+     if traits_cote:
+        draw a--(a shifted pp[2]) dashed evenly;
+        draw b--(b shifted pp[2]) dashed evenly;
+     fi
+     drawdblarrow ((a--b) shifted pp[1]);
+     cote@#(a shifted pp[1],b shifted pp[1],t)
+     )
+enddef;
+
+def cotefleche =
+  draw thecotefleche
+enddef;
+
+
 %%%%%%%%%%%%%%%Figure intermédiaire%%%%%%%%%%%%%%%%%%%
 def figureinter=
   clip currentpicture to (cadre transformed _T);
@@ -2917,3 +2991,642 @@
 moutarde:=conversion_cmyn_rvb(Moutarde);
 vertfonce:=conversion_cmyn_rvb(Vertfonce);
 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%% TABLEAUX ET DAMIERS %%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Octobre 2021
+%
+
+boolean rep_tab;
+rep_tab:=false;
+
+color coultableau[],coullignes;
+numeric eplignes;
+
+
+
+def tableau(text t)=
+  save vv,ind;
+  numeric vv[],ind;
+  ind:=0;
+  for i=t:
+    ind:=ind +1;
+    vv[ind]:=i;
+  endfor
+  vv[4]:=vv[ind];
+  coullignes:=black;
+  eplignes:=0.7;
+  tab_init;
+  deftableau(vv[1],vv[2],vv[3],vv[4]);
+  coultableau[1]:=0.45white;
+  coultableau[2]:=0.9white;
+enddef;
+
+
+def deftableau(expr n,p,u,v)=
+  rep_tab:=true;
+  repere(-1,n+2,u,-1,p+2,v);
+  rep_tab_n:=n;rep_tab_p:=p;
+enddef;
+
+
+vardef grille(expr dx,dy)=
+ save coul;color coul;
+ coul:=coullignes;
+  ep := eplignes;
+ save QuadXmin,QuadXmax,QuadYmin,QuadYmax;
+ numeric QuadXmin,QuadXmax,QuadYmin,QuadYmax;
+ QuadXmin:=0;QuadXmax:=rep_tab_n;QuadYmin:=0;QuadYmax:=rep_tab_p;
+ quadrillage(dx,dy) shifted _cart(0.5,0.5)
+enddef;
+
+vardef damier(expr dx,dy) text t=
+ save coul;color coul;
+ coul:=coullignes;
+  ep := eplignes;
+ save count_tmp,pn;
+ numeric count_tmp,pn;
+ save QuadXmin,QuadXmax,QuadYmin,QuadYmax;
+ numeric QuadXmin,QuadXmax,QuadYmin,QuadYmax;
+ QuadXmin:=0;QuadXmax:=rep_tab_n;QuadYmin:=0;QuadYmax:=rep_tab_p;
+ count_tmp:=2;pn=(((rep_tab_n-1) div dx)+1) mod 2;
+ image(%
+ for j=1 step dy until rep_tab_p:
+   for i=1 step dx until rep_tab_n:
+     count_tmp:=3-count_tmp;
+     fill ((i,j) -- (i+dx,j) -- (i+dx,j+dy) -- (i,j+dy) -- cycle) shifted (-0.5,-0.5) withcolor coultableau[count_tmp];
+   endfor
+   if pn=0: count_tmp:=3-count_tmp fi;
+ endfor
+ draw quadrillage(dx,dy) shifted _cart(0.5,0.5) t
+ )
+enddef;
+
+
+%%%%%%%%% Lignes particulières
+
+vardef segmenth(expr x,y)=
+  ((0,0)--(1,0)) shifted (x-0.5,y+0.5)
+enddef;
+
+vardef segmentv(expr x,y)=
+  ((0,0)--(0,1)) shifted (x+0.5,y-0.5)
+enddef;
+
+vardef ligneh(expr m)(text t)=
+  save ct;
+  numeric ct;
+  ct:=0;
+  image(%
+   for i=t:
+     ct:=ct+1;
+     if i=1:
+       draw segmenth(ct,m)
+     fi;
+   endfor
+  )
+enddef;
+
+vardef lignesh(text t)=
+  save lig,col;
+  numeric lig,col;
+  lig:=rep_tab_p;col:=1;
+  image(%
+  for i=t:
+    if i=1:
+      draw segmenth(col,lig)
+    fi;
+    if col=rep_tab_n:
+      lig:=lig-1;col:=1;
+    else:
+      col:=col+1;
+    fi
+  endfor
+  )
+enddef;
+
+vardef lignesv(text t)=
+  save lig,col;
+  numeric lig,col;
+  lig:=rep_tab_p;col:=0;
+  image(%
+  for i=t:
+    if i=1:
+      draw segmentv(col,lig)
+    fi;
+    if col=rep_tab_n:
+      col:=0;lig:=lig-1;
+    else:
+      col:=col+1;
+    fi
+  endfor
+  )
+enddef;
+
+
+
+
+% largeur d'une figure
+vardef largeur_fig(expr pic)=
+  abs(lrcorner pic - llcorner pic)
+enddef;
+
+
+% Coordonnées des cases du tableau %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% coordonnées dans le tableau
+vardef _tab(expr x,y)=
+  save px,py;
+  numeric px,py;
+  px := if inverse_coord_x: rep_tab_n + deb_coord_x - x else: x - deb_coord_x + 1 fi;
+  py := if inverse_coord_y: rep_tab_p + deb_coord_y - y else: y - deb_coord_y + 1 fi;
+  (px,py)
+enddef;
+
+
+def tab_init=        %initialisation variables
+  % Style : "1", "i", "I", "a", "A"
+  string style_coord_x,style_coord_y;
+  style_coord_x:="1";
+  style_coord_y:="1";
+
+  % Première valeur
+  numeric deb_coord_x,deb_coord_y;
+  deb_coord_x:=1;
+  deb_coord_y:=1;
+
+  % Alignement
+  string align_coord_x,align_coord_y;
+  align_coord_x:="c";align_coord_y:="c";
+
+  % Placement des coordonnées
+  string place_coord;
+  numeric place_coord_x,place_coord_y;
+  place_coord:="bl";
+  place_coord_x:=0;
+  place_coord_y:=0;
+
+  % Inversion coordonnées
+  boolean inverse_coord_x,inverse_coord_y;
+  inverse_coord_x:=false;
+  inverse_coord_y:=false;
+enddef;
+
+
+vardef compoetiquette(expr n,t)=
+  if t=1:     "$\num{" & decimal(n) & "}$"
+  elseif t=2: "\strut\romannumeral" & decimal(n) 
+  elseif t=3: "\MakeUppercase{\romannumeral" & decimal(n) & "}"
+  elseif t=4: "\strut " & char(n+96)
+  else:       char(n+64)
+  fi
+enddef;
+
+vardef coordx=
+  save stdeb,stfin,tt,aa;
+  string stdeb,stfin;
+  numeric tt,aa;
+  if (substring (0,1) of place_coord = "h") or (substring (0,1) of place_coord = "t") or (substring (1,2) of place_coord = "h") or  (substring (1,2) of place_coord = "t"):
+     place_coord_x:=1
+  else:
+     place_coord_x:=0
+  fi;
+  if style_coord_x="1":
+     tt:=1
+  elseif style_coord_x="i":
+     tt:=2
+  elseif style_coord_x="I":
+     tt:=3
+  elseif style_coord_x="a":
+     tt:=4
+  elseif style_coord_x="A":
+     tt:=5
+  fi;
+  image(%
+          for i=1 upto rep_tab_n:
+            aa:= if inverse_coord_x: rep_tab_n+1-i else: i fi;
+            if place_coord_x=0:
+              label.bot(LaTeX(compoetiquette(i-1+deb_coord_x,tt)),(aa,0.5));
+            else:
+              label.top(LaTeX(compoetiquette(i-1+deb_coord_x,tt)),(aa,rep_tab_n+0.5));
+            fi
+          endfor
+          )
+enddef;
+
+
+vardef coordy=
+  save stdeb,stfin,tt,ll,cc;
+  string stdeb,stfin;
+  numeric tt,ll,cc;
+  if align_coord_y="g": align_coord_y:="l" fi;
+  if align_coord_y="d": align_coord_y:="r" fi;
+  ll:=0;
+  if (substring (0,1) of place_coord = "d") or (substring (0,1) of place_coord = "r") or (substring (1,2) of place_coord = "d") or  (substring (1,2) of place_coord = "r"):
+     place_coord_y:=1
+  else:
+     place_coord_y:=0
+  fi;
+  if style_coord_y="1":
+     tt:=1
+  elseif style_coord_y="i":
+     tt:=2
+  elseif style_coord_y="I":
+     tt:=3
+  elseif style_coord_y="a":
+     tt:=4
+  elseif style_coord_y="A":
+     tt:=5
+  fi;
+  for i=1 upto rep_tab_p:
+       ll:=max(ll,largeur_fig(LaTeX(compoetiquette(i-1+deb_coord_y,tt))));
+  endfor
+  image(%
+          for i=1 upto rep_tab_p:
+            cc:= if inverse_coord_y: rep_tab_p+1-i else: i fi;
+            if place_coord_y=0:
+              label.lft(LaTeX("\makebox[" & decimal(ll/cm) & "cm][" & align_coord_y &"]{" &  compoetiquette(i-1+deb_coord_y,tt) & "}"),(0.5,cc));
+            else:
+              label.rt(LaTeX("\makebox[" & decimal(ll/cm) & "cm][" & align_coord_y &"]{" &  compoetiquette(i-1+deb_coord_y,tt) & "}"),(rep_tab_p+0.5,cc));
+            fi
+          endfor
+          )
+enddef;
+
+vardef coord=
+  image(%
+   draw coordy;
+   draw coordx;)
+enddef;
+
+
+%%%%%%%%% Numérotation dames
+
+vardef numerotationdames=
+ save ct;
+ numeric ct;
+ ct:=0;
+ image(
+  for j= rep_tab_p downto 1:
+    for i=1 upto rep_tab_n:
+     if (i+j) mod 2 = 0:
+       ct:=ct+1;
+       label("\bfseries" & decimal(ct),(i,j));
+     fi
+    endfor
+  endfor
+  )
+enddef;
+
+%%% Remplissage de cases %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+vardef contour_case(expr n,m)=
+  ((0,0)--(1,0)--(1,1)--(0,1)--cycle) shifted (_tab(n,m)-(0.5,0.5))
+enddef;
+
+vardef case(expr n,m) text t=
+  image(%
+    fill contour_case(n,m) t;
+    draw (contour_case(n,m)) withpen pencircle scaled eplignes withcolor coullignes
+    )
+enddef;
+
+vardef cases(text pts) text t=
+  image(%
+   for i= pts:
+     draw case(xpart i,ypart i) t;
+   endfor
+  )
+enddef;
+
+%%% Placement d'un objet dans une case
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+vardef thetablabel(expr s,n,m)=  % place l'objet s dans la case (n,m)
+  save p; picture p;
+  if picture s:  p=s
+  elseif path s: p=image(draw s)
+  else:          p = LaTeX(s)
+  fi;
+  thelabel(p,_tab(n,m))
+enddef;
+
+def tablabel = draw thetablabel enddef;
+
+vardef tablabels(expr s)(text t) text cc=
+  save li, co;
+  numeric li,co;
+  for i=t:
+    if pair i:
+      tablabel(s,xpart i,ypart i) cc;
+    else:
+      if rep_tab_p mod 2 = 1:
+        li := rep_tab_p - ((2i-2) div rep_tab_n);
+        if rep_tab_n mod 2 =0:
+          co:=(2i-1 - (li mod 2)) mod rep_tab_n + 1;
+        else:
+          co:=(2i-2) mod rep_tab_n + 1;
+        fi
+      else:
+        li := rep_tab_p - ((2i-1) div rep_tab_n);
+        if rep_tab_n mod 2 =0:
+          co:=(2i-1 - (li mod 2)) mod rep_tab_n + 1;
+        else:
+          co:=(2i-1) mod rep_tab_n + 1;
+        fi
+      fi
+      tablabel(s,co,li);
+    fi
+  endfor
+enddef;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%  DESSINS %%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% pions - 2 versions pioni et pionii
+vardef Pioni(expr coulint,coulext)=
+  image(%
+         fill cercle((0,0),0.4) couleur coulint;
+         draw cercle((0,0),0.4) epaisseur (0.5*Ux/cm) couleur coulext;
+         draw cercle((0,0),0.25) epaisseur (0.5*Ux/cm) couleur coulext;
+         draw (-0.05,0)--(0.05,0) epaisseur (0.5*Ux/cm) couleur coulext;
+         draw (0,0.05)--(0,-0.05) epaisseur (0.5*Ux/cm) couleur coulext
+  )
+enddef;
+
+
+%vardef Pionnoiri = Pioni(noir,0.85blanc) enddef;
+%vardef Pionblanci = Pioni(0.9blanc,noir) enddef;
+
+
+vardef Pionii(expr coulint,coulext)=
+  image(%
+    fill (cercle((0,0),0.4) yscaled 0.5) couleur coulint;
+    draw (arccercle((-0.4,0),(0,0),(0.4,0)) yscaled 0.5) epaisseur (0.5*Ux/cm) couleur coulext;
+    fill (cercle((0,0),0.4) yscaled 0.5 shifted (0,0.1)) couleur coulint;
+    draw (cercle((0,0),0.4) yscaled 0.5 shifted (0,0.1)) epaisseur (0.5*Ux/cm) couleur coulext;
+    draw (-0.4,0)--(-0.4,0.1) epaisseur (0.5*Ux/cm) couleur coulext;
+    draw (0.4,0)--(0.4,0.1) epaisseur (0.5*Ux/cm) couleur coulext;
+  )
+enddef;
+
+% dame - 2 versions damei et dameii
+vardef Damei(expr coulint,coulext)=
+  image(%
+         fill cercle((0,0),0.4) couleur coulint;
+         draw cercle((0,0),0.4) epaisseur (0.5*Ux/cm) couleur coulext;
+         fill cercle((0,0),0.08) couleur coulext;
+         draw (-0.15,0)--(0.15,0) epaisseur (0.9*Ux/cm) couleur coulext;
+         draw (0,0.15)--(0,-0.15) epaisseur (0.9*Ux/cm) couleur coulext;
+         draw (-0.1,0.1)--(0.1,-0.1) epaisseur (0.3*Ux/cm) couleur coulext;
+         draw (0.1,0.1)--(-0.1,-0.1) epaisseur (0.3*Ux/cm) couleur coulext
+  )
+enddef;
+
+%vardef Damenoirei = Dame(noir,0.85blanc) enddef;
+%vardef Dameblanchei = Dame(0.9blanc,noir) enddef;
+
+vardef Dameii(expr coulint,coulext)=
+  image(%
+    fill (cercle((0,0),0.4) yscaled 0.5) couleur coulint;
+    draw (arccercle((-0.4,0),(0,0),(0.4,0)) yscaled 0.5) epaisseur (0.5*Ux/cm) couleur coulext;
+    fill (cercle((0,0),0.4) yscaled 0.5 shifted (0,0.1)) couleur coulint;
+    draw (arccercle((-0.4,0),(0,0),(0.4,0)) yscaled 0.5 shifted (0,0.1)) epaisseur (0.5*Ux/cm) couleur coulext;
+    fill (cercle((0,0),0.4) yscaled 0.5 shifted (0,0.2)) couleur coulint;
+    draw (cercle((0,0),0.4) yscaled 0.5 shifted (0,0.2)) epaisseur (0.5*Ux/cm) couleur coulext;
+    draw (-0.4,0)--(-0.4,0.2) epaisseur (0.5*Ux/cm) couleur coulext;
+    draw (0.4,0)--(0.4,0.2) epaisseur (0.5*Ux/cm) couleur coulext;
+  )
+enddef;
+
+
+def Pion(expr v)=
+  if v=1:
+     Pioni
+  else:
+    Pionii
+  fi
+enddef;
+
+def Dame(expr v)=
+  if v=1:
+     Damei
+  else:
+    Dameii
+  fi
+enddef;
+
+% Croix
+vardef Croix=
+  interim linecap:=butt;
+  image(%
+  draw (0,0)--(1,1) epaisseur (1.2*Ux/cm);
+  draw (0,1)--(1,0) epaisseur (1.2*Ux/cm)
+  )
+enddef;
+
+% Trou
+vardef Trou=
+  image(%
+   fill fullcircle scaled 0.8)
+enddef;
+
+% Marques - 2 versions
+vardef Marquei(expr coul)=
+  save tmp;
+  save a,b,c,d;
+  pair a,b,c,d;
+  picture tmp;
+  tmp:=image(
+    fill fullcircle scaled 0.8 yscaled 0.4 shifted (0,-0.2) couleur coul);
+  a=llcorner tmp;b= lrcorner tmp; c=urcorner tmp; d=ulcorner tmp;
+  setbounds tmp to (a--b--(2.2c-1.2b)--(2.2d-1.2a)--cycle);
+  tmp
+enddef;
+
+vardef Marqueii(expr coul)=
+  image(%
+    fill((0.1,0.1)--(0.9,0.1)--(0.9,0.9)--(0.1,0.9)--cycle) couleur coul;
+  )
+enddef;
+
+def Marque(expr v)=
+  if v=1:
+    Marquei
+  else:
+    Marqueii
+  fi
+enddef;
+
+% Mur
+vardef Mur (expr coulint,coulext)=
+  image(%
+  fill ((0,0)--(1,0)--(1,1)--(0,1)--cycle) couleur coulint;
+  draw ((0,0)--(0.3,0)--(0.3,0.7)--(0,0.7)--cycle) epaisseur (Ux/cm) couleur coulext;
+  draw ((0.3,0)--(1,0)--(1,0.3)--(0.3,0.3)--cycle) epaisseur (Ux/cm) couleur coulext;
+  draw ((1,0.3)--(1,1)--(0.7,1)--(0.7,0.3)--cycle) epaisseur (Ux/cm) couleur coulext;
+  draw ((0.7,1)--(0,1)--(0,0.7)--(0.7,0.7)--cycle) epaisseur (Ux/cm) couleur coulext;
+  )
+enddef;
+
+% Plot
+vardef Plot(expr couli,coulii)=
+  image(%
+   fill cercle((0,0),0.4) yscaled 0.4 couleur coulii;
+   fill cercle((0,0),0.3) yscaled 0.4 couleur couli;
+   fill (-0.3,0)--(-0.05,0.6)--(0.05,0.6)--(0.3,0)--cycle couleur couli;
+   fill cercle((0,0),0.05) yscaled 0.4 shifted (0,0.6) couleur coulii;
+  )
+enddef;
+
+% Caisse
+vardef Caisse(expr coulint,coulext)=
+  save a,b;
+  pair a,b,c,d;
+  a=(0.1,0.1);b=(0.9,0.1);
+  c=(0.9,0.9);d=(0.1,0.9);
+  image(%
+  fill (a--b--c--d--cycle) couleur coulint;
+  for i=1 upto 7:
+    draw (a--b) shifted (0,0.1*i) epaisseur (0.7*Ux/cm) couleur coulext;
+  endfor
+  show Ux/cm;
+  draw a--b--c--d--cycle epaisseur (1.5*Ux/cm) couleur coulext;
+  draw a--c epaisseur (1.5*Ux/cm) couleur coulext;
+  draw b--d epaisseur (1.5*Ux/cm) couleur coulext;
+  )
+enddef;
+
+
+
+% Robot
+vardef Rob_chaine=
+  (1.5,1)..(1.7,0.7)..(2.4,0.4)..(4.4,0.3)..(6.4,0.3)..(7,0.5)..(7,1.2)..(6.2,2.2)..(5.3,3)..(3.9,3.5)..(3.1,3.6)..(2.3,3.2)..(1.7,2.3)..cycle
+enddef;
+
+
+vardef Rob_corps=
+  (6.28,7.33)..(7.23,6.67)..(7.5,6.36)..(7.6,5)..(7.5,3.53)..(7.35,3.23)..(7,3)..(6.43,2.82)..(5.95,2.74)..(2,3.27)..(1.64,3.98)..(1.46,5.11)..(1.46,6.41)..(1.99,7.34)..cycle
+enddef;
+
+vardef Rob_tete=
+  fullcircle xscaled 5.9 yscaled 3.8 shifted (4.1,8.8)
+enddef;
+
+vardef Rob_haut=
+  fullcircle xscaled 5.5 yscaled 1.6 shifted (4.1,10.4)
+enddef;
+
+vardef Rob_bras=
+ (3,5.5)..(3.4,5)..(3.8,4.5)..(4.2,4.1)..(5,4)..(6,4)..(6.3,4.8)..(5.9,5.4)..(4.9,5.2)..(4.9,5.7)..(4.6,6.2)..(4.1,6.5)..(3.5,6.3)..(3,5.9)..cycle
+enddef;
+
+vardef Rob_oeild=
+  fullcircle scaled 0.9 shifted (5.1,8.7)
+enddef;
+
+vardef Rob_oeilg=
+  fullcircle xscaled 0.6 yscaled 0.85 shifted (6.67,9.1)
+enddef;
+
+vardef Rob_bouche=
+  (5.9,7.8)..(6.2,7.8)..(6.4,7.9)
+enddef;
+
+vardef Robotdroite(expr couli,coulii)=
+  save tmp;
+  picture tmp;
+  tmp:=image(%
+        fill Rob_chaine shifted (2,2) withcolor couli;
+        draw Rob_chaine shifted (2,2) withcolor 0.7couli+0.3white epaisseur (8*Ux/cm);
+        fill Rob_corps withcolor coulii;
+        fill Rob_tete withcolor couli;
+        fill buildcycle(Rob_tete,Rob_haut) withcolor coulii;
+        fill Rob_oeild withcolor coulii;
+        fill Rob_oeilg withcolor coulii;
+        draw Rob_bouche withcolor coulii epaisseur (5*Ux/cm);
+        fill Rob_bras withcolor 0.7couli+0.3white;
+        fill Rob_chaine withcolor couli;
+        draw Rob_chaine withcolor 0.7couli+0.3white epaisseur (8*Ux/cm)) scaled 0.085;
+  tmp
+enddef;
+
+vardef Robotgauche(expr couli,coulii)=
+   Robotdroite(couli,coulii) xscaled -1
+enddef;
+
+
+% Bateau
+vardef Bat_coque=
+  (-0.8,0.4)--(-0.55,0.1)--(0.8,0.1)--(0.7,0.25)--(0.1,0.25)--(-0.1,0.4)--cycle
+enddef;
+
+vardef Bat_cabine=
+  (-0.6,0.4)--(-0.5,0.55)--(0.2,0.55)--(0.3,0.4)--(0.5,0.4)--(0.6,0.25)--(0.1,0.25)--(-0.1,0.4)--cycle
+enddef;
+
+vardef Bat_barre=
+  (-0.54,0.475)--(-0.15,0.475)
+enddef;
+
+vardef Bat_cheminee=
+  (0,0)--(0,0.1)--(0.15,0.1)--(0.15,0)--cycle
+enddef;
+
+
+vardef Bateau(expr num, coul)=
+  save e,fx,fy;
+  numeric e,fx,fy;
+  fx := if     num=2: 1
+        elseif num=1: 0.5
+        elseif num=3: 1.6
+        elseif num=4: 2.3
+        else: 1
+        fi;
+  fy := if     num=2: 1
+        elseif num=1: 0.7
+        elseif num=3: 1.2
+        elseif num=4: 1.3
+        else: 1
+        fi;
+  e:=(0.7*fx-0.15*num)/(num+1);
+  image(%
+   fill Bat_coque xscaled fx yscaled fy couleur (0.75*blanc+0.25*coul) ;
+   fill Bat_cabine xscaled fx yscaled fy couleur blanc;
+   for i=0 upto num-1:
+     fill Bat_cheminee shifted ((-0.5,0.55) xscaled fx yscaled fy) shifted (e+i*(e+0.15),0)  couleur (0.75*blanc+0.25*coul);
+     draw Bat_cheminee shifted ((-0.5,0.55) xscaled fx yscaled fy) shifted (e+i*(e+0.15),0)  epaisseur (0.7*Ux/cm) couleur coul;
+   endfor
+   draw Bat_coque xscaled fx yscaled fy epaisseur (0.7*Ux/cm) couleur coul;
+   draw Bat_cabine xscaled fx yscaled fy epaisseur (0.7*Ux/cm) couleur coul;
+   draw Bat_barre xscaled fx yscaled fy epaisseur (1.2*Ux/cm) couleur coul;
+  )
+enddef;
+
+% Eau
+vardef Eau(expr coul)=
+  save vague;
+  path vague;
+  vague :=(-0.3,0)..(-0.15,0.05){right}..(0,0)..(0.15,-0.05){right}..(0.3,0);
+  image(%
+   draw vague epaisseur (Ux/cm) couleur coul;
+   draw vague shifted (0,0.15) epaisseur (Ux/cm) couleur coul;
+   )
+enddef;
+
+% Flèche
+vardef Fleche(expr coulint,coulext)=
+  save tmp;
+  path tmp;
+  tmp:= ((0.45,0)--(0.45,3)--(1,3)--(0,4)--(-1,3)--(-0.45,3)--(-0.45,0)--cycle) scaled 0.2;
+  image(fill tmp couleur coulint;
+        draw tmp couleur coulext)
+enddef;
+



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