texlive[65506] Master/texmf-dist: repere (10jan23)

commits+karl at tug.org commits+karl at tug.org
Tue Jan 10 22:14:13 CET 2023


Revision: 65506
          http://tug.org/svn/texlive?view=revision&revision=65506
Author:   karl
Date:     2023-01-10 22:14:12 +0100 (Tue, 10 Jan 2023)
Log Message:
-----------
repere (10jan23)

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-01-10 21:13:14 UTC (rev 65505)
+++ trunk/Master/texmf-dist/doc/metapost/repere/README.md	2023-01-10 21:14:12 UTC (rev 65506)
@@ -1,4 +1,4 @@
-Package repere - Version 22.07 - July 8, 2022
+Package repere - Version 23.01 - January 1, 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-01-10 21:13:14 UTC (rev 65505)
+++ trunk/Master/texmf-dist/doc/metapost/repere/repere-doc.tex	2023-01-10 21:14:12 UTC (rev 65506)
@@ -1,29 +1,25 @@
 \documentclass[11pt,a4paper,french]{article}
-% Needs geometriesyr16.mp
-%http://melusine.eu.org/syracuse/poulecl/geometriesyr16/distrib/geometriesyr16-050408.tgz
 
+% Code with metapost output thanks to YannD at texnique.fr
+% https://texnique.fr/osqa/questions/11076/comment-obtenir-le-code-metapost-et-la-figure-dans-un-document-avec-luamplib
+
 % To compile:
-% pdflatex repere-doc.tex
-% mptopdf repere-doc.mp
-% mptopdf repere-doc.mp
-% pdflatex repere-doc.tex
+% lualatex repere-doc.tex
 
-  \usepackage{calc,ifthen}
-
-  \usepackage[utf8]{inputenc}
-  \usepackage[T1]{fontenc}
-  \usepackage{lmodern}
-  \usepackage{textcomp}
   \usepackage{mathtools}
+\usepackage{unicode-math}
+\setmainfont{STIX Two Text}
+\setmathfont{STIX Two Math}
 
-  \usepackage{geometry}
-  \geometry{twoside,hmargin=2cm,vmargin={1.5cm,1.8cm},includefoot}
-  
+\usepackage{geometry}
+\geometry{twoside,hmargin=2cm,vmargin={1.5cm,1.8cm},includefoot}
+
   \usepackage[bottom]{footmisc}
 
   \usepackage{mflogo}
   
   \usepackage[output-decimal-marker={,}]{siunitx}
+  \usepackage{esvect}
 
   \usepackage{multicol}
   \setlength{\multicolsep}{3pt}
@@ -37,10 +33,6 @@
   \usepackage[svgnames]{xcolor}
 
   \usepackage{graphicx}
-  \usepackage{ifpdf}
-    \ifpdf
-      \DeclareGraphicsRule{*}{mps}{*}{}
-    \fi
 
   \usepackage{url}
   \usepackage{verbatim}
@@ -47,189 +39,181 @@
   \usepackage{fancyvrb}
   
   \usepackage{array}
+  \usepackage{colortbl}
   \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{tabularray}
 
+\usepackage{luamplib}
+\everymplib{verbatimtex \leavevmode etex;
+%            input geometriesyr16;
+            input repere;}
+\mplibnumbersystem{decimal}
+            
+\usepackage{tcolorbox}
+\tcbuselibrary{listings,skins}
 
   \usepackage{babel}
  \frenchbsetup{og=«,fg=»}
 
-  \usepackage{listings}
+
+\usepackage[colorlinks=true,urlcolor=blue]{hyperref}
+
+\usepackage{listings}
+
   \lstset{columns=flexible,%
-          language=MetaPost,%
-          showstringspaces=false,%
-          basicstyle=\ttfamily,
-          literate={é}{{\'e}}1}
+          basicstyle=\color{darkgray}\ttfamily,
+          literate={é}{{\'e}}1,
+          keywordstyle=\color{black}\bfseries}
 
-  \usepackage[colorlinks=true,urlcolor=blue]{hyperref}
+\lstdefinestyle{mpost}{language={MetaPost},
+                       morekeywords={repere,fin,couleur,epaisseur,avec}
+                       }
 
-%%%%%%%%%%%%%%%%%%% moreverb.sty
 \makeatletter
-\newwrite\verbatim at out
-  \immediate\openout \verbatim at out \jobname.mp
-\newwrite\temp at code
-\def\verbatimwrite{%
-  \@bsphack
-  \immediate\openout \temp at code figtmp.mp
-  \let\do\@makeother\dospecials
-  \catcode`\^^M\active \catcode`\^^I=12
-  \def\verbatim at processline{%
-    \immediate\write\verbatim at out
-      {\the\verbatim at line}%
-    \immediate\write\temp at code
-          {\the\verbatim at line}
-     }%
-  \verbatim at start}
-
-\def\endverbatimwrite{%
-  \immediate\closeout\temp at code
-  \@esphack
-  }%
+\tcbset{%
+    listing metapost/.code={%
+        \def\tcbuselistingtext at input{\begin{mplibcode} input \jobname.listing; \end{mplibcode}}%
+    }
+}
 \makeatother
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-\newlength{\largeurcode}
-\newlength{\largeurfig}
-\newcounter{numfig}
-\setcounter{numfig}{0}
+%\definecolor{CoulParam}{rgb}{0.281,0.275,0.485}
+\definecolor{CoulParam}{rgb}{0.4,0,0.5}
 
-\newcommand{\codedeuxcol}{%
-                  \begin{tcolorbox}
-                     \begin{minipage}[c]{\largeurcode}
-                       \begin{multicols}{2}
-                         \lstinputlisting{figtmp.mp}
-                       \end{multicols}
-                     \end{minipage}
-                   \end{tcolorbox}
-                     \par\noindent
-                    }
-                    
-                    
-\newcommand{\codehoriz}{%
-                   \begin{minipage}[c]{\largeurcode}
-                        \lstinputlisting[frame=single,frameround=tttt,backgroundcolor=\color{LightGoldenrod}]{figtmp.mp}
-                    \end{minipage}
-                    \hfill
-                 }
+\definecolor{TestC}{rgb}{0.963,0.971,0.994}
+\colorlet{FondCommandes}{black!60!yellow!10!white}
 
-\newcommand{\codevert}{%
-                   {\centering
-                   \begin{minipage}[c]{\largeurcode}
-                        \lstinputlisting[frame=single,frameround=tttt,backgroundcolor=\color{LightGoldenrod}]{figtmp.mp}
-                    \end{minipage}
-                    \par\noindent}
-                 }
+\tcbset{boites/.style={left=1em,right=1em,
+                       colback=white,
+                       boxrule=0pt,
+                       colframe=white,
+                       fonttitle=\bfseries\ttfamily,
+                       colbacktitle=FondCommandes,
+                       before title={\hspace{-1em}},
+                       arc=0pt,
+                       after=\medskip,
+                      }}
 
-\newenvironment{codefigure}[3]%
-               {%
-               \refstepcounter{numfig}
-               \setlength{\largeurcode}{#2\linewidth}
-               \ifnum#1=0
-                  \setlength{\largeurfig}{\linewidth-\largeurcode-2\fboxsep-2\fboxrule}
-                  \def\inscode{\codehoriz}
-               \else
-                  \setlength{\largeurfig}{\linewidth}
-                  \def\inscode{\codevert}
-                  \ifnum#3=1
-                   \relax
-                  \else
-                    \def\inscode{\codedeuxcol}
-                  \fi
-               \fi
-               \verbatimwrite
-               }%
-               {%
-               \endverbatimwrite
-               \par
-               \noindent
-                 \inscode
-               \IfFileExists{\jobname.\thenumfig}%
-                   {\begin{minipage}[c]{\largeurfig}
-                        \centering \includegraphics{\jobname-\thenumfig.pdf}\par
-%                        \centering \includegraphics{\jobname.\thenumfig}\par
-%                        \centering a\includegraphics{reperedocfig2.mps}a\par
-                    \end{minipage}}{}
-               \par}
+\DeclareTColorBox{rpobjet}{ v m }{
+           boites,
+           title={#1},
+           coltitle=blue,
+           colbacktitle=blue!5!white,
+           after title={\hfill #2},
+           }
 
+\DeclareTColorBox{rpdeclaration}{ v }{
+           boites,
+           title={#1},
+           coltitle=black,
+           colbacktitle=black!5!white,
+           }
 
-\newenvironment{codecache}%
-            {\verbatimwrite}{\endverbatimwrite}
-            
-\newcounter{reptmp}
+\DeclareTColorBox{rplabel}{ v }{
+           boites,
+           title={#1},
+           coltitle=red,
+           colbacktitle=red!50!black!5!white,
+           }
 
-\newenvironment{codefigureinter}[2][1]%
-                  {%
-                    \setcounter{reptmp}{\value{numfig}+#2}
-                    \setlength{\largeurcode}{#1\linewidth}
-                    \def\inscode{\codevert}
-                    \verbatimwrite
-                  }%
-                 {\endverbatimwrite
-                  \par
-                  \noindent
-                  \inscode
-                 \whiledo{\value{numfig}<\value{reptmp}}
-                 {\refstepcounter{numfig}
-                  \IfFileExists{\jobname.\thenumfig}%
-                   {\includegraphics{\jobname-\thenumfig.pdf}
-%                   {\includegraphics{\jobname.\thenumfig}
-                    \qquad}{}
-                   }
-                 \par}
-            
+\DefTblrTemplate{contfoot-text}{default}{}
+\DefTblrTemplate{conthead-text}{default}{}
+\DefTblrTemplate{caption-tag}{default}{}
+\DefTblrTemplate{caption-sep}{default}{}
+\DefTblrTemplate{caption-text}{default}{}
+\NewDocumentEnvironment{rpparam}{ +b}
+             {\par\medskip\begin{center}
+             \begin{longtblr}[label=none,caption={}]{
+             rowhead=2,
+             verb,
+             hlines={2pt,white},
+             columns={c},
+             row{1}=white,
+             row{2-Z}={bg=CoulParam!5!white,m},
+             column{4}={wd=8cm,fg=black,j},
+             cell{3-Z}{1-3}={cmd=\testparam},
+             cell{3-Z}{1}={cmd=\bfseries\testparam}
+             }
+             \SetCell[c=4]{c} Paramètres \\
+             Nom & Type & Défaut &  \\
+             #1
+             \end{longtblr}
+             \end{center}\bigskip}
+             {}
 
-\newcounter{repexemple}
-\setcounter{repexemple}{0}
 
-\newcommand{\debutexemple}{\par\vspace{2ex}
-                   \refstepcounter{repexemple}
-                   \noindent {\bfseries \color{blue!20!black} 
-                   Exemple \arabic{repexemple}}
-                   \par\nopagebreak\vspace{1ex}
-                   }
 
+\tcbset{mot/.style={colback=FondCommandes,
+        verbatim,
+        arc=0pt,
+        outer arc=0pt,
+        top=0pt,bottom=0pt,left=0mm,right=0mm,
+        boxrule=0pt}}
 
-\newenvironment{exemple}[1][0.5]%
-                   {\debutexemple
-                   \codefigure{0}{#1}{1}
-                   }%
-                   {\endcodefigure
-                   \par\vspace{2ex}}
+\DeclareTotalTCBox{\rpdec}{v}{mot,coltext=black}{#1}
+\DeclareTotalTCBox{\rpfig}{v}{mot,coltext=blue}{#1}
+\DeclareTotalTCBox{\rplab}{v}{mot,coltext=red}{#1}
+\DeclareTotalTCBox{\rppar}{v}{mot,coltext=CoulParam}{#1}
 
-\newenvironment{exemplev}[2][1]%
-                   {\debutexemple
-                   \codefigure{1}{#1}{#2}
-                   }%
-                   {\endcodefigure
-                   \par\vspace{2ex}}
-                   
-\newenvironment{exemplefiginter}[2][1]%
-                   {\debutexemple
-                   \codefigureinter[#1]{#2}
-                   }%
-                   {\endcodefigureinter
-                   \par\vspace{2ex}}
-                   
-\newenvironment{figreperedoc}%
-                  {\refstepcounter{numfig}%
-                   \verbatimwrite}%
-                   {%
-                   \endverbatimwrite%
-                   \IfFileExists{\jobname.\thenumfig}%
-                      {\includegraphics{\jobname-\thenumfig.pdf}}{}
-%                      {\includegraphics{\jobname.\thenumfig}}{}
-                   }
+\NewDocumentCommand{\testparam}{v}{\textcolor{CoulParam}{\texttt{#1}}}
+\NewDocumentCommand{\desstab}{v}{\textbf{\texttt{#1}}}
 
+\NewDocumentCommand{\decfig}{m}{\raisebox{-.45\height}{#1}}
 
+
+
+\DeclareTCBListing[auto counter]{exemple}{ !O{} }{
+    enhanced,
+    title=Exemple \thetcbcounter,
+    coltitle=black,
+    fonttitle=\bfseries,
+    attach boxed title to top left,
+    boxed title style={left=0pt,
+                       boxrule=0pt,
+                       colframe=white,
+                       colback=white,
+                       coltext=black},
+    colback=red!25!yellow!10!white,
+    left=1mm,top=0mm,bottom=0mm,
+    halign lower=center,
+    listing metapost,
+    listing outside text,
+%    listing only,
+    sidebyside gap=1mm,
+    after skip=2em,
+    listing options={style=mpost
+                    },
+    #1}
+
+\DeclareTCBListing{codelatex}{ !O{} }{
+    enhanced,
+    notitle,
+    colback=LightSteelBlue,
+    left=2mm,top=0mm,bottom=0mm,
+    listing only,
+    listing options={language={[LaTeX]TeX}
+                    },
+    #1}
+
+\DeclareTCBListing{codempost}{ !O{} }{
+    enhanced,
+    notitle,
+    colback=LightGoldenrod,
+    left=2mm,top=0mm,bottom=0mm,
+    listing only,
+    listing options={style=mpost
+                    },
+    #1}
+
+
+
 \newcommand{\vect}[1]{\overrightarrow{#1\rule{0.1em}{0ex}}}
 
 \begin{document}
+\DecimalMathComma
 \title{Documentation de \texttt{repere.mp}}
 \date{\today}
 \author{Olivier \textsc{Péault}%
@@ -239,113 +223,58 @@
 \setcounter{tocdepth}{2}
 
 \setlength{\columnsep}{25pt}
-\tableofcontents
+{\small
+\tableofcontents}
 \setlength{\columnsep}{10pt}
 
-
-
-
-\begin{codecache}
-%outputtemplate := "%j-%c.mps";
-input geometriesyr16;
-input repere;
-\end{codecache}
-
 \part{Repères et géométrie}
 \section{Utilisation du fichier}
 
 \subsection{Généralités}
-Les macros du fichier \verb+repere.mp+ ont pour but de simplifier la création de figures dans un repère du plan avec \MP{}. L'idée de départ est de coller le plus possible aux besoins de l'enseignement secondaire français de mathématiques.
+Les macros du fichier \verb+repere.mp+ ont pour but de simplifier la création de figures dans un repère du plan avec \MP{} notamment :
+\begin{itemize}
+\item Figures dans un repère, représentations graphiques de fonctions ;
+\item Figures usuelles de géométrie plane ;
+\item En complément, possibilité de tracer des grilles et tableaux..
+\end{itemize}
 
-Il est possible d'utiliser \verb+repere+ et \verb+geometriesyr+ (les macros de Christophe \textsc{Poulain} pour la géométrie disponibles à l'adresse \url{http://melusine.eu.org/syracuse/poulecl/macros/}) dans une même figure comme le montre l'exemple page \pageref{exgeom}.
+L'objectif principal est de répondre aux besoins de l'enseignement secondaire français de mathématiques.
 
-Le fichier \verb+repere.mp+ doit être placé dans un répertoire accessible à \MP{} (Par ex. le répertoire \verb+metapost+ du \verb+texmf+). De plus, la ligne \verb+input repere;+ doit apparaître dans le document contenant les figures.
 
+\subsection{Documentation}
 
-Les étiquettes (noms de points, de courbes, de vecteurs...) sont composées automatiquement au format \LaTeX{} avec le package \verb+latexmp.mp+. Il est donc nécessaire de compiler deux fois les documents. Cette double compilation n'est pas nécessaire si on utilise Lua\LaTeX{} avec le package \verb|luamplib|.
+Les commandes et macros proposées sont de plusieurs types :
+\begin{itemize}
+\item Des \rpdec{déclarations}, qui définissent la figure, modifient certaines variables ou paramètres.
+\item Des \rpfig{objets}, au sens de \MP{} qui peuvent être des points (pair), des chemins (path), des figures (picture)...
+\item Des \rplab{« labels »} qui fonctionnent sur le même principe que la commande \verb|label| de \MP{} et affichent une étiquette qui peut être définie séparément.
+\item Des \rppar{paramètres} qui peuvent être modifiés pour changer l'apparence de la figure.
+\end{itemize}
 
-\subsection{Figures dans un document avec \LaTeX}
-Chacun des documents peut être compilé avec la commande \verb|mpost| puis inclus dans un document à l'aide de la commande \verb|\includegraphics| du package \verb|graphicx|.
+Les objets qui sont des « figures complètes » (dessins et étiquettes) ont des noms qui commencent par une majuscule.
+%Il est possible d'utiliser \verb+repere+ et \verb+geometriesyr+ (les macros de Christophe \textsc{Poulain} pour la géométrie disponibles à l'adresse \url{http://melusine.eu.org/syracuse/poulecl/macros/}) dans une même figure comme le montre l'exemple page \pageref{exgeom}.
 
-Certains packages permettent d'écrire du code \MP{} directement dans un document \LaTeX. \verb|repere| est compatible avec, entre autres, \verb|emp| et \verb|mpgraphics|.
+%Le fichier \verb+repere.mp+ doit être placé dans un répertoire accessible à \MP{} (Par ex. le répertoire \verb+metapost+ du \verb+texmf+). De plus, la ligne \verb+input repere;+ doit apparaître dans le document contenant les figures.
+%
 
+%Les étiquettes (noms de points, de courbes, de vecteurs...) sont composées automatiquement au format \LaTeX{} avec le package \verb+latexmp.mp+. Il est donc nécessaire de compiler deux fois les documents. Cette double compilation n'est pas nécessaire si on utilise Lua\LaTeX{} avec le package \verb|luamplib|.
 
-%\subsection{Code embarqué dans un document \LaTeX}
-%
-%
-%\medskip
-%
-%\begin{minipage}[t]{0.45\linewidth}
-%{\centering \textbf{Utilisation du package \texttt{emp}}\par}
-%
-%
-%
-%\verb|pdflatex monfichier.tex|
-%
-%\verb|mpost monfichier.mp|
-%
-%\verb|mpost monfichier.mp|
-%
-%\verb|pdflatex monfichier.tex|
-%
-%
-%\begin{lstlisting}[frame=single,frameround=tttt,backgroundcolor=\color{LightSteelBlue},language={[LaTeX]TeX}]
-%\documentclass{article}
-%\usepackage{emp}
-%\usepackage{ifpdf}
-% \ifpdf % Pour utiliser pdflatex
-%  \DeclareGraphicsRule{*}{mps}{*}{}
-% \fi
-%\begin{document}
-%\begin{empfile}
-%\begin{empcmds}
-% input repere;
-%\end{empcmds}
-%\begin{emp}(0,0)
-%  repere(-3,3,1cm,-2,2,1cm);
-%   draw axes(1,1);
-%  fin;
-%\end{emp}
-%\end{empfile}
-%\end{document}
-%\end{lstlisting}
-%\end{minipage}
-%\hfill
-%\begin{minipage}[t]{0.45\linewidth}
-%{\centering \textbf{Utilisation du package \texttt{mpgraphics}}\par}
-%
-%
-%\verb|pdflatex -shell-escape monfichier.tex|
-%
-%\begin{lstlisting}[frame=single,frameround=tttt,backgroundcolor=\color{LightSteelBlue},language={[LaTeX]TeX}]
-%\documentclass{article}
-%\usepackage[runs=2]{mpgraphics}
-%\begin{document}
-%\begin{mpdefs}
-% input repere;
-%\end{mpdefs}
-%\begin{mpdisplay}
-%  repere(-3,3,1cm,-2,2,1cm);
-%   draw axes(1,1);
-%  fin;
-%\end{mpdisplay}
-%\end{document}
-%\end{lstlisting}
-%\end{minipage}
 
 
-\subsection{Figures dans un document avec Lua\LaTeX}
+\subsection{Utilisation de \texttt{repere}}
 
-Il est aussi possible d'utiliser Lua\LaTeX{} avec le package \verb|luamplib|. Il faut alors charger les packages \verb|siunitx| et \verb|esvect| utilisés par \verb|repere|.
 
+L'utilisation de Lua\LaTeX{} avec le package \verb|luamplib| est la manière la plus simple d'utiliser \verb|repere|. Il suffit juste de charger les packages \verb|siunitx| et \verb|esvect| utilisés par \verb|repere|.
+
 \medskip
-\begin{minipage}[t]{0.45\linewidth}
+\noindent
+\begin{minipage}[t]{0.49\linewidth}
 {\centering \textbf{Figure isolée}\par}
 
 
 \verb|lualatex mafigure.tex|
 
-\begin{lstlisting}[frame=single,frameround=tttt,backgroundcolor=\color{LightSteelBlue},language={[LaTeX]TeX}]
+\begin{codelatex}
 \documentclass{standalone}
 \usepackage{fontspec}
 \usepackage{siunitx,esvect}
@@ -354,135 +283,177 @@
 \everymplib{input repere;}
 \begin{document}
 \begin{mplibcode}
-  repere(-3,3,1cm,-2,2,1cm);
-  draw axes(1,1);
-fin;
+  repere();
+    draw axes(1,1);
+  fin;
 \end{mplibcode}
 \end{document}
-\end{lstlisting}
+\end{codelatex}
 \end{minipage}
 \hfill
-\begin{minipage}[t]{0.45\linewidth}
+\begin{minipage}[t]{0.49\linewidth}
 {\centering \textbf{Code embarqué}\par}
 
 
 \verb|lualatex monfichier.tex|
 
-\begin{lstlisting}[frame=single,frameround=tttt,backgroundcolor=\color{LightSteelBlue},language={[LaTeX]TeX}]
+\begin{codelatex}
 \documentclass{article}
 \usepackage{fontspec}
 \usepackage{siunitx,esvect}
 \usepackage{luamplib}
 \mplibnumbersystem{decimal} %Si besoin
-\everymplib{verbatimtex \leavevmode etex;
-            input repere;}
+\everymplib{verbatimtex
+                \leavevmode
+              etex;
+              input repere;}
 \begin{document}
 Mon texte, mon texte, mon texte
 
 \begin{mplibcode}
-  repere(-3,3,1cm,-2,2,1cm);
-  draw axes(1,1);
-fin;
+  repere();
+    draw axes(1,1);
+  fin;
 \end{mplibcode}
 
 Mon texte, mon texte, mon texte
 \end{document}
-\end{lstlisting}
+\end{codelatex}
 \end{minipage}
 
+\bigskip
+
+Il est aussi possible d'utiliser une compilation \verb|mpost| « traditionnelle ». Voir section \ref{compilmpost}.
+
+
 \section{Repère utilisateur}
 
-\subsection{Numérotation des figures}
-Chaque figure devra débuter par une instruction \verb|repere()| et se terminer par \verb|fin| (voir ci-dessous). Si ces instructions se trouvent en dehors d'un environnement \verb|beginfig()|-\verb|endfig| la numérotation est automatique :
+\subsection{Définition du repère}
 
-\bigskip
-\begin{minipage}[c]{0.3\linewidth}
-\begin{lstlisting}[frame=single,frameround=tttt,backgroundcolor=\color{LightGoldenrod}]
-beginfig(2);
-repere(...);
-<instructions de dessin>
-fin;
-endfig;
-\end{lstlisting}
-\end{minipage}
-\hfill
-\begin{minipage}[c]{0.6\linewidth}
-La figure porte le numéro 2
-\end{minipage}
+\begin{rpdeclaration}{repere(<Xmin>,<Xmax>,<Ux>,<Ymin>,<Ymax>,<Uy>,<theta>)}
+Débute une figure et définit le repère utilisateur : axe des abscisses de \verb+Xmin+ à \verb+Xmax+, unité \verb+Ux+, axe des ordonnées de \verb+Xmin+ à \verb+Ymax+, unité \verb+Uy+ et \verb+theta+ est l'angle en degrés entre les axes.
+Le paramètre \verb+theta+ est optionnel. Il est égal à 90 par défaut.
+\end{rpdeclaration}
 
-\bigskip
-\begin{minipage}[c]{0.3\linewidth}
-\begin{lstlisting}[frame=single,frameround=tttt,backgroundcolor=\color{LightGoldenrod}]
-repere(...);
-<instructions de dessin>
-fin;
-\end{lstlisting}
-\end{minipage}
-\hfill
-\begin{minipage}[c]{0.6\linewidth}
-La numérotation est automatique. La figure porte le numéro qui suit la figure précédemment dessinée. S'il s'agit de la première, elle porte le numéro 1.
-\end{minipage}
+\begin{rpdeclaration}{repere.larg(<Xmin>,<Xmax>,<Lx>,<Ymin>,<Ymax>,<Ly>,<theta>)}
+Définit un repère tel que la largeur totale de la figure produite soit \verb+Lx+ et sa hauteur \verb+Ly+.
+\end{rpdeclaration}
 
+\begin{rpdeclaration}{repere.orth(<Xmin>,<Xmax>,<Lx>,<Ymin>,<Ymax>)}
+Définit un repère orthonormé de largeur totale \verb+Lx+.
+\end{rpdeclaration}
 
+\begin{rpdeclaration}{repere()   repere.larg()   repere.orth()}
+Définit un repère en utilisant les valeurs des paramètres \verb+Xmin+, \verb|Xmax|...
+\end{rpdeclaration}
 
-\subsection{Définition du repère}
-\begin{description}
-\item[repere(xmin,xmax,ux,ymin,ymax,uy,theta)] débute une figure et définit le repère utilisateur : axe des abscisses de \verb+xmin+ à \verb+xmax+, unité \verb+ux+, axe des ordonnées de \verb+ymin+ à \verb+ymax+, unité \verb+uy+ et \verb+theta+ est l'angle en degrés entre les axes. Le paramètre \verb+theta+ est optionnel. Il est égal à 90 par défaut.
+\begin{rpdeclaration}{fin}
+Termine la figure et la découpe pour ne garder que la partie limitée par le repère utilisateur.
+\end{rpdeclaration}
 
-\item[repere.larg(xmin,xmax,Lx,ymin,ymax,Ly,theta)] définit un repère tel que la largeur totale de la figure produite soit \verb+Lx+ et sa hauteur \verb+Ly+.
 
-\item[repere.orth(xmin,xmax,Lx,ymin,ymax)] définit un repère orthonormé de largeur totale \verb+Lx+.
 
-\item[interaxes(x,y)] définit les coordonnées du point d'intersection des axes. Par défaut ces coordonnées sont $(0,0)$.
+\begin{rpparam}
+Ux & numeric & 1cm & Unité sur l'axe des abscisses \\
+Uy & numeric & 1cm & Unité sur l'axe des ordonnées \\
+Uxy & numeric &  & Si positif, unité sur les deux axes \\
+Xmin & numeric & -10 & Valeur minimale sur l'axe des abscisses \\
+Xmax & numeric & 10 & Valeur maximale sur l'axe des abscisses \\
+Ymin & numeric & -10 & Valeur minimale sur l'axe des ordonnées \\
+Ymax & numeric & 10 & Valeur maximale sur l'axe des ordonnées \\
+theta & numeric & 90 & Angle entre les axes du repère
+\end{rpparam}
 
-\item[cadre] chemin fermé qui fait le tour du repère.
 
-\item[fin] termine la figure et la découpe pour ne garder que la partie limitée par le repère utilisateur.
-\end{description}
+\begin{rpobjet}{cadre}{path}
+Chemin fermé qui fait le tour du repère.
+\end{rpobjet}
 
 
+\begin{exemple}
+repere(-3,3,1cm,-2,2,1cm);
+ draw (-3,-2)--(3,0)--(0,2)--cycle;
+ draw cadre;
+fin;
+\end{exemple}
 
 
+\begin{exemple}
+Uxy:=0.5cm;
+Xmin:=-6;Xmax:=6;
+Ymin:=-4;Ymax:=4;
+repere();
+ draw (-6,-4)--(6,0)--(0,4)--cycle;
+ draw cadre;
+fin;
+\end{exemple}
+
+\begin{exemple}
+repere(-3,3,1cm,-2,2,1cm,60);
+ draw (-3,-2)--(3,0)--(0,2)--cycle;
+ draw cadre;
+fin;
+\end{exemple}
+
+
+
 \subsection{Axes}
 
 \subsubsection{Généralités}
-\begin{description}
-\item[axex.pos(grad,val)] axe des abscisses gradué avec un pas de \verb+grad+ et étiqueté avec un pas de \verb+val+.
+\begin{rpobjet}{axex.<pos>(<pas_grad>,<pas_val>)}{picture}
+Axe des abscisses gradué avec un pas de \verb+pas_grad+ et étiqueté avec un pas de \verb+pas_val+.
 
-Si \verb+grad+ est négatif ou nul, l'axe n'est pas gradué et si \verb+val+ est négatif ou nul, l'axe n'est pas étiqueté.
+Si \verb+pas_grad+ est négatif ou nul, l'axe n'est pas gradué et si \verb+pas_val+ est négatif ou nul, l'axe n'est pas étiqueté.
 
 \verb+pos+ est un paramètre optionnel qui désigne la position (au sens de \MP : \verb+rt+, \verb+urt+, \verb+top+, \verb+ulft+, \verb+lft+, \verb+llft+, \verb+bot+ ou \verb+lrt+) des étiquettes. \verb+pos+ peut être omis, la valeur par défaut est \verb+bot+.
 
 Les étiquettes qui ne sont pas entièrement à l'intérieur du cadre ne sont pas dessinées.
+\end{rpobjet}
 
-\item[axey.pos(grad,val)] axe des ordonnées. La valeur par défaut de \verb+pos+ est \verb+lft+.
-\end{description}
 
+\begin{rpobjet}{axey.<pos>(<pas_grad>,<pas_val>)}{picture}
+Axe des ordonnées. La valeur par défaut de \verb+pos+ est \verb+lft+.
+\end{rpobjet}
 
-Au niveau de l'intersection des axes, les étiquettes sont tracées à la position \verb+pos+ si l'abscisse est différente de l'ordonnée ou si un seul axe est tracé. Dans le cas contraire, une seule étiquette est tracée pour les deux axes à une position \og intermédiaire \fg{} (pour \verb+axex.bot+ et \verb+axey.lft+, on obtient la position \verb+llft+)
+\begin{exemple}
+repere(-3,3,1cm,-1,1,1cm);
+ draw axex(1,1);
+fin;
+\end{exemple}
 
-\begin{description}
-\item[axes.pos(grad,val)] figure formée par les deux axes gradués avec le même pas \verb+grad+ et étiquetés avec le même pas \verb+val+. \verb+pos+ désigne la position de l'étiquette de l'intersection des axes, sa valeur par défaut est \verb|llft|. La position des étiquettes des axes est définie à partir de \verb+pos+ (pour \verb+urt+ on obtient \verb+top+ pour l'axe des abscisses et \verb+rt+ pour l'axe des ordonnées.
-
-\end{description}
-
-
-
 \begin{exemple}
 repere(-3,3,1cm,-1,1,1cm);
-draw axex(1,1);
+ draw axex.top(1,1);
 fin;
 \end{exemple}
 
 \begin{exemple}
 repere(-3,3,1cm,-1,1,1cm);
-draw axex.top(1,1);
+ draw axex(1,0);
 fin;
 \end{exemple}
 
+
+
+
+Au niveau de l'intersection des axes, les étiquettes sont tracées à la position \verb+pos+ si l'abscisse est différente de l'ordonnée ou si un seul axe est tracé. Dans le cas contraire, une seule étiquette est tracée pour les deux axes à une position \og intermédiaire \fg{} (pour \verb+axex.bot+ et \verb+axey.lft+, on obtient la position \verb+llft+)
+
 \begin{exemple}
-repere(-3,3,0.8cm,-2.5,2.5,1cm);
-draw axes(1,1) withcolor pourpre;
+repere(-3,3,1cm,-3,3,0.5cm);
+ draw axex(1,1);
+ draw axey(1,2);
+fin
+\end{exemple}
+
+\begin{rpobjet}{axes.<pos>(<pas_grad>,<pas_val>)}{picture}
+Figure formée par les deux axes gradués avec le même pas \verb+pas_grad+ et étiquetés avec le même pas \verb+pas_val+. \verb+pos+ désigne la position de l'étiquette de l'intersection des axes, sa valeur par défaut est \verb|llft|. La position des étiquettes des axes est définie à partir de \verb+pos+ (pour \verb+urt+ on obtient \verb+top+ pour l'axe des abscisses et \verb+rt+ pour l'axe des ordonnées.
+\end{rpobjet}
+
+
+
+\begin{exemple}
+repere(-3,3,0.8cm,-2.5,2.5,0.8cm);
+draw axes(1,1);
 draw cadre;
 fin;
 \end{exemple}
@@ -494,42 +465,69 @@
 fin;
 \end{exemple}
 
+
+\begin{rpobjet}{axexo.<pos>(<pas_grad>,<pas_val>)}{picture}
+Axe des abscisses. L'étiquette correspondant à l'intersection des axes est dessinée à la position \verb|pos|.
+\end{rpobjet}
+
+\begin{rpobjet}{axeyo.<pos>(<pas_grad>,<pas_val>)}{picture}
+Axe des ordonnées. L'étiquette correspondant à l'intersection des axes est dessinée à la position \verb|pos|.
+\end{rpobjet}
+
+\begin{rpobjet}{axeso.<pos>(<pas_grad>,<pas_val>)}{picture}
+Les deux axes. Les étiquettes correspondant à l'intersection des axes sont dessinées en fonction de la position \verb|pos|.
+\end{rpobjet}
+
+\begin{rpobjet}{axexn.<pos>(<pas_grad>,<pas_val>)}{picture}
+Axe des abscisses. L'étiquette correspondant à l'intersection des axes n'est pas dessinée.
+\end{rpobjet}
+
+\begin{rpobjet}{axeyn.<pos>(<pas_grad>,<pas_val>)}{picture}
+Axe des ordonnées. L'étiquette correspondant à l'intersection des axes n'est pas dessinée.
+\end{rpobjet}
+
+\begin{rpobjet}{axesn.<pos>(<pas_grad>,<pas_val>)}{picture}
+Les deux axes. Les étiquettes correspondant à l'intersection des axes ne sont pas dessinées.
+\end{rpobjet}
+
 \begin{exemple}
-repere.orth(-3,3,5cm,-2.5,2.5);
-draw axex.top(0.5,1) withcolor bleu;
-draw axey(1,1) withcolor bleu;
+repere.larg(-3,3,6cm,-3,4,3.5cm,60);
+ draw axexn(1,2);
+ draw axeyn(1,1);
+ draw cadre;
 fin;
 \end{exemple}
 
 
-
-
 \subsubsection{Réglages des axes}
 
-Les axes sont dessinés, gradués et étiquetés par défaut sur toute la longueur du repère utilisateur. Pour des valeurs différentes on peut utiliser les macros suivantes :
+%Les axes sont dessinés, gradués et étiquetés par défaut sur toute la longueur du repère utilisateur. Pour des valeurs différentes on peut utiliser les macros suivantes :
 
+\begin{rpdeclaration}{interaxes(<x>,<y>)}
+Définit les coordonnées du point d'intersection des axes. Par défaut ces coordonnées sont $(0,0)$.
+\end{rpdeclaration}
 
-\begin{description}
-\item[setaxes(xmin,xmax,ymin,ymax)] définit les valeurs minimales et maximales pour les axes.
 
-\item[setgrad(xmin,xmax,ymin,ymax)] définit les valeurs minimales et maximales pour les graduations.
+\begin{rpdeclaration}{setaxes(<xmin>,<xmax>,<ymin>,<ymax>)}
+Définit les valeurs minimales et maximales pour les axes.
+\end{rpdeclaration}
 
-\item[setval(xmin,xmax,ymin,ymax)] définit les valeurs minimales et maximales pour l'étiquetage.
 
-\item[flecheaxe] booléen égal à \verb|true| par défaut qui permet de dessiner, ou non, des flèches au bout des axes.
+\begin{rpdeclaration}{setgrad(<xmin>,<xmax>,<ymin>,<ymax>)}
+Définit les valeurs minimales et maximales pour les graduations.
+\end{rpdeclaration}
 
- \item[axexo.pos(grad,val), axeyo.pos(grad,val), axeso.pos(grad,val)] macros identiques aux précédentes sauf pour l'étiquette correspondant à l'intersection des axes qui est toujours dessinée.
- 
- \item[axexn.pos(grad,val), axeyn.pos(grad,val), axesn.pos(grad,val)] macros identiques aux précédentes sauf pour l'étiquette correspondant à l'intersection des axes qui n'est jamais dessinée.
-\end{description}
+\begin{rpdeclaration}{setval(<xmin>,<xmax>,<ymin>,<ymax>)}
+Définit les valeurs minimales et maximales pour l'étiquetage.
+\end{rpdeclaration}
 
 \begin{exemple}
 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);
+ interaxes(120,3000);
+ setaxes(120,160,3000,7000);
+ setgrad(120,160,3000,7000);
+ draw axex(10,10);
+ draw axey(1000,1000);
 fin;
 \end{exemple}
 
@@ -537,74 +535,115 @@
 
 \begin{exemple}
 repere(-0.5,3,0.8cm,-0.5,2.5,1cm);
-setaxes(0,3,0,2.5);
-draw axeso(1,1);
+ setaxes(0,3,0,2.5);
+ draw axeso(1,1);
 fin;
 \end{exemple}
 
+
+\begin{rpparam}
+flecheaxe & boolean & true & Trace les flèches (ou non) au bout des axes \\
+defaultscale & numeric & 1 & Échelle à laquelle sont dessinées les étiquettes
+\end{rpparam}
+
 \begin{exemple}
-repere.larg(-3,3,6cm,-3,4,3.5cm,60);
-draw axexn(1,2) withcolor rouge;
-draw axeyn(1,1) withcolor olive;
-draw cadre;
+repere(-0.5,3,1cm,-0.5,2.5,1cm);
+ flecheaxe:=false;
+ draw axes(1,1);
 fin;
 \end{exemple}
 
+\begin{exemple}
+repere(-0.75,3,1cm,-0.75,2.5,1cm);
+ defaultscale:=1.5;
+ draw axes(1,1);
+fin;
+\end{exemple}
+
 \subsubsection{Graduations multiples de $\pi$}
 
-\begin{description}
-\item[axexpi.pos(n,d)] axe des abscisses gradué et étiqueté avec un pas de $\frac{n\pi}{d}$. Les fractions sont composées en mode normal. Pour les obtenir en mode \og displaystyle \fg, la variable de type booléen \verb+displayfrac+ doit être égale à \verb+true+.
+\begin{rpobjet}{axexpi.<pos>(<n>,<d>)}{picture}
+Axe des abscisses gradué et étiqueté avec un pas de $\frac{n\pi}{d}$.
+\end{rpobjet}
 
-\item[axeypi.pos(n,d)] axe des ordonnées gradué et étiqueté avec un pas de $\frac{n\pi}{d}$.
+\begin{rpobjet}{axexpi.<pos>(<n>,<d>)}{picture}
+Axe des ordonnées gradué et étiqueté avec un pas de $\frac{n\pi}{d}$.
+\end{rpobjet}
 
-\item[axespi.pos(n,d)] les deux axes gradués et étiquetés avec un pas de $\frac{n\pi}{d}$.
+\begin{rpobjet}{axespi.<pos>(<n>,<d>)}{picture}
+Les deux axes gradués et étiquetés avec un pas de $\frac{n\pi}{d}$.
+\end{rpobjet}
 
-\item[axexpio.pos(n,d), axeypio.pos(n,d), axespio.pos(n,d)] même chose que précédemment sauf pour l'étiquette correspondant à l'intersection des axes qui est toujours dessinée.
 
-\item[axexpin.pos(n,d), axeypin.pos(n,d), axespin.pos(n,d)] même chose que précédemment sauf pour l'étiquette correspondant à l'intersection des axes qui n'est jamais dessinée.
-\end{description}
-
-
 \begin{exemple}
-repere(-2.5,2.5,1.3cm,-3.5,3.5,0.8cm);
-draw axexpi(1,6) withcolor grisfonce;
-draw axeypi(1,4) withcolor grisfonce;
-draw cadre;
+repere(-2.5,2.5,1.5cm,-3.5,3.5,0.8cm);
+ defaultscale:=0.8;
+ draw axexpi(1,6);
+ draw axeypi(1,4);
+ draw cadre;
 fin;
 \end{exemple}
 
+\begin{rpobjet}{axexpio.<pos>(<n>,<d>)  axeypio.<pos>(<n>,<d>)  axespio.<pos>(<n>,<d>)}{picture}
+Axes  gradués et étiquetés avec un pas de $\frac{n\pi}{d}$ sans l'étiquette correspondant à l'intersection des axes.
+\end{rpobjet}
+
+\begin{rpobjet}{axexpin.<pos>(<n>,<d>)  axeypin.<pos>(<n>,<d>)  axespin.<pos>(<n>,<d>)}{picture}
+Axes  gradués et étiquetés avec un pas de $\frac{n\pi}{d}$ avec l'étiquette correspondant à l'intersection dessinées sur chacun des axes.
+\end{rpobjet}
+
+\begin{rpparam}
+displayfrac & boolean & false & Permet d'obtenir les fractions en mode \og displaystyle \fg
+\end{rpparam}
+
+
 \subsubsection{Graduations isolées}
 
-\begin{description}
-\item[axexpart.pos(x1,lab1,x2,lab2,...)] graduation et étiquetage partiels de l'axe des abscisses pour les valeurs \verb+x1+, \verb+x2+... et les étiquettes \verb+lab1+, \verb+lab2+... à la position \verb+pos+. Si \verb+pos+ est omis, les étiquettes sont placées à la position \verb+bot+. Les étiquettes peuvent être soit des chaînes de caractères ("aa", "bonjour"), soit des expressions du type \verb+btex $\pi$ etex+ (ou \verb|LaTeX("$\pi$")| voir page \pageref{latex}), soit d'autres figures. Si \verb+labn+ est omis, la valeur de \verb+xn+ sera utilisée comme étiquette. Pour obtenir une graduation sans étiquette, on peut utiliser la chaîne vide \verb+""+.
+\begin{rpobjet}{axexpart.<pos>(<x1>,<lab1>,<x2>,<lab2>,...)}{picture}
+Graduations et étiquetages partiels de l'axe des abscisses pour les valeurs \verb+x1+, \verb+x2+... et les étiquettes \verb+lab1+, \verb+lab2+... à la position \verb+pos+. Si \verb+pos+ est omis, les étiquettes sont placées à la position \verb+bot+.
 
-On peut désactiver le dessin de la graduation en donnant la valeur \verb|false| à \verb|boolgradxpart|.
+Les étiquettes peuvent être soit des chaînes de caractères (\verb|string|), soit des figures (\verb|picture|). Si \verb+labn+ est omis, la valeur de \verb+xn+ sera utilisée comme étiquette. Pour obtenir une graduation sans étiquette, on peut utiliser la chaîne vide \verb+""+.
+\end{rpobjet}
 
-\item[axeypart.pos(y1,lab1,y2,lab2,...)] même chose sur l'axe des ordonnées. Si \verb+pos+ est omis, les étiquettes sont placées à la position \verb+lft+.
-\end{description}
+\begin{rpobjet}{axeypart.<pos>(<y1>,<lab1>,<y2>,<lab2>,...)}{picture}
+Même chose que précédemment mais sur l'axe des ordonnées. Si \verb+pos+ est omis, les étiquettes sont placées à la position \verb+lft+.
+\end{rpobjet}
 
 
+%On peut désactiver le dessin de la graduation en donnant la valeur \verb|false| à \verb|boolgradxpart|.
 
-\begin{exemple}[0.55]
-repere.orth(-4,5,6cm,-3,4.5);
-setgrad(0,5,0,3);
-setval(0,5,0,3);
-draw axex(1,2);
-draw axey(1,0);
-draw axexpart(-1.8,-pi,LaTeX("$-\pi$"))
-                                   withcolor bleu;
-draw axeypart.rt(-2.5,"dd",-1,2.5,"")
-                                  withcolor rouge;
+
+
+\begin{exemple}[lefthand ratio=0.55]
+repere.orth(-4,5,6cm,-2,3);
+ draw axes(0,0);
+ draw axexpart(-1.8,-pi,"$-\pi$",3,"dd");
+ draw axeypart.rt(-1,2,"");
 fin;
 \end{exemple}
 
+\begin{rpparam}
+gradxpart & boolean & true & Contrôle l'affichage des graduations isolées sur l'axe des abscisses.\\
+gradypart & boolean & true & Contrôle l'affichage des graduations isolées sur l'axe des ordonnées.
+\end{rpparam}
+
+\begin{exemple}[lefthand ratio=0.55]
+repere.orth(-4,5,6cm,-2,3);
+ draw axes(0,0);
+ gradxpart:=false;gradypart:=false;
+ draw axexpart(-1.8,-pi,"$-\pi$",3,"dd");
+ draw axeypart.rt(-1,2,"");
+fin;
+\end{exemple}
+
+
 \subsubsection{Ajout de texte sur les graduations}
 
-\begin{description}
-\item[extranumx] chaine de caractères qui sera ajoutée après les valeurs des graduations sur l'axe des abscisses avant d'être composée avec la commande \verb|\num| de \verb|siunitx|.
-\item[extranumy] même chose sur l'axe des ordonnées.
+\begin{rpparam}
+extranumx & string & "" & Chaine de caractères qui sera ajoutée après les valeurs des graduations sur l'axe des abscisses avant d'être composées avec la commande \verb|\num| de \verb|siunitx|.\\
+extranumy & string & "" & Même chose sur l'axe des ordonnées.
+\end{rpparam}
 
-\end{description}
 
 \begin{exemple}
 repere(-1,4,1.2cm,-1,3.5,1cm);
@@ -617,72 +656,103 @@
 
 
 \subsection{Quadrillages}
-\begin{description}
-\VerbatimFootnotes
-\item[setquad(xmin,xmax,ymin,ymax)] définit les valeurs minimales et maximales pour le tracé des quadrillages.\footnote{Il existe une macro \verb|settout| qui appelle successivement \verb+setaxes+, \verb+setgrad+, \verb+setval+ et \verb+setquad+.}
 
-\item[quadrillage(x,y)] quadrillage avec un pas de \verb+x+ sur l'axe des abscisses et de \verb+y+ sur l'axe des ordonnées. L'épaisseur des traits par défaut est \verb+0.3bp+ et la couleur par défaut est \verb+0.7white+.
+\begin{rpobjet}{quadrillage(<x>,<y>)}{picture}
+Quadrillage avec un pas de \verb+x+ sur l'axe des abscisses et de \verb+y+ sur l'axe des ordonnées.
+\end{rpobjet}
 
+\begin{exemple}
+repere(-3,3,0.8cm,-2.5,2.5,1cm);
+ draw quadrillage(1,0.5);
+ draw axes(1,1);
+ draw cadre;
+fin;
+\end{exemple}
 
-\item[papiermillimetre] comme son nom l'indique... Les couleurs et les épaisseurs des traits sont stockées dans \verb+pm_coula+, \verb+pm_coulb+, \verb+pm_coulc+ et \verb+pm_epa+, \verb+pm_epb+, \verb+pm_epc+.
 
-
-\item[papierpointe(x,y)] quadrillage formé de points avec un pas de \verb+x+ sur l'axe des abscisses et de \verb+y+ sur l'axe des ordonnées. La taille des points par défaut est \verb+2bp+.
-\end{description}
-
-
-\begin{exemple}
+\begin{exemple}[lefthand ratio=0.62]
 repere(-3,3,0.8cm,-2.5,2.5,1cm);
-draw quadrillage(1,0.5);
-draw axes(1,1);
-draw cadre;
+ draw quadrillage(1,1) dashed evenly withcolor red;
+ draw axes(1,1);
+ draw cadre;
 fin;
 \end{exemple}
 
+\begin{rpobjet}{papiermillimetre}{picture}
+Quadrillage en \si{cm} et dixièmes de \si{cm}.
+\end{rpobjet}
+
 \begin{exemple}
-repere(-3,3,0.8cm,-2.5,2.5,1cm);
-draw quadrillage(1,1) dashed evenly
-                       withcolor (1,0.5,0.5);
-draw axes(1,1) withcolor marine;
-draw cadre;
+repere(-2.5,2.5,1cm,-2.5,2.5,1cm);
+draw papiermillimetre;
+draw axes(1,1);
 fin;
 \end{exemple}
 
 
+\begin{rpobjet}{papierpointe(<x>,<y>)}{picture}
+quadrillage formé de points avec un pas de \verb+x+ sur l'axe des abscisses et de \verb+y+ sur l'axe des ordonnées.
+\end{rpobjet}
 
 \begin{exemple}
 repere(-2.5,2.5,1cm,-2.5,2.5,1cm);
-setquad(-2,2,-2,2);
-draw papiermillimetre;
+draw papierpointe(0.5,0.5);
 draw axes(1,1);
 fin;
 \end{exemple}
 
+
+\begin{rpparam}
+q_ep & numeric & 0.3 & Épaisseur des traits des quadrillages \\
+q_coul & color & 0.7white & Couleur des traits des quadrillages \\
+pm_epa & numeric & 0.2 & Épaisseur des traits des dixièmes de \si{cm} du papier millimétré \\
+pm_epb & numeric & 0.4 & Épaisseur des traits des demis \si{cm} du papier millimétré \\
+pm_epc & numeric & 0.6 & Épaisseur des traits des \si{cm} du papier millimétré \\
+pm_coula & color & 0.6white & Couleur des traits des dixièmes de \si{cm} du papier millimétré \\
+pm_coulb & color & 0.2white & Couleur des traits des demis \si{cm} du papier millimétré \\
+pm_coulc & color & black & Couleur des traits des  \si{cm} du papier millimétré \\
+pp_ep & numeric & 2 & Taille des points du papier pointé \\
+pp_coul & color & black & Couleur des points du papier pointé \\
+\end{rpparam}
+
+\begin{rpdeclaration}{setquad(<xmin>,<xmax>,<ymin>,<ymax>)}
+Définit les valeurs minimales et maximales pour les divers quadrillages.
+\end{rpdeclaration}
+
+
+\begin{rpdeclaration}{setrepere(<xmin>,<xmax>,<ymin>,<ymax>)}
+Définit les valeurs minimales et maximales pour les axes, les graduations, les étiquettes et les quadrillages.
+\end{rpdeclaration}
+
+
+
+
+
 \begin{exemple}
 repere(-3,3,0.8cm,-2.5,2.5,1cm);
 setquad(0,3,0,2.5);
 draw papierpointe(0.5,0.5);
 setquad(-3,0,-2.5,2.5);
-draw quadrillage(1,1) dashed
-          withdots withcolor magenta;
+draw quadrillage(1,1);
+setquad(0,3,-2.5,0);
+draw papiermillimetre;
 draw axes(1,1);
 draw cadre;
 fin;
 \end{exemple}
 
+
 \subsection{Base}
-\begin{description}
-\item[base(O,i,j)] figure formée par le point d'intersection des axes et son nom (\verb+O+), ainsi que des deux vecteurs de la base et leurs noms (\verb+i+ et \verb+j+ surmontés d'une flèche). Si les noms sont de la forme \og lettre + nombre\fg, le nombre est affiché en indice.
+\begin{rpobjet}{base(<O>,<i>,<j>)}{picture}
+Figure formée par le point d'intersection des axes et son nom (\verb+O+), ainsi que des deux vecteurs de la base et leurs noms (surmontés d'une flèche). Si les noms sont de la forme \og lettre + nombre\fg, le nombre est affiché en indice.
+\end{rpobjet}
 
-\item[basep(O,I,J)] figure formée par le point d'intersection des axes et son nom (\verb+O+), ainsi que des deux points qui définissent le repère.
-\end{description}
 
-
 \begin{exemple}
-repere(-1.5,3.5,0.8cm,-1,3,1cm);
+repere(-1.5,3.5,1cm,-1,3,1cm);
 flecheaxe:=false;
 draw axesn(1,1);
-drawoptions(withcolor marine);
+drawoptions(withcolor blue);
 draw base(O,i,j);
 interaxes(2,1);
 draw base(I,e1,e2);
@@ -691,8 +761,15 @@
 fin;
 \end{exemple}
 
+
+\begin{rpobjet}{basep(<O>,<I>,<J>)}{picture}
+Figure formée par le point d'intersection des axes et son nom (\verb+O+), ainsi que des deux points qui définissent le repère.
+\end{rpobjet}
+
+
+
 \begin{exemple}
-repere(-1,2.5,0.8cm,-1,2,1cm);
+repere(-1,2.5,1cm,-1,2,1cm);
 flecheaxe:=false;
 draw axes(1,0);
 draw basep(O,I,J);
@@ -702,61 +779,91 @@
 
 
 
-
 \section{Points, vecteurs}
 
 \subsection{Points}
 \label{points}
-\begin{description}
-\item[(x,y)] désigne le point (ou le vecteur) de coordonnées cartésiennes \verb+x+ et \verb+y+ dans le repère utilisateur.
 
-\item[pol(r,t)] désigne le point (ou le vecteur) de coordonnées $(r\cos t;r\sin t)$ dans le repère utilisateur.
+\begin{rpobjet}{(<x>,<y>)}{pair}
+Point (ou vecteur) de coordonnées cartésiennes \verb+x+ et \verb+y+ dans le repère utilisateur.
+\end{rpobjet}
 
-\item[pold(r,t)] même chose avec l'angle donné en degrés.
-\end{description}
+\begin{rpobjet}{pol(<r>,<t>)}{pair}
+Point (ou  vecteur) de coordonnées $(r\cos t;r\sin t)$ dans le repère utilisateur.
+\end{rpobjet}
 
-Les macros suivantes sont directement inspirées des macros similaires de \verb+geometriesyr16.mp+.
+\begin{rpobjet}{pold(<r>,<t>)}{pair}
+Même chose avec l'angle donné en degrés.
+\end{rpobjet}
 
 
-\begin{description}
-\item[MarquePoint(A)] marque le point \verb+A+. Le style de marque est contrôlé par le paramètre \verb+marque_p+ qui peut prendre les valeurs \verb+"plein"+ (valeur par défaut), \verb+"creux"+ ou \verb+"croix"+. Une autre valeur que celles-ci ne produira aucune marque.
+Les macros suivantes sont directement inspirées des macros similaires de \verb+geometriesyr16.mp+.
 
-\item[pointe(A,B,C...)] permet de marquer plusieurs points.
+\begin{rpobjet}{marquepointFig(<A>)}{picture}
+Dessin du point \verb+A+ selon le paramètre \verb+marque_p+.
+\end{rpobjet}
 
-\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.
+\begin{rplabel}{marquepoint(<A>)}
+Dessine le point \verb+A+ selon le paramètre \verb+marque_p+. C'est en réalité \verb|draw marquepointFig(A)|. C'est un peu l'équivalent de \verb|drawdot|.
+\end{rplabel}
 
-\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.
+\begin{rplabel}{marquepoints(<A>,<B>,<C>...)}
+Permet de marquer plusieurs points.
+\end{rplabel}
 
-\item[nommerot.pos(A,nom)(angle)] Même chose que \verb|nomme.pos(A,nom)| mais l'étiquette est tournée d'un angle \verb|angle|.
-\item[nommerot{[a]}(A,nom)(angle)] Même chose que \verb|nomme[a](A,nom)| mais l'étiquette est tournée d'un angle \verb|angle|.
+\begin{rpparam}
+marque_p & string & "*" & Définit le dessin du point. Les valeurs possibles sont \verb|"*"|, \verb|"o"|, \verb|"x"|, \verb|"+"| et \verb|""|. \\
+taillepoint & numeric & 3 & Diamètre du cercle représentant le point dans les cas \verb|"*"| et \verb|"o"|.\\
+taillecroix & numeric & 5 & Largeur de la croix représentant le point dans le cas \verb|"+"| et \verb|"x"|.\\
+\end{rpparam}
 
-\end{description}
 
+\begin{exemple}
+repere(-1,4,1cm,-1,3,1cm);
+pair A,B,C,D,E,F;
+A=(1,1);B=(2,1);C=(3,1);
+D=(1,2);E=(2,2);F=(3,2);
+draw axes(1,0);
+marquepoint(A);
+marque_p:="o";taillepoint:=5;
+marquepoint(B);
+marque_p:="x";marquepoint(C);
+marque_p:="+";marquepoints(D,E);
+taillecroix:=8;marquepoint(F);
+fin;
+\end{exemple}
 
+\begin{rplabel}{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 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{rplabel}
 
-
-\begin{exemple}[0.6]
-repere(-3,3,0.9cm,-2.5,5,0.9cm);
-pair A,B,C[],D,E,F;
-A=(1,1);B=(2,3);
-D=(-2,-1);E=(-1,-1);F=(-1,-2);
+\begin{exemple}[lefthand ratio=0.55]
+repere(-3,3,1cm,-2.5,5,1cm);
+pair A,B,C,D[];
+A=(-1,-1);B=(1,1);C=(2,3);
 draw axes(1,0);
-marque_p:="";drawoptions(withcolor magenta);
-nomme.llft(A);nomme.top(B);draw A--B;
-marque_p:="croix";drawoptions(withcolor rouge);
-pointe(D,E,F);
-marque_p:="creux";drawoptions(withcolor orange);
+nomme.lft(A);
+marque_p:="";
+nomme.llft(B);nomme.urt(C);
+draw B--C;
+marque_p:="o";
+drawoptions(withcolor red);
 nomme.bot(pol(sqrt(2),-pi/4),
           "$\sqrt{2}e^{-i\frac{\pi}{4}}$");
-nomme.bot((-1.5,1),"$(-1,5;1)$");
-marque_p:="plein";drawoptions(withcolor violet);
+marque_p:="*";
 for i=2 upto 4:
-  C[i]=(-3+i/2,i);nomme.lft(C[i]);
+  D[i]=(-3+i/2,i);
+  nomme.lft(D[i]) withcolor blue;
 endfor
-draw cadre;
 fin;
 \end{exemple}
-\begin{exemple}[0.55]
+
+\begin{rplabel}{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 \verb|a| qui représente alors la position de l'étiquette par rapport au point en degrés.
+\end{rplabel}
+
+
+\begin{exemple}[lefthand ratio=0.55]
 repere(-3,3.5,1cm,-3,3,1cm);
  pair A,B,C[];
  A=(-2,-1);B=(1,-2);
@@ -764,13 +871,20 @@
  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;
+   nomme[40*i](C[i]) withcolor 0.6red;
  endfor
 draw cadre;
 fin;
 \end{exemple}
 
-\begin{exemple}[0.5]
+\begin{rplabel}{nommerot.<pos>(<A>,<nom>)(<angle>)}
+ Même chose que \verb|nomme.pos(A,nom)| mais l'étiquette est tournée d'un angle \verb|angle|.
+\end{rplabel}
+
+\begin{rplabel}{nommerot.[<a>](<A>,<nom>)(<angle>)}
+Même chose que \verb|nomme[a](A,nom)| mais l'étiquette est tournée d'un angle \verb|angle|.\end{rplabel}
+
+\begin{exemple}[lefthand ratio=0.5]
 repere(-2,3,1cm,-1,3,1cm);
  pair A,B,C;
  A=(2,2);B=(-1,1);C=(1,0);
@@ -781,67 +895,61 @@
 fin;
 \end{exemple}
 
+\begin{rplabel}{nommedef.<pos>(<A>,<point>)}
+Définit la variable \verb|A|, lui donne la valeur \verb|point| et affiche le point. C'est donc un raccourci pour : \verb|pair A;A:=point;nomme.pos(A)|.
+\end{rplabel}
 
+\begin{exemple}
+repere();
+nommedef.[150](A,(0,0));
+nommedef.bot(B,(3,-3));
+draw A--B;
+fin;
+\end{exemple}
 
 \subsection{Vecteurs}
-%\begin{description}
-%\item[vecteur.pos(A,u,nom)] figure formée du représentant du vecteur \verb+u+ d'origine \verb+A+ ainsi que de \verb+nom+ placé à la position \verb+pos+ par rapport au milieu de la flèche. Si \verb+nom+ est une chaine de caractère, il sera affiché avec une flèche. Si \verb+nom+ est omis, \verb+u+ surmonté d'une flèche est utilisé. S'il s'agit d'un élément d'un tableau de points (\verb+u1+, \verb+u2+...), le nombre est affiché en indice.
-%\end{description}
-%
-%
-%\begin{exemple}[0.6]
-%repere(-1,5.5,0.7cm,-4,4,0.8cm);
-%pair A,B,C[],u,v,w[];
-%u=(2,2);v=(2,-1);
-%A=(1,1);B=A+u;
-%draw axes(1,0);
-%draw base(O,i,j);
-%drawoptions(withcolor cyan);
-%nomme.llft(A);nomme.top(B);
-%draw vecteur.ulft(A,u,"AB");
-%draw vecteur.urt(B,v);
-%draw vecteur.bot(A,u+v,%
-%                 LaTeX("$\vect{u}+\vect{v}$"));
-%drawoptions(withcolor marine);
-%for i=1 upto 3:
-% C[i]=(1,i-4);w[i]=(1.5,0.5*i-1);
-%draw vecteur.bot(C[i],w[i]);
-%endfor
-%draw cadre;
-%fin;
-%\end{exemple}
 
-\begin{description}
-\item[drawvecteur(A,u)] Trace le représentant d'origine \verb|A| du vecteur \verb|u|. C'est l'équivalent de \verb|drawarrow A--A+u|
-\end{description}
+\begin{rplabel}{drawvecteur(A,u)}
+Trace le représentant d'origine \verb|A| du vecteur \verb|u|. C'est l'équivalent de la commande \verb|drawarrow A--A+u|
+\end{rplabel}
 
-\begin{exemple}[0.6]
+\begin{exemple}[lefthand ratio=0.6]
 repere(-1,5,1cm,-1,4,1cm);
  pair A,u;
  A=(1,0);u=(3,3);
  draw quadrillage(1,1);
  draw axes(1,1);
- drawvecteur(A,u) couleur bleu;
- drawvecteur((1,3),(2,-2)) epaisseur 1;
+ drawvecteur(A,u) withcolor blue;
+ drawvecteur((1,3),(2,-2));
 fin;
 \end{exemple}
 
 
-\section{Droites, courbes...}
 
+\section{Droites}
+
 \subsection{Droites}
-\begin{description}
-\item[droite(A,B)] droite $(AB)$.
 
-\item[droite(a,b,c)] droite d'équation $ax+by+c=0$ dans le repère utilisateur.
+\begin{rpobjet}{droite(<A>,<B>)}{path}
+Droite $(AB)$. Il s'agit en réalité d'un segment coupé au niveau des limites du repère.
+\end{rpobjet}
 
-\item[droite(a,b)] droite d'équation $y=ax+b$ dans le repère utilisateur.
+\begin{rpobjet}{droite(<a>,<b>,<c>)}{path}
+Droite d'équation $ax+by+c=0$ dans le repère utilisateur.
+\end{rpobjet}
 
-\item[droite(c)] droite d'équation $x=c$ dans le repère utilisateur.
-\end{description}
 
+\begin{rpobjet}{droite(<a>,<b>)}{path}
+Droite d'équation $y=ax+b$ dans le repère utilisateur.
+\end{rpobjet}
 
-\begin{exemple}[0.65]
+
+\begin{rpobjet}{droite(<c>)}{path}
+Droite d'équation $x=c$ dans le repère utilisateur.
+\end{rpobjet}
+
+
+\begin{exemple}[lefthand ratio=0.65]
 repere(-2,3,1cm,-2,3,1cm);
 pair A,B;
 A=(-0.5,-1);B=(1.5,1.5);
@@ -849,19 +957,22 @@
 nomme.ulft(A);
 nomme.lrt(B);
 drawoptions(withpen pencircle scaled 1);
-draw droite(A,B) withcolor olive;
-draw droite(1) withcolor vertfonce;           %x=1
-draw droite(1/3,3/2) withcolor vertfonce; %y=(1/3)x+3/2
-draw droite(2,3,-1) withcolor vertfonce;      %2x+3y-1=0
+draw droite(A,B);
+draw droite(1) withcolor red;           %x=1
+draw droite(1/3,3/2) withcolor 0.7green; %y=(1/3)x+3/2
+draw droite(2,3,-1) withcolor blue; %2x+3y-1=0
 fin;
 \end{exemple}
 
+
 \subsection{Demi-droites}
-\begin{description}
-\item[demidroite(A,B)] demi-droite $[AB)$.
+\begin{rpobjet}{demidroite(<A>,<B>)}{path}
+Demi-droite $[AB)$.
+\end{rpobjet}
 
-\item[demidroite(A,a)] demi-droite d'origine $A$ qui fait un angle $a$ avec la direction $(Ox)$.
-\end{description}
+\begin{rpobjet}{demidroite(<A>,<a>)}{path}
+Demi-droite d'origine $A$ qui fait un angle $a$ avec la direction $(Ox)$.
+\end{rpobjet}
 
 
 \begin{exemple}
@@ -878,70 +989,154 @@
 fin;
 \end{exemple}
 
-\subsection{Courbes et fonctions}
+
+\section{Courbes et fonctions}
+\subsection{Courbes}
 \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.
 
-\begin{description}
-\item[courbefonc(f)()] courbe représentant la fonction $f$ sur l'intervalle définissant le repère.
+\begin{rpobjet}{courbefonc(<f>)()}{path}
+Courbe représentant la fonction $f$ sur l'intervalle \verb|[Xmin;Xmax]| définissant le repère.
+\end{rpobjet}
 
-\item[courbefonc(f)(xmin,xmax)] courbe représentant la fonction $f$ sur l'intervalle $[xmin;xmax]$.
+\begin{exemple}
+repere(-2,5,1cm,-2,2.5,1cm);
+vardef f(expr x)=-0.5(x**2)+2*x enddef;
+path C_f;
+draw axes(1,1);
+C_f=courbefonc(f)();
+draw C_f withpen pencircle scaled 1;
+fin;
+\end{exemple}
 
-\item[courbefonc(f)(xmin,xmax,n)] courbe représentant la fonction $f$ sur l'intervalle $[xmin;xmax]$ en utilisant \verb+n+ points d'interpolation. La valeur par défaut de \verb|n| est 60.
+\begin{rpobjet}{courbefonc(<f>)(<xminf>,<xmaxf>)}{path}
+Courbe représentant la fonction $f$ sur l'intervalle \verb|[xminf;xmaxf]|. Ces valeurs peuvent aussi être données de manière globale.
+\end{rpobjet}
 
-\item[courbepoints(f)(xmin,xmax,n)] ne trace que les \verb+n+ points sans les relier. Les points sont dessinés en fonction de la valeur de \verb+marque_p+ (voir \ref{points}).
 
-\item[fonccourbe.p(x)] image de \verb+x+ par la fonction dont la courbe représentative est le chemin \verb+p+. La macro renvoie 0 si la fonction n'est pas définie.
+\begin{exemple}
+repere(-2,5,1cm,-2,2.5,1cm);
+vardef f(expr x)=-0.5(x**2)+2*x enddef;
+path C_f;
+draw axes(1,1);
+C_f=courbefonc(f)(-0.5,3);
+draw C_f withpen pencircle scaled 1;
+fin;
+\end{exemple}
 
-\item[nomme.pos(p,x,nom)] affiche \verb+nom+ au point d'abscisse \verb+x+ de la courbe \verb+p+ à la position \verb+pos+. \verb+nom+ peut être soit une chaîne de caractères, soit une expression du type \verb+btex ... etex+, soit une autre figure. Si \verb+nom+ est omis, le nom \verb+p+ est affiché. S'il s'agit d'un élément d'un tableau de points (\verb+p1+, \verb+p2+...), le nombre est affiché en indice.
 
+\begin{rpobjet}{courbefonc(<f>)(<xminf>,<xmaxf>,<nbf>)}{path}
+Courbe représentant la fonction $f$ sur l'intervalle \verb|[xminf;xmaxf]|. Le chemin est tracé avec \verb|nbf| points d'interpolation. Ces valeurs peuvent aussi être données de manière globale.
+\end{rpobjet}
 
-\item[intercourbes(P,p,q)] stocke dans le tableau de points \verb+P+ les points d'intersection des chemins \verb+p+ et \verb+q+. \verb+P1+ est un des points d'intersection, \verb+P2+ un autre etc. Il faut, avant d'utiliser cette macro, déclarer le tableau \verb+P+ de la façon suivante : \verb+pair P[];+
 
-\item[ptantecedents(P,y,p)] stocke dans le tableau de points \verb+P+ les points du chemin \verb+p+ d'ordonnée \verb+y+. De même que précédemment, le tableau \verb+P+ doit être déclaré avant d'utiliser cette macro.
+\begin{rpparam}
+xminf & numeric & Xmin & Valeur minimale de l'abscisse pour le tracé des représentations graphiques de fonctions. \\
+xmaxf & numeric & Xmax & Valeur maximale de l'abscisse pour le tracé des représentations graphiques de fonctions. \\
+nbf & numeric & 50 & Nombre de points d'interpolation pour le tracé des représentations graphiques de fonctions
+\end{rpparam}
 
-\item[antecedents(X,y,p)] stocke dans le tableau de nombres \verb+X+ les antécédents de \verb+y+ par la fonction dont la courbe représentative est le chemin \verb+p+. De même que précédemment, le tableau \verb+X+ doit être déclaré avant d'utiliser cette macro.
+\begin{exemple}
+repere(-2,5,1cm,-2,2.5,1cm);
+vardef f(expr x)=-0.5(x**2)+2*x enddef;
+path C_f;
+draw axes(1,1);
+xminf:=1;xmaxf:=4;
+C_f=courbefonc(f)();
+draw C_f withpen pencircle scaled 1;
+fin;
+\end{exemple}
 
+\begin{rpobjet}{courbepoint(<f>)(<xmin>,<xmax>,<n>)}{picture}
+Ne trace que les \verb+n+ points sans les relier. Les points sont dessinés en fonction de la valeur de \verb+marque_p+ (voir \ref{points}).
+\end{rpobjet}
 
-\item[marquepointcourbe(p,x1,x2,...)] marque les points de la courbe \verb+p+ d'abscisses \verb+x1+, \verb+x2+... La marque dépend de la valeur de \verb+marque_p+.
 
-\item[marquepointchemin(p,n1,n2,...)] dans le cas d'un chemin défini par \verb+A..B..C..+, marque le \verb+n1+-ième point, le \verb+n2+-ième point... La marque dépend de la valeur de \verb+marque_p+. Attention, le premier point est numéroté 0.
+\begin{exemple}
+repere(-2,4,1cm,-2.5,2,1cm);
+vardef g(expr x)=exp(x)/10-2 enddef;
+draw axes(1,1);
+draw courbepoints(g)(0,4,9);
+fin;
+\end{exemple}
 
-\end{description}
+\begin{rpobjet}{fonccourbe(<p>)(<x>)}{numeric}
+Image de \verb+x+ par la fonction dont la courbe représentative est le chemin \verb+p+. La macro renvoie 0 si la fonction n'est pas définie.
+\end{rpobjet}
 
+\begin{exemple}
+repere(-2,4,1cm,-2,3,1cm);
+ path p; numeric a,b;
+ p=(-2,3)..(-1,0)..(0,-1)..(1,0)
+               ..(2,1)..(3,0)..(4,-3);
+ draw axes(1,1);
+ draw p withpen pencircle scaled 1;
+ drawoptions(withcolor blue);
+ a=1.5;b=fonccourbe(p)(a);
+ marquepoint((a,b));
+ b:=arrondi(1000,b);
+ label("$f(1.5)\approx"& decimal(b) &"$",
+         (2,2));
+fin;
+\end{exemple}
 
-\begin{exemple}[0.5]
-repere(-2,5,0.7cm,-3,3,0.7cm);
-vardef f(expr x)=-0.5(x**2)+2*x enddef;
-vardef g(expr x)=exp(x)/10-3 enddef;
+\begin{rplabel}{marquepointcourbe(<p>,<x1>,<x2>,...)}
+Marque les points de la courbe \verb+p+ d'abscisses \verb+x1+, \verb+x2+... La marque dépend de la valeur de \verb+marque_p+.
+\end{rplabel}
+
+\begin{exemple}
+repere(-2,4,1cm,-2,2.5,1cm);
 path C_f;
+vardef f(expr x)= x**2-2x enddef;
+C_f= courbefonc(f)(-2,3);
 draw axes(1,1);
-drawoptions(withcolor moutarde);
-C_f= courbefonc(f)();
 draw C_f withpen pencircle scaled 1;
-nomme.llft(C_f,4.7);
-drawoptions(withcolor beige);
-draw courbepoints(g)(0,4,9);
+drawoptions(withcolor red);
+marquepointcourbe(C_f,-0.5,0.8,2.2,2.6);
 fin;
 \end{exemple}
 
+\begin{rplabel}{marquepointchemin(<p>,<n1>,<n2>,...)}
+Dans le cas d'un chemin défini par \verb+A..B..C..+, marque le \verb+n1+-ième point, le \verb+n2+-ième point... La marque dépend de la valeur de \verb+marque_p+. Attention, le premier point est numéroté 0.
+\end{rplabel}
+
+
 \begin{exemple}
 repere(-2.5,4.5,1cm,-3.5,2.5,1cm);
-path p,C_f;
-pair I[],A[];
-vardef f(expr x)= x**2-2x enddef;
+path p;
+p=(-2,-2)..(-1,1)..(0,2)
+  ..(1,1)..(2,-2)..(3,-3)
+  ..(3.5,-2.5)..(4,-1);
+draw axes(1,1);
+draw p withpen pencircle scaled 1;
+drawoptions(withcolor red);
+marquepointchemin(p,0,2,3,5);
+fin;
+\end{exemple}
+
+
+\begin{rpdeclaration}{antecedents(<X>,<y>,<p>)}
+Stocke dans le tableau de nombres \verb+X+ les antécédents de \verb+y+ par la fonction dont la courbe représentative est le chemin \verb+p+. Le tableau \verb+X+ doit être déclaré avant d'utiliser cette macro.
+\end{rpdeclaration}
+
+\begin{rpdeclaration}{ptantecedents(<P>,<y>,<p>)}
+Stocke dans le tableau de points \verb+P+ les points du chemin \verb+p+ d'ordonnée \verb+y+. Le tableau \verb+P+ doit être déclaré avant d'utiliser cette macro.
+\end{rpdeclaration}
+
+\begin{exemple}
+repere(-2.5,4.5,1cm,-3.5,2.5,1cm);
+path p;
+pair A[];numeric n[];
 p=(-2,-2)..(-1,1)..(0,2)..(1,1)
        ..(2,-2)..(3,-3)..(3.5,-2.5)
        ..(4,-1);
-C_f= courbefonc(f)(-2,2.5);
 draw axes(1,1);
-drawoptions(withpen pencircle scaled 1);
-draw p withcolor bleu;
-draw C_f withcolor rouge;
-intercourbes(I,C_f,p);
-drawoptions(withcolor violet);
-nomme.lft(I1);nomme.rt(I2);
+draw p withpen pencircle scaled 1;
+drawoptions(withcolor blue);
 draw droite(0,-1.5) dashed evenly;
+antecedents(n,-1.5,p);
+draw axexpart.top(n1,"$n_1$",n2,"$n_2$",
+                     n3,"$n_3$");
 ptantecedents(A,-1.5,p);
 nomme.lrt(A1);nomme.llft(A2);
 nomme.lrt(A3);
@@ -948,35 +1143,62 @@
 fin;
 \end{exemple}
 
+\begin{rpdeclaration}{intercourbes(<P>,<p>,<q>)}
+Stocke dans le tableau de points \verb+P+ les points d'intersection des chemins \verb+p+ et \verb+q+.  Il faut, avant d'utiliser cette macro, déclarer le tableau \verb+P+.
+\end{rpdeclaration}
 
 \begin{exemple}
-repere(-2.5,4.5,1cm,-3.5,2.5,1cm);
-path p,C_f;
-pair I[],A[];
+repere(-2.5,3,1cm,-2.5,2.5,1cm);
+path p,C_f; pair I[];
 vardef f(expr x)= x**2-2x enddef;
-p=(-2,-2)..(-1,1)..(0,2)
-  ..(1,1)..(2,-2)..(3,-3)
-  ..(3.5,-2.5)..(4,-1);
-C_f= courbefonc(f)(-2,3);
+p=(-2,-2)..(-1,1)..(0,2)..(1,1)
+       ..(2,-2)..(3,-3)..(3.5,-2.5)
+       ..(4,-1);
+C_f= courbefonc(f)(-2,2.5);
 draw axes(1,1);
 drawoptions(withpen pencircle scaled 1);
 draw p withcolor bleu;
 draw C_f withcolor rouge;
-drawoptions(withcolor violet);
-marquepointcourbe(C_f,-0.5,0.8,2.2,2.6);
-marquepointchemin(p,0,2,3,5);
+intercourbes(I,C_f,p);
+drawoptions(withcolor black);
+nomme.lft(I1);nomme.rt(I2);
 fin;
 \end{exemple}
 
+\subsection{Nom des courbes}
 
-\subsection{Placement automatique du nom des courbes}
-\begin{description}
-\item[nomme(p,nom)] affiche \verb|nom| au niveau d'un point d'intersection de \verb|p| et du contour de la figure. La position est choisie en fonction de la chaine \verb|prefnomme| qui peut prendre les valeurs \verb|"right"| (valeur par défaut), \verb|"left"|, \verb|"top"| ou \verb|"bottom"| et de la place restante.
-\end{description}
+\begin{rplabel}{nomme.<pos>(<p>,<x>,<nom>)}
+Affiche \verb+nom+ au point d'abscisse \verb+x+ de la courbe \verb+p+ à la position \verb+pos+. Si \verb+nom+ est omis, le nom \verb+p+ est affiché. S'il s'agit d'un élément d'un tableau de points (\verb+p1+, \verb+p2+...), le nombre est affiché en indice.
+\end{rplabel}
 
 \begin{exemple}
-prefnomme:="left";
+repere(-5,5,0.7cm,-5,5,0.7cm);
+path d,C_f;
+d=droite(-1,3);
+vardef f(expr x)=0.5(x**2)-x -4 enddef;
+C_f=courbefonc(f)();
+draw axes(1,1);
+draw cadre;
+drawoptions(withcolor blue);
+draw d epaisseur 1;
+nomme.urt(d,1,"$d_2$");
+drawoptions(withcolor red);
+draw C_f epaisseur 1;
+nomme.lrt(C_f,2);
+fin;
+\end{exemple}
 
+
+
+\begin{rplabel}{nomme(<p>,<nom>)}
+Affiche \verb|nom| (qui peut être omis) au niveau d'un point d'intersection de \verb|p| et du contour de la figure. La position est choisie automatiquement en fonction de la chaine \verb|prefnomme| et de la place restante.
+\end{rplabel}
+
+\begin{rpparam}
+prefnomme & string & "right" & indique le placement préféré du nom des courbes. Les valeurs possibles sont \verb|"right"|, \verb|"left"|, \verb|"top"| ou \verb|"bottom"|.
+\end{rpparam}
+
+\begin{exemple}
 repere(-5,5,0.7cm,-5,5,0.7cm);
 path d,C_f;
 d=droite(-1,3);
@@ -983,17 +1205,18 @@
 vardef f(expr x)=0.5(x**2)-x -4 enddef;
 C_f=courbefonc(f)();
 draw axes(1,1);
-draw d epaisseur 1 couleur bleu;
-draw C_f epaisseur 1 couleur bleu;
-nomme(d,"$d_2$") couleur bleu;
-nomme(C_f) couleur bleu;
 draw cadre;
+drawoptions(withcolor blue);
+draw d epaisseur 1;
+nomme(d,"$d_2$");
+drawoptions(withcolor red);
+draw C_f epaisseur 1;
+nomme(C_f);
 fin;
 \end{exemple}
 
 \begin{exemple}
-prefnomme:="bottom";
-
+prefnomme:="top";
 repere(-5,5,0.7cm,-5,5,0.7cm);
 path d,C_f;
 d=droite(-1,3);
@@ -1000,55 +1223,83 @@
 vardef f(expr x)=0.5(x**2)-x -4 enddef;
 C_f=courbefonc(f)();
 draw axes(1,1);
-draw d epaisseur 1 couleur bleu;
-draw C_f epaisseur 1 couleur bleu;
-nomme(d,"$d_2$") couleur bleu;
-nomme(C_f) couleur bleu;
 draw cadre;
+drawoptions(withcolor blue);
+draw d epaisseur 1;
+nomme(d,"$d_2$");
+drawoptions(withcolor red);
+draw C_f epaisseur 1;
+nomme(C_f);
 fin;
 \end{exemple}
 
+
 \subsection{Dérivée et tangentes}
-\begin{description}
-\item[der.p(x)] image de \verb+x+ par la dérivée de la fonction dont la courbe représentative est \verb+p+.
-%\item[der2.f(x)] image de \verb+x+ par la dérivée de la fonction \verb+f+.
 
-\item[tangente(p,x)] tangente à la courbe \verb+p+ au point d'abscisse \verb+x+.
+\begin{rpobjet}{der(<p>)(<x>)}{numeric}
+Image de \verb+x+ par la dérivée de la fonction dont la courbe représentative est \verb+p+.
+\end{rpobjet}
 
-\item[tangente.gauche(p,x,long)] flèche de longueur \verb+long+ représentant la demi-tangente gauche à la courbe \verb+p+ au point d'abscisse \verb+x+. Le paramètre \verb+long+ est optionnel. Sa valeur par défaut est \verb+20bp+.
+\begin{exemple}
+repere(-2.5,4.5,1cm,-3.5,2.5,1cm);
+path f,f';
+f=(-2,-2){dir 60}..(-1,1)
+  ..(0,2){right}..(1,1)..(2,-2)
+  ..(3,-3){right}..(4,-2){(1,2)};
+vardef df(expr x)= der(f)(x) enddef;
+f'= courbefonc(df)(-1,4);
+draw axes(1,1);
+drawoptions(withpen pencircle scaled 1);
+draw f;
+nomme(f);
+draw f' withcolor  red;
+nomme(f') withcolor  red;
+fin;
+\end{exemple}
 
-\item[tangente.droite(p,x,long)] idem à droite.
+\begin{rpobjet}{tangente(<p>,<x>)}{path}
+Droite tangente à la courbe \verb+p+ au point d'abscisse \verb+x+.
+\end{rpobjet}
 
-\item[tangente.double(p,x,long)] idem des deux côtés.
-\end{description}
+\begin{rpobjet}{tangente.gauche(<p>,<x>,<long>)}{picture}
+Flèche de longueur \verb+long+ représentant la demi-tangente gauche à la courbe \verb+p+ au point d'abscisse \verb+x+. \verb+long+ est optionnel, la valeur par défaut est donnée par le paramètre \verb|longtan|.
+\end{rpobjet}
 
+\begin{rpobjet}{tangente.droite(<p>,<x>,<long>)}{picture}
+Même chose à droite.
+\end{rpobjet}
 
+\begin{rpobjet}{tangente.gauche(<p>,<x>,<long>)}{picture}
+Même chose des deux côtés
+\end{rpobjet}
+
+
+\begin{rpparam}
+longtan & numeric & 20 & Longueur des « demi-flèches » dans les tracés de tangentes.
+\end{rpparam}
+
+
 \begin{exemple}
 repere(-2.5,4.5,1cm,-3.5,2.5,1cm);
-path p,q;
+path p;
 p=(-2,-2){dir 60}..(-1,1)
   ..(0,2){right}..(1,1)..(2,-2)
   ..(3,-3){right}..(4,-2){(1,2)};
-q= courbefonc(der.p)(-1,4);
 draw axes(1,1);
 drawoptions(withpen pencircle scaled 1);
-draw p withcolor  bleu;
-nomme.rt(p,0.7,"$y=f(x)$");
-draw q withcolor  rouge;
-nomme.lft(q,3.7,"$y=f'(x)$");
-drawoptions(withpen pencircle scaled 1
-            withcolor violet);
+draw p;
+drawoptions(withcolor red);
 draw tangente.double(p,0);
 draw tangente.droite(p,-2,40);
-draw tangente.gauche(p,4,30);
+longtan:=30;
+draw tangente.gauche(p,4);
 draw tangente(p,2.5);
 fin;
+
 \end{exemple}
 
 \subsection{Interpolation}
 
-
-
 \MP{} propose les commandes suivantes (qui peuvent être combinées dans une même courbe) :
 
 \begin{description}
@@ -1056,22 +1307,27 @@
 \item[A..B..C..] Courbe de Bézier passant par les points $A$, $B$, $C$...
 \end{description}
 
+
 \subsubsection*{Interpolation polynomiale}
-\verb|repere.mp| propose aussi les  commandes ci-dessous (pas toujours la meilleure méthode d'approximation...). À compiler avec \verb|mpost -numbersystem="decimal" fichier.mp| pour gagner en précision.
+Ce n'est bien sûr pas toujours la meilleure méthode d'approximation. Il est conseillé de compiler avec \verb|numbersystem| réglé sur \verb|decimal| pour gagner en précision.
 
-\begin{description}
-\item[lagrange(A,B,C,...)()] Courbe passant par $A$, $B$, $C$... représentant le polynôme  de degré maximal $n-1$ tel que $P(x_A)=y_A$, $P(x_B)=y_B$... sur l'intervalle définissant le repère.
-\item[lagrange(A,B,C,...)(xmin,xmax)] Même courbe que précédemment mais sur l'intervalle $[xmin;xmax]$.
-\item[lagrange(x1,y1,x2,y2,x3,y3...)()]  Courbe passant par les points $(x_1;y_1)$, $(x_2;y_2)$, $(x_3;y_3)$... représentant le polynôme de degré maximal $n-1$ tel que $P(x_i)=y_i$ sur l'intervalle définissant le repère.
-\item[lagrange(x1,y1,x2,y2,x3,y3...)(xmin,xmax)] Même courbe que précédemment mais sur l'intervalle $[xmin;xmax]$.
+\begin{rpobjet}{lagrange(<A>,<B>,<C>,...)()}{path}
+Courbe passant par $A$, $B$, $C$... représentant le polynôme  de degré maximal $n-1$ tel que $P(x_A)=y_A$, $P(x_B)=y_B$... sur l'intervalle \verb|[Xmin;Xmax]| définissant  le repère.
+\end{rpobjet}
 
-\item[hermite((x1,y1,y'1),(x2,y2,y'2)...)()] Courbe passant par les points $(x_1;y_1)$, $(x_2;y_2)$, $(x_3;y_3)$... représentant le polynôme de degré maximal $2n-1$ tel que $P(x_i)=y_i$ et $P'(x_i)=y'_i$ sur l'intervalle définissant le repère.
-\item[hermite((x1,y1,y'1),(x2,y2,y'2)...)(xmin,xmax)] Même courbe que précédemment mais sur l'intervalle $[xmin;xmax]$.
-\item[hermite(A,y'A,B,y'B,C,y'C...)()] Courbe passant par les points $A$, $B$, $C$... représentant le polynôme de degré maximal $2n-1$ tel que $P(x_A)=y_A$ et $P'(x_A)=y'_A$... sur l'intervalle définissant le repère.
-\item[hermite(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{rpobjet}{lagrange(<A>,<B>,<C>,...)(<xminf>,<xmaxf>)}{path}
+Même courbe que précédemment mais sur l'intervalle \verb|[xminf;xmaxf]|.
+\end{rpobjet}
 
-\begin{exemple}[0.55]
+\begin{rpobjet}{lagrange(<x1>,<y1>,<x2>,<y2>,<x3>,<y3>...)()}{path}
+Courbe passant par les points $(x_1;y_1)$, $(x_2;y_2)$, $(x_3;y_3)$... représentant le polynôme de degré maximal $n-1$ tel que $P(x_i)=y_i$ sur l'intervalle \verb|[Xmin;Xmax]| définissant le repère.
+\end{rpobjet}
+
+\begin{rpobjet}{lagrange(<x1>,<y1>,<x2>,<y2>,<x3>,<y3>...)(<xminf>,<xmaxf>)}{path}
+Même courbe que précédemment mais sur l'intervalle \verb|[xminf;xmaxf]|.
+\end{rpobjet}
+
+\begin{exemple}[lefthand ratio=0.55]
 repere.orth(-1,10,7cm,-1,10);
 pair A[],B[];
 A[1]=(1,1);A[2]=(3,5);A[3]=(5,8);
@@ -1081,75 +1337,81 @@
 path C;C=lagrange(1,6,3,7,6,4,8,9)(0,8);
 draw quadrillage(1,1);
 draw axes(1,1);
-draw L epaisseur 1 couleur rouge; 
-draw C epaisseur 1 couleur bleu;
-for i=1 upto 5: nomme.llft(A[i]) couleur rouge;
-endfor
-for i=1 upto 4: nomme.llft(B[i]) couleur bleu;
-endfor
+drawoptions(withcolor red);
+draw L epaisseur 1;
+for i=1 upto 5: nomme.llft(A[i]); endfor
+drawoptions(withcolor blue);
+draw C epaisseur 1;
+for i=1 upto 4: nomme.llft(B[i]); endfor
 fin;
 \end{exemple}
 
-\begin{exemple}[0.55]
+\begin{rpobjet}{hermite((<x1>,<y1>,<y'1>),(<x2>,<y2>,<y'2>)...)()}{path}
+Courbe passant par les points $(x_1;y_1)$, $(x_2;y_2)$, $(x_3;y_3)$... représentant le polynôme de degré maximal $2n-1$ tel que $P(x_i)=y_i$ et $P'(x_i)=y'_i$ sur l'intervalle \verb|[Xmin;Xmax]| définissant le repère.
+\end{rpobjet}
+
+\begin{rpobjet}{hermite((<x1>,<y1>,<y'1>),(<x2>,<y2>,<y'2>)...)(<xminf>,<xmaxf>)}{path}
+Même courbe que précédemment mais sur l'intervalle \verb|[xminf;xmaxf]|.
+\end{rpobjet}
+
+\begin{rpobjet}{hermite(<A>,<y'A>),(B,<y'B>)...)()}{path}
+Courbe passant par les points $A$, $B$, $C$... représentant le polynôme de degré maximal $2n-1$ tel que $P(x_A)=y_A$ et $P'(x_A)=y'_A$... sur l'intervalle \verb|[Xmin;Xmax]| définissant le repère.
+\end{rpobjet}
+
+\begin{rpobjet}{hermite(<A>,<y'A>),(B,<y'B>)...)(<xminf>,<xmaxf>)}{path}
+Même courbe que précédemment mais sur l'intervalle \verb|[xminf;xmaxf]|.
+\end{rpobjet}
+
+
+
+
+
+
+
+\begin{exemple}[lefthand ratio=0.55]
 repere.orth(-1,10,7cm,-1,10);
 draw quadrillage(1,1);
 draw axes(1,1);
 path H;H=hermite((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;
+drawoptions(withcolor blue);
+draw H withpen pencircle scaled 1;
+draw tangente.double(H,1);
+draw tangente.double(H,4);
+draw tangente.double(H,8);
 pair A,B,C; A:=(1,8);B:=(4,4);C:=(7,6);
 path I;I=hermite(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;
+drawoptions(withcolor red);
+draw I withpen pencircle scaled 1;
+draw tangente.double(I,1);
+draw tangente.double(I,4);
+draw tangente.double(I,7);
 fin;
 \end{exemple}
 
-
 \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{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{rpobjet}{spline(<A>,<B>,<C>...)()}{path}
+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 \verb|[Xmin;Xmax]| définissant le repère.
+\end{rpobjet}
 
-\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]$.
-\item[spline(xA,yA,xB,yB,xC,yC,...)()] 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[spline(xA,yA,xB,yB,xC,yC...)(xmin,xmax)] Même courbe que précédemment mais sur l'intervalle $[xmin;xmax]$.
+\begin{rpobjet}{spline(<A>,<B>,<C>...)(<xminf>,<xmaxf>)}{path}
+Même courbe que précédemment mais sur l'intervalle \verb|[xminf;xmaxf]|.
+\end{rpobjet}
 
+\begin{rpobjet}{spline(<xA>,<yA>,<xB>,<yB>,<xC>,<yC>...)()}{path}
+Même courbe que précédemment mais les valeurs sont données sous forme de liste.
+\end{rpobjet}
 
-\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{rpobjet}{spline(<xA>,<yA>,<xB>,<yB>,<xC>,<yC>...)(<xminf>,<xmaxf>)}{path}
+Même courbe que précédemment mais sur l'intervalle \verb|[xminf;xmaxf]|.
+\end{rpobjet}
 
-\begin{exemple}[0.55]
+
+
+
+
+
+\begin{exemple}[lefthand ratio=0.55]
 repere.orth(-1,10,7cm,-1,10);
 pair A[],B[];
 A[1]=(1,1);A[2]=(3,5);A[3]=(5,8);
@@ -1159,16 +1421,27 @@
 path C;C=spline(1,6,3,7,6,4,8,9)(0,8);
 draw quadrillage(1,1);
 draw axes(1,1);
-draw L epaisseur 1 couleur rouge; 
-draw C epaisseur 1 couleur bleu;
-for i=1 upto 5: nomme.llft(A[i]) couleur rouge;
+drawoptions(withpen pencircle scaled 1);
+draw L withcolor red; 
+draw C withcolor blue;
+for i=1 upto 5:
+  nomme.llft(A[i]) withcolor red;
 endfor
-for i=1 upto 4: nomme.llft(B[i]) couleur bleu;
+for i=1 upto 4:
+  nomme.llft(B[i]) withcolor blue;
 endfor
 fin;
 \end{exemple}
 
-\begin{exemple}[0.55]
+\begin{rpobjet}{spline(<A>,<y'A>,<B>,<y'B>,<C><y'C>,...)()}{path}
+Courbe passant par les points $A$, $B$, $C$ représentant une fonction cubique par morceaux telle que $f(x_A)=y_A$, $f'(x_A)=y'_A$, $f(x_B)=y_B$, $f'(x_B)=y'_B$...  sur l'intervalle \verb|[Xmin;Xmax]| définissant le repère. Les valeurs \verb|y'A|, \verb|y'B|... peuvent être omises
+\end{rpobjet}
+
+\begin{rpobjet}{spline(<A>,<y'A>,<B>,<y'B>,<C><y'C>,...)(<xminf>,<xmaxf>)}{path}
+Même courbe que précédemment mais sur l'intervalle \verb|[xminf;xmaxf]|.
+\end{rpobjet}
+
+\begin{exemple}[lefthand ratio=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);
@@ -1177,11 +1450,12 @@
 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;
+drawoptions(withpen pencircle scaled 1);
+draw S withcolor blue;
+draw T withcolor red;
+draw tangente.double(T,0) withcolor red;
+draw tangente.double(T,6) withcolor red;
+draw tangente.double(T,9) withcolor red;
 nomme.lrt(A);nomme.top(B);
 nomme.llft(C);nomme.rt(D);
 fin;
@@ -1190,105 +1464,136 @@
 Attention : lorsque la courbure est importante, l'utilisation de \verb|tangente| peut  donner des résultats erronés...
 
 \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+.
 
+\begin{rpobjet}{suite(<u>,<deb>,<fin>)}{picture}
+Figure formée des points $(i;u_i)$ pour $i$ variant entre \verb+deb+ et \verb+fin+.
+\end{rpobjet}
 
-\item[suiterec(f,deb,fin,init)] ligne brisée (\og escalier \fg{} ou \og escargot \fg) permettant de visualiser les termes de la suite définie par $u_{n+1}=f(u_n)$ de premier terme $u_{deb}=init$ et de dernier terme $u_{fin}$.
-
-\item[suiterecprojx.pos(lab,min,max)] figure formée des segments joignant les points $(u_n;u_n)$ et $(u_n;0)$ pour $n$ compris entre \verb+min+ et \verb+max+. La suite $u$ et sa valeur initiale sont définies par le dernier appel de la macro \verb+suiterec+. \verb+lab+ désigne l'étiquette au niveau de l'axe des abscisse placée à la position \verb+pos+. Si \verb+lab+ est la chaîne vide \verb+""+, rien n'est écrit ; si \verb+lab+ est une autre chaîne de caractère (par ex. \verb+"u"+), elle est utilisée comme nom de la suite (on obtiendra $u_0$, $u_1$...) ; si \verb+lab+ est un nombre, les valeurs de la suites seront affichées et arrondies à \verb+lab+ décimales. Les valeurs \verb+min+ et \verb+max+ sont facultatives et égales par défaut aux valeurs \verb+deb+ et \verb+fin+ passées à la macro \verb+suiterec+.
-
-\item[suiterecprojy.pos(lab,min,max)] même chose sur l'axe des ordonnées.
-
-\item[suiterecproj(lab,min,max)] même chose sur les deux axes. Les positions sont \verb+bot+ sur l'axe des abscisses et \verb+lft+ sur l'axe des ordonnées.
-
-
-
 \begin{exemple}
 repere(-0.9,7,0.8cm,-1.2,1.2,1.5cm);
 vardef u(expr n)=(-1)**n/n enddef;
 taillepoint:=4;
 draw axes(1,1);
-draw suite(u,1,6) withcolor vertfonce;
+draw suite(u,1,6) withcolor 0.5green;
 fin;
 \end{exemple}
 
-\begin{exemple}[0.55]
+\begin{rpobjet}{Suiterec(f,deb,fin,init)}{picture}
+Figure complète formée d'une ligne brisée (\og escalier \fg{} ou \og escargot \fg) permettant de visualiser les termes de la suite définie par $u_{n+1}=f(u_n)$ de premier terme $u_{deb}=init$ et de dernier terme $u_{fin}$, des projections des différents termes sur les axes et des valeurs ou nom des termes. Des paramètres permettent de contrôler ce qui doit être affiché (voir plus bas).
+\end{rpobjet}
+
+\begin{exemple}[lefthand ratio=0.55]
 repere(-2,4.5,1cm,-1,4,1cm);
 vardef f(expr x)=sqrt(2*x+4) enddef;
-path C_f,sr;
+path C_f;
 C_f= courbefonc(f)();
-sr=suiterec(f,0,3,-1.2);
 draw axes(1,0);
+draw Suiterec(f,0,3,-1) withcolor red;
 drawoptions(withpen pencircle scaled 1);
-draw C_f withcolor bleu;
+draw C_f withcolor blue;
 draw droite(1,0);
-drawoptions(withcolor rouge);
-draw suiterecprojx.bot(1) dashed evenly;
-draw suiterecprojy.lft("") dashed evenly;
-draw sr withcolor rouge;
 fin;
 \end{exemple}
 
-\begin{exemple}
+\begin{rpparam}
+suite_nom & string & "u"& Chaine indiquant le nom de la suite pour affichage\\
+suite_affx & boolean & true & Booléen qui indique si les projections sur l'axe des abscisses doivent être tracées.\\
+suite_affy& boolean & true & Booléen qui indique si les projections sur l'axe des ordonnées doivent être tracées.\\
+suite_labx & string & "nom" & Chaine qui indique le type d'affichage des étiquettes sur l'axe des abscisses. Les valeurs sont \verb|"nom"| (le nom du terme est affiché), \verb|"val"| (la valeur du terme est affichée) ou \verb|""| (rien n'est affiché).\\
+suite_laby & string & "" &  Chaine qui indique le type d'affichage des étiquettes sur l'axe des ordonnées. Les valeurs sont \verb|"nom"| (le nom du terme est affiché), \verb|"val"| (la valeur du terme est affichée) ou \verb|""| (rien n'est affiché).\\
+suite_arrondi & numeric & 1 &  Nombre qui indique, dans le cas où un des paramètres précédents vaut \verb|"val"|, la précision des valeurs à afficher.\\
+suite_posx & string & "bot" & Chaine qui indique la position des étiquettes sur l'axe des abscisses.\\
+suite_posy & string & "lft" &  Chaine qui indique la position des étiquettes sur l'axe des ordonnées.\\
+suite_styleproj & string & "dashed evenly" & Chaine qui indique le style des tracés des projections sur les axes.\\
+\end{rpparam}
+
+\begin{exemple}[lefthand ratio=0.55]
+repere(-2,4.5,1cm,-1,4,1cm);
+vardef f(expr x)=sqrt(2*x+4) enddef;
+path C_f;
+C_f= courbefonc(f)();
+draw axes(1,0);
+suite_labx:="val";
+suite_laby:="nom";
+suite_posy:="ulft";
+draw Suiterec(f,0,3,-1) withcolor red;
+drawoptions(withpen pencircle scaled 1);
+draw C_f withcolor blue;
+draw droite(1,0);
+fin;
+\end{exemple}
+
+
+\begin{exemple}[lefthand ratio=0.55]
 repere(-0.5,5,1cm,-0.5,5,1cm);
 vardef f(expr x)=4-0.8*x enddef;
-path C_f,sr;
+path C_f;
 C_f= courbefonc(f)();
-sr=suiterec(f,0,5,0.2);
 draw axes(1,0);
+suite_nom:="v";
+suite_affy:=false;
+suite_styleproj:="withcolor 0.5green";
+draw Suiterec(f,0,5,0.2) withcolor red;
 drawoptions(withpen pencircle scaled 1);
-draw C_f  withcolor bleu;
+draw C_f  withcolor blue;
 draw droite(1,0);
-drawoptions(withcolor rouge);
-draw suiterecproj("u",1,3) dashed evenly;
-draw sr withcolor rouge;
 fin;
 \end{exemple}
 
 
 
-\end{description}
 
-
-
 \section{Surfaces}
 
 \subsection{Calcul intégral}
-\begin{description}
-\item[entrecourbes(p,q,xmin,xmax)] chemin fermé délimitant la zone comprise entre les courbes \verb+p+ et \verb+q+ et les droites d'équations $y=\verb+xmin+$ et $y=\verb+xmax+$. Il peut donc être dessiné, rempli...
 
-\item[souscourbe(p,xmin,xmax)] chemin fermé délimitant la zone comprise entre la courbe \verb+p+, l'axe des abscisses et les droites d'équations $y=\verb+xmin+$ et $y=\verb+xmax+$.
+\begin{rpobjet}{souscourbe(<p>,<xmin>,<xmax>)}{(closed) path}
+Chemin fermé délimitant la zone comprise entre la courbe \verb+p+, l'axe des abscisses et les droites d'équations $y=\verb+xmin+$ et $y=\verb+xmax+$.
+\end{rpobjet}
 
+\begin{exemple}
+repere(-1,6,0.8cm,-1,3,0.8cm);
+vardef f(expr x)= -(x/4)**3+0.75x enddef;
+path C_f,q;
+C_f:= courbefonc(f)();
+q:=souscourbe(C_f,2,5);
+fill q withcolor (1,0.7,0.7);
+draw q dashed evenly withcolor red;
+draw axes(1,1);
+drawoptions( withpen pencircle scaled 1);
+draw C_f withcolor red;
+draw cadre;
+fin;
+\end{exemple}
 
-\item[rectangles.type(p,a,b,n)] figure formée de \verb+n+ rectangles s'appuyant sur la courbe \verb+p+ entre les abscisses \verb+a+ et \verb+b+. \verb+type+ peut être \verb+min+, \verb+max+, \verb+droite+ ou \verb+gauche+.
-\end{description}
+\begin{rpobjet}{entrecourbes(<p>,<q>,<xmin>,<xmax>)}{(closed) path}
+Chemin fermé délimitant la zone comprise entre les courbes \verb+p+ et \verb+q+ et les droites d'équations $y=\verb+xmin+$ et $y=\verb+xmax+$.
+\end{rpobjet}
 
 
-
 \begin{exemple}
-repere(-3.5,6,0.7cm,-2.5,4.5,0.7cm);
+repere(-3.5,4,0.8cm,-2.5,4.5,0.8cm);
 vardef f(expr x)= -(x/4)**3+0.75x enddef;
 vardef g(expr x)= -((x-2)**2)/9+4 enddef;
-path C_f,C_g,p,q;
+path C_f,C_g,p;
 C_f:= courbefonc(f)();
 C_g:= courbefonc(g)();
-p:=entrecourbes(C_f,C_g,-2,1);
-q:=souscourbe(C_f,3,5);
-fill p withcolor 0.5Violet;
-draw p withpen pencircle scaled 2
-                        withcolor Violet;
-fill q withcolor 0.5Bleu;
-draw q dashed evenly withcolor Bleu;
+p:=entrecourbes(C_f,C_g,-2,1.5);
+fill p withcolor (0.8,0.6,0.7);
+draw p withcolor (0.5,0,0.25);
 draw axes(1,1);
 drawoptions(withpen pencircle scaled 1);
-draw C_f withcolor Bleu;
-draw C_g withcolor Rouge;
+draw C_f withcolor red;
+draw C_g withcolor 0.5blue;
 draw cadre;
 fin;
 \end{exemple}
 
+\begin{rpobjet}{rectangles.<type>(<p>,<a>,<b>,<n>)}{(closed) path}
+Ligne brisée représentant la figure formée de \verb+n+ rectangles s'appuyant sur la courbe \verb+p+ entre les abscisses \verb+a+ et \verb+b+. \verb+type+ peut être \verb+min+, \verb+max+, \verb+droite+ ou \verb+gauche+.
+\end{rpobjet}
 
+
 \begin{exemple}
 repere(-2.5,6,0.8cm,-2,5,0.8cm);
 vardef f(expr x)=
@@ -1296,30 +1601,37 @@
 enddef;
 path Cf,r[];
 Cf= courbefonc(f)();
-r1=rectangles.max(Cf,2,5.5,8);
-r2=rectangles.min(Cf,2,5.5,8);
-r3=rectangles.droite(Cf,-2,1,10);
-fill r1 withcolor 0.8Rouge;
-fill r2 withcolor 0.4Rouge;
-fill r3 withcolor 0.5Bleu;
-draw r1;draw r2 withcolor 0.8Rouge;
-draw r3;
+r1=rectangles.droite(Cf,-2,1,10);
+fill r1 withcolor 0.5red+blue;
+draw r1;
+r2=rectangles.max(Cf,2,5.5,8);
+r3=rectangles.min(Cf,2,5.5,8);
+fill r2 withcolor (1,0.2,0.2);
+fill r3 withcolor (1,0.6,0.6);
+draw r2;
+draw r3 withcolor (1,0.2,0.2);
 draw axes(1,0);
-draw Cf withcolor Bleu
+draw Cf withcolor 0.5blue
                withpen pencircle scaled 1;
 fin;
 \end{exemple}
 
+
+
+
 \subsection{Demi-plans}
-\begin{description}
- \item[demiplaninf(d)] chemin fermé délimité par la droite \verb+d+ et par la partie inférieure de \verb+cadre+ (ou la partie gauche si \verb+d+ est parallèle à l'axe des ordonnées.
- \item[demiplansup(d)] chemin fermé délimité par la droite \verb+d+ et par la partie supérieure de \verb+cadre+ (ou la partie droite si \verb+d+ est parallèle à l'axe des ordonnées.
-\end{description}
 
+\begin{rpobjet}{demiplaninf(<d>)}{(closed) path}
+Chemin fermé délimité par la droite \verb+d+ et par la partie inférieure de \verb+cadre+ (ou la partie gauche si \verb+d+ est parallèle à l'axe des ordonnées).
+\end{rpobjet}
 
+\begin{rpobjet}{demiplansup(<d>)}{(closed) path}
+Chemin fermé délimité par la droite \verb+d+ et par la partie supérieure de \verb+cadre+ (ou la partie droite si \verb+d+ est parallèle à l'axe des ordonnées).
+\end{rpobjet}
+
+
 \begin{exemple}
 repere(-2.5,3.5,1cm,-2.5,3.5,1cm);
-numeric qqw;qqw=6;
 path d[],dp[];
 d1=droite(2);
 d2=droite(1,1);
@@ -1328,13 +1640,12 @@
 dp2=demiplansup(d2);
 dp3=demiplaninf(d3);
 for i=1 upto 3:
-fill dp[i] withcolor 0.7Lime;
+fill dp[i] withcolor (0.7,1,0.4);
 endfor
 draw axes(1,1);
 drawoptions(withpen pencircle scaled 1
-                     withcolor Vertfonce);
-draw d1;draw d2;
-draw d3 dashed evenly;
+                     withcolor 0.5green);
+draw d1;draw d2;draw d3;
 drawoptions();
 draw cadre;
 fin;
@@ -1341,61 +1652,98 @@
 \end{exemple}
 
 
+\section{Projections sur les axes}
 
 
 
-\section{Projections sur les axes}
-
 \subsection{Projetés}
-\begin{description}
-\item[projetex(A)] projeté de \verb+A+ sur l'axe des abscisses parallèlement à l'axe des ordonnées.
+\begin{rpobjet}{projetex(<A>)}{pair}
+Projeté de \verb+A+ sur l'axe des abscisses parallèlement à l'axe des ordonnées.
+\end{rpobjet}
 
-\item[projetey(A)] projeté de \verb+A+ sur l'axe des ordonnées parallèlement à l'axe des abscisses.
+\begin{rpobjet}{projetey(<A>)}{pair}
+Projeté de \verb+A+ sur l'axe des ordonnées parallèlement à l'axe des abscisses.
+\end{rpobjet}
 
-\item[projectionx.pos(A,lab,dec)] figure constituée du segment joignant \verb+A+ à son projeté sur l'axe des abscisses ainsi que de l'étiquette \verb+lab+ placée à la position \verb+pos+ par rapport à ce projeté. La valeur \verb+dec+ indique un décalage par rapport à l'axe des abscisses. L'étiquette et le décalage sont optionnels.
+\begin{exemple}[lefthand ratio=0.6]
+repere(-0.5,3,1cm,-0.5,3,1cm);
+ pair A;
+ A=(2.5,2);
+ draw axes(1,1);
+ nomme.urt(A);
+ draw projetex(A)--A--projetey(A) dashed evenly;
+fin;
+\end{exemple}
 
-\item[projectiony.pos(A,lab,dec)] même chose sur l'axe des ordonnées.
+\begin{rpobjet}{Projectionx.<pos>(<A>,<lab>)}{picture}
+Figure constituée du segment joignant \verb+A+ à son projeté sur l'axe des abscisses ainsi que de l'étiquette \verb+lab+ placée à la position \verb+pos+ par rapport à ce projeté. L'étiquette est optionnelle, si elle est omise, rien n'est affiché.
+\end{rpobjet}
 
-\item[projectionaxes(A,labx,laby,dec)] figure constituée des segments joignant \verb+A+ à ses projetés sur les axes ainsi que des étiquettes \verb+labx+ et \verb+laby+ positionnées automatiquement avec un décalage \verb+dec+ par rapport aux axes. Les étiquettes et le décalage sont optionnels.
-\end{description}
+\begin{rpobjet}{Projectiony.<pos>(<A>,<lab>)}{picture}
+Figure constituée du segment joignant \verb+A+ à son projeté sur l'axe des ordonnées ainsi que de l'étiquette \verb+lab+ placée à la position \verb+pos+ par rapport à ce projeté. L'étiquette est optionnelle, si elle est omise, rien n'est affiché.
+\end{rpobjet}
 
+\begin{exemple}[lefthand ratio=0.63]
+repere(-1.5,3.5,1cm,-1.5,2.5,1cm);
+path Cf; pair A[];
+vardef f(expr x)= x**2-2x enddef;
+Cf= courbefonc(f)();
+ptantecedents(A,2,Cf);
+draw axes(1,1);
+drawoptions(dashed evenly withcolor rouge);
+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;
+fin;
+\end{exemple}
 
+\begin{rpobjet}{Projectionaxes(<A>,<labx>,<laby>)}{picture}
+Figure constituée des segments joignant \verb+A+ à ses projetés sur les axes ainsi que des étiquettes \verb+labx+ et \verb+laby+ positionnées automatiquement par rapport aux axes. Les étiquettes sont optionnelles.
+\end{rpobjet}
 
-\begin{exemple}[0.6]
+\begin{exemple}[lefthand ratio=0.63]
 repere(-1.5,3.5,1cm,-2.2,2.5,1cm);
 path Cf; pair A[];
 vardef f(expr x)= x**2-2x-0.5 enddef;
 Cf= courbefonc(f)();
-ptantecedents(A,2,Cf);
+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);
+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;
-drawoptions(dashed evenly withcolor rouge);
-draw projectionaxes((1.3,f(1.3)),"$x$","$f(x)$");
-draw projectionx.urt(A1,"$x_1$");
-draw projectionx.llft(A2,"$x_2$",-6);
-draw A1--A2;
 fin;
 \end{exemple}
 
+
 \subsection{Intervalles}
-\begin{description}
-\item[intervallex.bornes(a,b)] intervalle dessiné sur l'axe des abscisses entre \verb+a+ et \verb+b+ avec une épaisseur par défaut de \verb+1.5bp+. \verb+bornes+ peut être \verb+OO+ (ouvert à gauche, ouvert à droite), \verb+OF+, \verb+FO+ ou \verb+FF+.
 
-\item[intervalley.bornes(a,b)] même chose sur l'axe des ordonnées.
-\end{description}
+\begin{rpobjet}{intervallex.<bornes>(<a>,<b>)}{picture}
+Intervalle dessiné sur l'axe des abscisses entre \verb+a+ et \verb+b+ avec une épaisseur par défaut de \verb+1.5bp+. \verb+bornes+ peut être \verb+OO+ (ouvert à gauche, ouvert à droite), \verb+OF+, \verb+FO+ ou \verb+FF+.
+\end{rpobjet}
 
+\begin{rpobjet}{intervalley.<bornes>(<a>,<b>)}{picture}
+Même chose sur l'axe des ordonnées.
+\end{rpobjet}
 
-\begin{exemple}[0.6]
+
+\begin{exemple}[lefthand ratio=0.6]
 repere(-1,5,0.9cm,-1,4.5,1cm);
 vardef f(expr x)=x**2-5x+7 enddef;
 draw axes(1,1);
-draw courbefonc(f)()
-       withpen pencircle scaled 1 withcolor bleu;
-drawoptions(dashed evenly withcolor rouge);
+drawoptions(withcolor blue);
+draw courbefonc(f)()  withpen pencircle scaled 1;
+drawoptions(dashed evenly withcolor red);
 draw projectionx.bot((1,f(1)));
 draw projectiony.llft((2.5,f(2.5)),"0,75");
 draw projectionaxes((4,f(4)));
-drawoptions(withcolor violet);
+drawoptions(withcolor (0.5,0,0.5));
 draw intervallex.OF(1,4);
 draw intervalley.FF(0.75,3);
 label("$f(]1;4])=[0,75;3]$",(2.5,4));
@@ -1403,332 +1751,431 @@
 fin;
 \end{exemple}
 
+\begin{rpparam}
+int_ep & numeric & 2bp & Épaisseur du tracé des intervalles.
+\end{rpparam}
 
 
+
+
 \section{Statistiques et probabilités}
 
 \subsection{Boite à moustache}
-\begin{description}
-\item[boitemoustache(min,Q1,Me,Q3,max,dec,larg)] \og Boite à moustache \fg{} correspondant aux données en argument. Elle est située à un distance \verb|dec| de l'axe des abscisses et le rectangle a une largeur de \verb|larg|. Ces deux dernières valeurs sont optionnelles et valent par défaut \SI{1,5}{cm} et \SI{1}{cm}.
 
-\item[projboitemoustache(t)] Figure formée des lignes joignant les cinq valeurs du dernier diagramme en boite dessiné à son projeté sur l'axe des abscisses ainsi que de certaines étiquettes : Si \verb|t| est vide, les textes $X_{min}$, $Q_1$, $M_e$, $Q_3$ et $X_{max}$ sont affichés ; si \verb|t| est un entier, les valeurs arrondies à $10^{-t}$ sont affichées ; si \verb|t| est une liste de cinq textes (ou valeurs), ceux-ci sont affichés.
-\end{description}
+\begin{rpobjet}{diagrammeboite(<min>,<q1>,<med>,<q3>,<max>)}{(closed) path}
+Diagramme en boite ou \og boite à moustache \fg{} correspondant aux données en argument. Il s'agit d'un chemin fermé et peut donc être rempli. Les données sont optionnelles. En cas d'absence, les données du diagramme précédent sont utilisées.
+\end{rpobjet}
 
+\begin{exemple}
+repere(-0.5,10,0.7cm,-1,5,1cm);
+ setaxes(0,10,0,1);
+ draw axex(1,1);
+ fill diagrammeboite(1,4,5,7,9)
+                          withcolor 0.7white;
+ draw diagrammeboite();
+fin;
+\end{exemple}
 
+\begin{rpparam}
+boite_dec & numeric & 1.5 & Valeur qui indique le décalage de la boite par rapport à l'axe des abscisses (l'unité est celle de l'axe des ordonnées).\\
+boite_larg & numeric & 1 & Valeur qui indique la largeur de la boite  (l'unité est celle de l'axe des ordonnées).
+\end{rpparam}
+
+\begin{rpobjet}{Diagrammeboite(<min>,<q1>,<med>,<q3>,<max>)}{picture}
+Figure complète qui contient le dessin du diagramme ainsi que les projections des points importants avec éventuellement une étiquette. Des paramètres contrôlent ce qui doit être affiché. Les données sont optionnelles. En cas d'absence, les données du diagramme précédent sont utilisées.
+\end{rpobjet}
+
 \begin{exemple}
-repere(-0.5,10,0.7cm,-1,5,0.7cm);
+repere(-0.5,10,0.7cm,-1,5,1cm);
  setaxes(0,10,0,1);
  draw axex(1,0);
- draw boitemoustache(1,4,5,7,9)
-                            withcolor marine;
- draw projboitemoustache.bot()
-           withcolor 0.7rouge dashed evenly;
+ fill diagrammeboite(1,4,5,7,9)
+                          withcolor 0.7white;
+ draw Diagrammeboite();
 fin;
 \end{exemple}
 
-\begin{exemplev}[1]{1}
-repere(-1,11,0.8cm,-1,5,0.7cm);
- settout(-0.5,10.5,0,1);
+
+\begin{rpparam}
+boite_points & boolean & true & Booléen qui indique si les points aux extrémités du diagramme doivent être marqués.\\
+boite_proj & boolean & true & Booléen qui indique si les projection doivent être tracées.\\
+boite_lab & string & "nom" & Chaine qui indique le type d'affichage des étiquettes sur l'axe des abscisses. Les valeurs sont \verb|"nom"| (le nom est affiché, voir ci-dessous), \verb|"val"| (la valeur du terme est affichée) ou \verb|""| (rien n’est affiché).\\
+boite_pos & string & "bot" & Chaine qui indique la position des étiquettes sur
+l’axe des abscisses.\\
+boite_styleproj & string & "dashed evenly" & Chaine qui indique le style des tracés des projections sur les axes.
+
+\end{rpparam}
+
+\begin{rpdeclaration}{def_boite_lab(<ch1>,<ch2>,<ch3>,<ch4>,<ch5>)}
+Fonction qui permet de définir les 5 chaines qui seront affichées en abscisses si le paramètre \verb|boite_lab| vaut \verb|"nom"|.
+
+Cette fonction est appelée par défaut avec les paramètres \verb|"$X_{\text{min}}$"|, \verb|"$Q_1$"|, \verb|"$M$"|, \verb|"$Q_3$"|, \verb|"$X_{\text{max}}$"|.
+\end{rpdeclaration}
+
+\begin{exemple}[listing above text]
+repere(-0.5,10.5,0.8cm,-1,5,1cm);
  draw axex(1,0);
- drawoptions(withcolor rouge);
- draw boitemoustache(1.22,3.9,5,7.18,9.05,1cm,0.7cm);
- draw projboitemoustache.bot(1) dashed evenly;
+ boite_larg:=0.7;
+ drawoptions(withcolor red);
+ boite_dec:=1;
+ boite_lab:="val";
+ draw Diagrammeboite(1.2,3.9,5,7.2,9.1);
  drawoptions(withcolor blue);
- draw boitemoustache(0,3.14,6,8,10,2cm,0.7cm);
- draw projboitemoustache.bot(0.0456,"$\pi$","$\numproduct{2x3}$","$x$","Max")
-                                                                     dashed evenly;
+ boite_dec:=2;
+ boite_lab:="nom";
+ def_boite_lab(0.03,"$\pi$","$\numproduct{2x3}$","$x$","Max");
+ boite_styleproj:="dashed withdots";
+ draw Diagrammeboite(0,3.14,6,8,10);
 fin;
-\end{exemplev}
+\end{exemple}
 
+\subsection{Diagrammes divers}
 
-\subsection{Diagrammes}
-\begin{description}
-\item[diagrammebatons((v1,e1),(v2,e2),...(vn,en))] Figure formée des \verb|n| segments joignant les points \verb|(v1,e1),(v2,e2),...(vn,en)| et leur projeté sur l'axe des abscisses. Les bâtons sont surmontés d'un point dont le diamètre est égal à la largeur des segments multiplié par \verb|diampointsbatons|. \verb|diampointsbatons| est égal à 5 par défaut. On peut lui donner la valeur 0 pour ne pas avoir ces points.
+ \begin{rpobjet}{diagrammebatons((<v1>,<e1>),(<v2>,<e2>),...,(<vn>,<en>))}{picture}
+Figure formée des \verb|n| segments joignant les points \verb|(v1,e1),(v2,e2),...(vn,en)| et leur projeté sur l'axe des abscisses. Les bâtons sont surmontés d'un point.
+ \end{rpobjet}
 
-\item[diagrammebarres((a1,h1),(a2,h2),...(an,hn))] Figure formée de \verb|n| barres rectangulaires de hauteurs \verb|h1| \dots \verb|hn| aux abscisses \verb|a1| \dots \verb|an|. La largeur de ces barres est le nombre \verb|largbarres| qui vaut \verb|20bp| par défaut.
-\end{description}
 
-\begin{exemple}[0.6]
+\begin{exemple}[lefthand ratio=0.6]
 repere(-0.5,5,1cm,-0.5,5,1cm);
  picture diag;
  draw axes(1,1);
  diag:=diagrammebatons((1,2),(2,4),(3,2),(4,1));
- draw diag epaisseur 2 withcolor rouge;
+ draw diag withcolor rouge;
 fin
 \end{exemple}
 
+\begin{rpparam}
+batons_diampoint & numeric & 5 & Diamètre des points sur les bâtons.
+\end{rpparam}
 
-\begin{exemple}[0.6]
+\begin{exemple}[lefthand ratio=0.6]
 repere(-0.5,5,1cm,-0.5,5,1cm);
+ picture diag;
+ draw axes(1,1);
+ batons_diampoints:=10;
+ diag:=diagrammebatons((1,2),(2,4),(3,2),(4,1));
+ draw diag withpen pencircle scaled 2
+                     withcolor red dashed evenly;
+fin
+\end{exemple}
+
+\begin{rpobjet}{diagrammebarres((<a1>,<h1>),(<a2>,<h2>),...(<an>,<hn>))}{(closed) path}
+Chemin fermé qui forme \verb|n| barres rectangulaires de hauteurs \verb|h1| \dots \verb|hn| aux abscisses \verb|a1| \dots \verb|an|. %La largeur de ces barres est le nombre \verb|largbarres| qui vaut \verb|20bp| par défaut.
+\end{rpobjet}
+
+\begin{exemple}[lefthand ratio=0.61]
+repere(-0.5,5,1cm,-0.5,5,1cm);
+ gradxpart:=false;
+ flecheaxe:=false;
+ draw axey(1,1);
+ draw axex(0,0);
+ draw axexpart.bot(1,"A",2,"B",3,"C",4,"D");
  path diag;
- draw axey(1,1);
  diag:=diagrammebarres((1,2),(2,4),(3,2),(4,1));
- fill diag withcolor cyan;
- draw diag epaisseur 1 withcolor marine;
+ fill diag withcolor (0,1,1);
+ draw diag withpen pencircle scaled 1 
+                                    withcolor 0.5blue;
+fin
+\end{exemple}
+
+\begin{rpparam}
+barres_larg & numeric & 20 & Largeur des barres des diagrammes en barres.
+\end{rpparam}
+
+\begin{exemple}[lefthand ratio=0.61]
+repere(-0.5,5,1cm,-0.5,5,1cm);
+ gradxpart:=false;
  flecheaxe:=false;
+ barres_larg:=1cm;
+ draw axey(1,1);
  draw axex(0,0);
- boolgradxpart:=false;
  draw axexpart.bot(1,"A",2,"B",3,"C",4,"D");
+ path diag;
+ diag:=diagrammebarres((1,2),(2,4),(3,2),(4,1));
+ fill diag withcolor (0,1,1);
+ draw diag withpen pencircle scaled 1 
+                                    withcolor 0.5blue;
 fin
 \end{exemple}
 
+
+
 \subsection{Probabilités}
 
+\subsubsection*{Calculs}
 Quelques fonctions mathématiques sont proposées. Pour les grandes valeurs, on dépasse rapidement les capacités de \MP. Il est dans ce cas conseillé de compiler en utilisant la ligne de commande \verb|mpost -numbersystem="decimal" <fichier>.mp| ou, avec Lua\LaTeX{} et le package \verb|luamplib|, d'utiliser \verb|\mplibnumbersystem{decimal}|.
 
 
-\begin{description}
-\item[factorielle(n)] Entier égal à $n!$.
-\item[binom(n,k)] Entier égal à $\binom{n}{k}$.
-\item[binomiale(n,p,k)] $P(X=k)$ pour $X$ suivant la loi binomiale de paramètres $n$ et $p$.
-\item[diagrammebinomiale(n,p)] Diagramme en bâtons de la loi binomiale de paramètres $n$ et $p$.
-\item[diagrammeuniforme(n,m)] Diagramme en bâtons de la loi uniforme discrète sur les entiers consécutifs de \verb|n| à \verb|m|.
-\item[diagrammegeometrique(p)] Diagramme en bâtons de la loi géométrique de paramètre \verb|p|.
-\item[diagrammepoisson(lambda)] Diagramme en bâtons de la loi de Poisson de moyenne \verb|lambda|.
 
-\item[densitenormale(mu,sigma,a,b)] Courbe représentant la densité de la loi normale de moyenne \verb|mu| et d'écart type \verb|sigma| entre \verb|a| et \verb|b|. Si \verb|a| et \verb|b| sont omis, le tracé est fait sur l'intervalle définissant le repère.
-\item[densiteexponentielle(lambda)] Courbe représentant la densité de la loi normale de paramètre \verb|lambda|.
-\end{description}
+\begin{rpobjet}{factorielle(<n>)}{numeric}
+Entier égal à $n!$.
+\end{rpobjet}
 
+\begin{rpobjet}{binom(<n>,<k>)}{numeric}
+Entier égal à $\binom{n}{k}$.
+\end{rpobjet}
 
+\begin{rpobjet}{binomiale(<n>,<p>,<k>)}{numeric}
+$P(X=k)$ pour $X$ suivant la loi binomiale de paramètres $n$ et $p$.
+\end{rpobjet}
 
+
+\subsubsection*{Diagrammes}
+
+\begin{rpobjet}{diagrammebinomiale(<n>,<p>)}{picture}
+Diagramme en bâtons de la loi binomiale de paramètres $n$ et $p$.
+\end{rpobjet}
+
+
 \begin{exemple}
 repere(-2,16,0.45cm,-0.1,0.25,15cm);
-setall(0,16,0,0.25);
+setrepere(0,16,0,0.25);
 draw axex(1,1);
 draw axey(0.1,0.1);
 picture diag;
-diampointsbatons:=0;
+batons_diampoints:=0;
 diag:=diagrammebinomiale(15,0.6);
-draw diag withcolor vertfonce epaisseur 4;
+draw diag withcolor 0.5green
+                 withpen pencircle scaled 4;
 fin;
 \end{exemple}
 
-\begin{codecache}
-diampointsbatons:=5;
-\end{codecache}
+\begin{rpobjet}{diagrammeuniforme(<n>,<m>)}{picture}
+Diagramme en bâtons de la loi uniforme discrète sur les entiers consécutifs de \verb|n| à \verb|m|.
+\end{rpobjet}
 
+
+\begin{rpobjet}{diagrammegeometrique(<p>)}{picture}
+Diagramme en bâtons de la loi géométrique de paramètre \verb|p|.
+\end{rpobjet}
+
 \begin{exemple}
 repere.larg(-2,10,8cm,-0.1,0.5,6cm);
- setall(0,10,0,0.5);
+ setrepere(0,10,0,0.5);
  draw axex(1,1);
  draw axey(0.05,0.05);
  draw diagrammegeometrique(0.4)
-                   epaisseur 2 couleur bleu;
+                withpen pencircle scaled 2
+                withcolor blue;
 fin;
 \end{exemple}
 
+
+\begin{rpobjet}{diagrammepoisson(<lambda>)}{picture}
+Diagramme en bâtons de la loi de Poisson de moyenne \verb|lambda|.
+\end{rpobjet}
+
 \begin{exemple}
 repere(-2,16,0.45cm,-0.1,0.25,15cm);
-setall(0,16,0,0.25);
+setrepere(0,16,0,0.25);
 draw axex(1,1);
 draw axey(0.1,0.1);
 picture diag;
-diampointsbatons:=0;
+batons_diampoints:=0;
 diag:=diagrammepoisson(6);
-draw diag withcolor orange epaisseur 4;
+draw diag withcolor (1,0.5,0)
+              withpen pencircle scaled 4;
 fin;
 \end{exemple}
 
-\begin{codecache}
-prefnomme:="top";
-\end{codecache}
+\begin{rpobjet}{densitenormale(<mu>,<sigma>)()}{path}
+Courbe représentant la densité de la loi normale de moyenne \verb|mu| et d'écart type \verb|sigma|  sur l'intervalle \verb|[Xmin;Xmax]| définissant le repère.
+\end{rpobjet}
 
-\begin{exemple}[0.45]
-repere(-4,32,0.23cm,-0.01,0.12,46cm);
-  draw axex(2,2);
-  draw axey(0.02,0.02);
-  path C,d;
-  C=densitenormale(16,4);
-  fill souscourbe(C,0,14) couleur gris;
-  draw souscourbe(C,0,14);
-  draw C epaisseur 2 couleur rouge;
-  d=droite(16);
-  draw d dashed evenly;
-  drawarrow (5,0.06)--(11,0.02);
-  label.top("$P(X\leq 14)$",(5,0.06));
-  nomme(d,"$\mu$");
+\begin{rpobjet}{densitenormale(<mu>,<sigma>)(<xminf>,<xmaxf>)}{path}
+Courbe représentant la densité de la loi normale de moyenne \verb|mu| et d'écart type \verb|sigma|  sur l'intervalle \verb|[xminf;xmaxf]|.
+\end{rpobjet}
+
+\begin{exemple}[lefthand ratio=0.45]
+repere.larg(-4,32,8cm,-0.01,0.12,6cm);
+draw axex(2,2);
+draw axey(0.02,0.02);
+path C,d;
+C=densitenormale(16,4)();
+fill souscourbe(C,0,14) 
+                      withcolor 0.7white;
+draw souscourbe(C,0,14);
+draw C withpen pencircle scaled 2
+                           withcolor red;
+d=droite(16);
+draw d dashed evenly;
+drawarrow (5,0.06)--(11,0.02);
+label.top("$P(X\leq 14)$",(5,0.06));
+nomme(d,"$\mu$");
 fin;
 \end{exemple}
 
+
+\begin{rpobjet}{densiteexponentielle(lambda)()}{path}
+Courbe représentant la densité de la loi exponentielle de paramètre \verb|lambda| sur l'intervalle \verb|[Xmin;Xmax]| définissant le repère.
+\end{rpobjet}
+
+\begin{rpobjet}{densiteexponentielle(lambda)(<xminf>,<xmaxf>)}{path}
+Courbe représentant la densité de la loi exponentielle de paramètre \verb|lambda|  sur l'intervalle \verb|[xminf;xmaxf]|.
+\end{rpobjet}
+
 \begin{exemple}
 repere.larg(-1,9,8cm,-0.05,0.6,6cm);
-  setall(0,9,0,0.6);
+  setrepere(0,9,0,0.6);
   draw axex(1,1);
   draw axey(0.1,0.1);
   path C,D;
-  C=densiteexponentielle(0.5);
-  D=densiteexponentielle(0.3);
-  draw C epaisseur 2 couleur rouge;
-  draw D epaisseur 2 couleur violet;
+  C=densiteexponentielle(0.5)();
+  D=densiteexponentielle(0.3)();
+  drawoptions(withpen pencircle scaled 2);
+  draw C withcolor red;
+  draw D withcolor (0.3,0,0.6);
 fin;
 \end{exemple}
 
-
 \section{Géométrie}
-Certaines des macros suivantes sont largement inspirées des macros de \verb|geometriesyr16.mp| de Christophe \bsc{Poulain}.
+Certaines des macros suivantes sont inspirées des macros de \verb|geometriesyr16.mp| de Christophe \bsc{Poulain} disponible \href{https://melusine.eu.org/syracuse/poulecl/geometriesyr16/}{ici}.
 
-\subsection{Polygones}
-\begin{description}
-\item[polygone(A,B,C,...)] Chemin fermé représentant le polygone $ABC...$
+\subsection{Codage des segments et des angles}
 
-\item[triangle(A,B,C)] Cas particulier du précédent. Chemin fermé représentant le triangle $ABC$.
+\subsubsection*{Segments}
 
-\item[parallélogramme(A,B,C)] Chemin fermé représentant $ABCD$ où $D$ est le quatrième point du parallélogramme.
+\begin{rpobjet}{marquesegment(<A>,<B>)}{picture}
+Figure formée d'une marque sur le segment $[AB]$. Des paramètres permettent de contrôler la forme et la taille de la marque.
+\end{rpobjet}
 
-\item[polygoneregulier(A,B,n)] Chemin fermé représentant le polygone régulier de sens direct à $n$ côtés dont un des côtés est $[AB]$.
+\begin{rpobjet}{marquesegment(<A>,<B>,<C>,<D>...)}{picture}
+Plusieurs segments peuvent être marqués simultanément.
+\end{rpobjet}
 
-\item[equilateral(A,B)] Cas particulier du précédent. Triangle équilatéral de sens direct de côté $[AB]$.
+\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|.
+\end{rpobjet}
 
-\item[carre(A,B)] Autre cas particulier. Carré de sens direct de côté $[AB]$.
-
-\item[sommetpolygoneregulier(A,B,n,i)] Sommet numéro $i$ du polygone régulier à $n$ côtés dont un des côtés est $[AB]$. $A$ est le sommet numéro 1 et $B$ est le sommet numéro 2.
-\end{description}
-
-\begin{exemple}[0.51]
-repere(-1,5,1cm,-1,4,1cm);
-draw axes(1,1);
-pair A,B,C,D,E,F,G;
-A=(0,1);B=(2,0);C=(4,2);D=(3,3);E=(1,3);
-F=(4,0);G=(3,2);
-fill triangle(A,F,G) withcolor orange;
-draw triangle(A,F,G);
-draw polygone(A,B,C,D,E);
-draw parallelogramme(D,G,E) withcolor vert;
+\begin{exemple}
+repere();
+pair A,B,C;
+A=(1,2);B=(3,1);C=(5,4);
+nomme.lft(A);nomme.urt(C);
+nomme.bot(B);
+draw triangle(A,B,C) withcolor blue;
+draw marquesegment(A,B,B,C);
+draw marquesegment(A,C,2);
 fin;
 \end{exemple}
 
+\begin{rpobjet}{marquesegment(<A>,<B>,<formemarque>)}{picture}
+Figure formée d'une marque sur le segment $[AB]$. Le paramètre \verb|formemarque| indique la forme du dessin de la marque. Il peut aussi être donné de manière globale.
+\end{rpobjet}
 
-\begin{exemple}[0.53]
-repere(-1,5,1cm,-1,4,1cm);
-draw axes(1,1);
-pair A,B,M;
-A=(1,1);B=(3,0.5);
-fill polygoneregulier(A,B,5) withcolor bleu;
-fill equilateral(A,B) withcolor cyan;
-draw polygoneregulier(A,B,5);
-M=sommetpolygoneregulier(A,B,5,3);
-nomme.rt(M);
-draw equilateral(A,B);
+
+\begin{rpparam}
+forme_marque_s & string & "/" & Chaine de caractères permettant de choisir la forme et le nombre de marques. Les valeurs possibles sont : \verb|"/"| (ou \verb|"//"|, ou \verb|"///"|...), \verb|"x"| (ou \verb|"xx"|...), \verb|"o"|, \verb|"s"|.\\
+echelle_marque_s & numeric & 1 & Facteur permettant de contrôler la taille des marques.\\
+angle_marque_s & numeric & 60 & Angle de la marque par rapport au segment dans les cas \verb|"/"| et \verb|"s"|.\\
+sep_marque_s & numeric & 2 & Écart entre les marques dans le cas où il y en a plusieurs.
+\end{rpparam}
+
+\begin{exemple}[lefthand ratio=0.6]
+repere();
+pair A[],B[];
+for i=1 upto 5:
+  A[i]:=(0,-i);B[i]:=(3,-i);
+  draw A[i]--B[i];  nomme.lft(A[i]);nomme.rt(B[i]);
+endfor
+draw marquesegment(A[1],B[1],"o");
+draw marquesegment(A[2],B[2],"ss");
+draw marquesegment(A[3],B[3],"/",3);
+sep_marque_s:=6;
+draw marquesegment(A[4],B[4],"xxx");
+angle_marque_s:=90;echelle_marque_s:=2;
+draw marquesegment(A[5],B[5],"/");
 fin;
 \end{exemple}
 
-\subsection{Cercles et arcs}
+\subsubsection*{Angles}
 
-\begin{description}
-\item[cercle(A,B,C)] Cercle circonscrit au triangle $ABC$.
-\item[cercle(O,A)] Cercle de centre $O$ passant par $A$.
-\item[cercle(O,r)] Cercle de centre $O$ et de rayon $r$. L'unité de longueur est l'unité de l'axe des abscisses.
-\item[arccercle(A,O,B)] Arc de cercle de sens direct de centre $O$, passant par $A$ et s'appuyant sur la demi-droite $[OB)$.
-\end{description}
+\begin{rpobjet}{marqueangle(<A>,<O>,<B>,<n>)}{(closed) path}
+Chemin formé de \verb|n| arcs de cercle de centre $O$  permettant de marquer l'angle géométrique $\widehat{AOB}$.
+Il s'agit d'un chemin fermé qui peut donc être rempli.
+\end{rpobjet}
 
+\begin{rpobjet}{marqueangle(<A>,<O>,<B>)}{path}
+Arc de cercle de centre \verb|O| permettant de marquer l'angle $\widehat{AOB}$. On peut utiliser \verb|drawarrow| pour marquer un angle orienté..
+\end{rpobjet}
 
 \begin{exemple}
-repere(-1,5,1cm,-0.5,4,1cm);
-draw axes(1,1);
+repere();
 pair A,B,C;
-A=(1,1);B=(2,0);C=(3.5,2);
-nomme.lft(A);nomme.urt(C);nomme.top(B);
-draw triangle(A,B,C) withcolor bleu;
-draw cercle(A,B,C) withcolor marine;
-draw A--B withcolor rouge epaisseur 1;
-draw cercle(A,B) withcolor rouge;
+A=(0,0);B=(4,0);C=(3,2.5);
+draw A--B--C--cycle;
+nomme.llft(A);nomme.lrt(B);nomme.top(C);
+fill marqueangle(C,B,A,3) withcolor red;
+draw marqueangle(C,B,A,3);
+drawarrow marqueangle(A,C,B);
+fill marqueangle(B,A,C,1) withcolor green;
+draw marqueangle(B,A,C,1);
 fin;
 \end{exemple}
 
 
-\begin{exemple}
-repere(-1,5,1cm,-2,8,0.5cm);
-draw axes(1,1);
-pair A,M,B;
-A=(2,2);M=(2,6);B=(3,2);
-nomme.bot(A);nomme.rt(B);nomme.top(M);
-draw B--A--M;
-draw cercle(A,2);
-draw arccercle(B,A,M);
+
+\begin{rpobjet}{marqueangledroit(<A>,<O>,<B>)}{(closed) path}
+Chemin fermé permettant de marquer l'angle droit $\widehat{AOB}$ sous forme d'un losange (il s'agit donc d'un carré si l'angle est réellement droit).
+\end{rpobjet}
+
+\begin{exemple}[lefthand ratio=0.55]
+repere();
+pair A,B,C,D;
+A=(0,0);B=(4,0);C=(0,2.5);D=(5,1.5);
+draw C--A--B--D;
+nomme.llft(A);nomme.lrt(B);
+nomme.top(C);nomme.urt(D);
+fill marqueangledroit(B,A,C) withcolor blue;
+draw marqueangledroit(B,A,C);
+draw marqueangledroit(D,B,A);
 fin;
 \end{exemple}
 
+\begin{rpparam}
+echelle_marque_ad & numeric & 1 & Facteur permettant de contrôler la taille des marques des angles droits.\\
+\end{rpparam}
 
 
-\subsection{Codage des segments et des angles}
 
-\begin{description}
-\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.
+\begin{rplabel}{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)$.
+\end{rplabel}
 
-\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|.
+\begin{rplabel}{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{rplabel}
 
-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 à 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.
-
-\item[marqueangledroit(A,O,B)] Chemin fermé permettant de marquer l'angle droit $\widehat{AOB}$ sous forme d'un losange (il s'agit donc d'un carré si l'angle est réellement droit). Le côté du losange est \verb|taille_marque_ad| et vaut \verb|0.3cm| par défaut.
-\item[marquesegment(A,B,n)] Figure formées de \verb|n| marques sur le segment $[AB]$. Ces marques ont une taille de \verb|taille_marque_s| (\verb|0.3cm| par défaut), forment un angle en degrés de \verb|angle_marque_s| avec le segment (\verb|60| par défaut) et sont séparées de \verb|sep_marque_s| (\verb|2| par défaut).
-\item[marquesegment(A,B,C,D,...,n)] Permet de marquer plusieurs segments simultanément.
-\end{description}
-
 \begin{exemple}
-repere(-2,12,0.4cm,-2,10,0.4cm);
+repere();
 pair A,B,C;
-A=(1,2);B=(11,2);C=(8,9);
-draw axes(0,0);
-draw triangle(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);
 fill marqueangle(C,B,A,3) withcolor red;
 draw marqueangle(C,B,A,3);
-drawarrow marqueangle(A,C,B);
-fill marqueangle(B,A,C,1) withcolor vert;
+fill marqueangle(B,A,C,1) withcolor green;
 draw marqueangle(B,A,C,1);
-nomme[20](B,A,C,"\ang{45}");
+nomme[15](B,A,C,"\ang{45}");
 nomme(C,B,A,"$\alpha$");
 fin;
 \end{exemple}
 
 
-\begin{exemple}[0.6]
-repere(-1,10,0.5cm,-1,9,0.5cm);
-pair A,B,C,A',B',C',u;
-A=(3,1);B=(5,2);C=(1,5);u=(3,3);
-A'-A=B'-B=C'-C=u;
-draw axes(0,0);
-drawoptions(withcolor pourpre);
-draw triangle(A,B,C);draw triangle(A',B',C');
-nomme.llft(A);nomme.lrt(B);nomme.ulft(C);
-nomme.llft(A');nomme.lrt(B');nomme.ulft(C');
-draw marqueangledroit(B,A,C);
-draw marqueangledroit(B',A',C');
-draw marquesegment(B,C,2);
-draw marquesegment(B',C',2);
-draw marquesegment(A,C,A',C',1);
-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.
+\begin{rplabel}{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.
+\end{rplabel}
 
-\item[cote.top(A,B,texte)] Même chose mais le texte est placé au-dessus du segment.
+\begin{rplabel}{cote.top(<A>,<B>,<texte>)}
+Même chose mais le texte est placé au-dessus du segment.
+\end{rplabel}
 
-\item[angle\_cote] Variable numérique qui fixe l'angle de rotation de l'étiquette. La valeur par défaut de $-1$ indique que l'étiquette est tournée en fonction de l'angle du segment.
-\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}
+\begin{exemple}[lefthand ratio=0.51]
 repere(0,6,1cm,0,6,1cm);
 pair A,B,C;
 A=(1,1);B=(2,5);C=(5,2);
@@ -1735,317 +2182,492 @@
 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(B,C,"de $B$ vers $C$") withcolor red;
+cote(C,B,"de $C$ vers $B$") withcolor blue;
 cote.top(A,B,"au-dessus");
 fin;
 \end{exemple}
 
+\begin{rplabel}{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.
+\end{rplabel}
 
+\begin{rplabel}{cotefleche.top(<A>,<B>,<texte>)}
+Même chose mais la double flèche et le texte sont placés au-dessus du segment.
+\end{rplabel}
 
-\begin{exemple}
+\begin{exemple}[lefthand ratio=0.52]
 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);
-angle_cote:=90;
-cote.top(A,B,"10");
-angle_cote:=0;
-cote(A,C,"5");
-angle_cote:=-1;
-cote(B,C,"de $B$ vers $C$") couleur rouge;
+cotefleche(A,C,"\SI{5}{cm}");
+cotefleche.top(A,B,"Texte") withcolor red;
 fin;
 \end{exemple}
 
+\begin{rpparam}
+angle_cote & numeric & -1 & Variable numérique qui fixe l'angle de rotation de l'étiquette. La valeur par défaut de $-1$ indique que l'étiquette est tournée en fonction de l'angle du segment.\\
+dec_cote & numeric & 4mm & Variable numérique qui indique le décalage entre le segment et la double flèche.\\
+traits_cote & boolean & false & Variable booléenne qui indique si des traits délimitant la double flèche doivent être tracés.
+\end{rpparam}
 
-\begin{exemple}
+
+
+
+\begin{exemple}[lefthand ratio=0.52]
 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;
+angle_cote:=90;
+cote.top(A,B,"10");
+angle_cote:=0;
+cote(A,C,"5");
+angle_cote:=-1;
 traits_cote:=true;
-dec_cote:=8mm;
+dec_cote:=0.8cm;
 cotefleche.top(B,C,"Avec traits");
 fin;
 \end{exemple}
 
-\subsection{Figures complètes}
-Par rapport aux polygones décrits précédemment, les macros qui suivent diffèrent dans le sens où ce ne sont pas des chemins (paths) mais des figures « complètes ».
+\subsection{Polygones}
 
-D'une part, les points sont définis (selon les données passées par l'utilisateur) puis la figure est tracée avec noms et légendes. Des macros pour ne faire que la définition des points ou que le tracé quand les points sont déjà définis sont décrites plus loin.
 
-Pour les distinguer, leur nom commence par une majuscule.
+\begin{rpobjet}{polygone(<A>,<B>,<C>,...)}{(closed) path}
+Chemin fermé représentant le polygone $ABC...$
+\end{rpobjet}
 
-\subsubsection*{Figures}
+\begin{rpobjet}{triangle(<A>,<B>,<C>)}{(closed) path}
+ Cas particulier du précédent. Chemin fermé représentant le triangle $ABC$.
+\end{rpobjet}
 
-\begin{description}
-\item[Segment(A,B)(longueur,ptdepart,angle)(légende)] Figure formée du segment $[AB]$, des noms des points et de la cote.
+\begin{rpobjet}{parallelogramme(<A>,<B>,<C>)}{(closed) path}
+ Chemin fermé représentant $ABCD$ où $D$ est le quatrième point du parallélogramme.
+\end{rpobjet}
 
-Les points doivent être déclarés mais s'ils n'existent pas, il sont définis de sorte que le segment mesure \verb|longueur|, démarre à \verb|ptdepart| et fasse l'angle \verb|angle| avec l'horizontale. \verb|ptdepart| vaut \verb|(0,0)| par défaut et \verb|angle| vaut \verb|0|.
+\begin{exemple}[lefthand ratio=0.53]
+repere(-1,5,1cm,-1,4,1cm);
+draw axes(1,1);
+pair A,B,C,D,E,F,G;
+A=(0,1);B=(2,0);C=(4,2);D=(3,3);E=(1,3);
+F=(4,0);G=(3,2);
+fill triangle(A,F,G) withcolor (1,0.5,0);
+draw triangle(A,F,G);
+draw polygone(A,B,C,D,E);
+draw parallelogramme(D,G,E) withcolor green;
+fin;
+\end{exemple}
 
-Les noms des points et la cote peuvent être éventuellement modifiés dans \verb|légende|.
 
-\item[Vecteur(u,A,B)(longueur,ptdepart,angle)(légende)] Figure formée du représentant du vecteur $\vect{u}$ d'origine $A$, des noms des points et du vecteur.
+\begin{rpobjet}{polygoneregulier(<A>,<B>,<n>)}{(closed) path}
+Chemin fermé représentant le polygone régulier de sens direct à $n$ côtés dont un des côtés est $[AB]$.
+\end{rpobjet}
 
-Les points et le vecteur doivent être déclarés mais s'ils n'existent pas, il sont définis de sorte que le vecteur ait une norme de \verb|longueur|, pour origine \verb|ptdepart| et fasse l'angle \verb|angle| avec l'horizontale. \verb|ptdepart| vaut \verb|(0,0)| par défaut et \verb|angle| vaut \verb|0|.
+\begin{rpobjet}{equilateral(<A>,<B>)}{(closed) path}
+Cas particulier du précédent. Triangle équilatéral de sens direct de côté $[AB]$.
+\end{rpobjet}
 
-Les noms des points et du vecteur peuvent être éventuellement modifiés dans \verb|légende|.
+\begin{rpobjet}{carre(<A>,<B>)}{(closed) path}
+Autre cas particulier. Carré de sens direct de côté $[AB]$.
+\end{rpobjet}
 
+\begin{rpobjet}{sommetpolygoneregulier(<A>,<B>,<n>,<i>)}{pair}
+ Sommet numéro $i$ du polygone régulier à $n$ côtés dont un des côtés est $[AB]$. $A$ est le sommet numéro 1 et $B$ est le sommet numéro 2.
+\end{rpobjet}
 
-\item[TriangleLLL(A,B,C)(longAB,longAC,longBC,ptdepart,angle)(points)(cotes)(angles)] Figure formée du triangle $ABC$, donné par trois longueurs, et des noms des points, cotes et angles. \verb|ptdepart| vaut \verb|(0,0)| par défaut et \verb|angle| vaut \verb|0|.
+\begin{exemple}[lefthand ratio=0.55]
+repere(-1,5,1cm,-1,4,1cm);
+draw axes(1,1);
+pair A,B,M;
+A=(1,1);B=(3,0.5);
+fill polygoneregulier(A,B,5) withcolor blue;
+fill equilateral(A,B) withcolor (0,1,1);
+draw polygoneregulier(A,B,5);
+M=sommetpolygoneregulier(A,B,5,3);
+nomme.rt(M);
+draw equilateral(A,B);
+fin;
+\end{exemple}
 
-Les étiquettes sont composées automatiquement mais peuvent être modifiées en passant des valeurs à \verb|(points)|, \verb|(cotes)| ou \verb|(angles)|.
+\subsection{Cercles et arcs}
 
-\item[TriangleLLA(A,B,C)(longAB,longAC,angleA,ptdepart,angle)(points)(cotes)(angles)] Figure formée du triangle $ABC$, donné par deux longueurs et un angle, et des noms des points, cotes et angles. \verb|ptdepart| vaut \verb|(0,0)| par défaut et \verb|angle| vaut \verb|0|.
+\begin{rpobjet}{cercle(<A>,<B>,<C>)}{(closed) path}
+Cercle circonscrit au triangle $ABC$.
+\end{rpobjet}
 
-Les étiquettes sont composées automatiquement mais peuvent être modifiées en passant des valeurs à \verb|(points)|, \verb|(cotes)| ou \verb|(angles)|.
+\begin{rpobjet}{cercle(<O>,<A>)}{(closed) path}
+Cercle de centre $O$ passant par $A$.
+\end{rpobjet}
 
-\item[TriangleLAA(A,B,C)(longAB,angleA,angleB,ptdepart,angle)(points)(cotes)(angles)] Figure formée du triangle $ABC$, donné par une longueur et deux angles, et des noms des points, cotes et angles. \verb|ptdepart| vaut \verb|(0,0)| par défaut et \verb|angle| vaut \verb|0|.
+\begin{exemple}
+repere(-1,5,1cm,-0.5,4,1cm);
+draw axes(1,1);
+pair A,B,C;
+A=(1,1);B=(2,0);C=(3.5,2);
+nomme.lft(A);nomme.urt(C);nomme.top(B);
+drawoptions(withpen pencircle scaled 1);
+draw triangle(A,B,C) withcolor blue;
+draw cercle(A,B,C) withcolor 0.5blue;
+draw A--B withcolor red;
+draw cercle(A,B) withcolor red;
+fin;
+\end{exemple}
 
-Les étiquettes sont composées automatiquement mais peuvent être modifiées en passant des valeurs à \verb|(points)|, \verb|(cotes)| ou \verb|(angles)|.
-\end{description}
+\begin{rpobjet}{cercle(<O>,<r>)}{(closed) path}
+Cercle de centre $O$ et de rayon $r$. L'unité de longueur est l'unité de l'axe des abscisses.
+\end{rpobjet}
 
+\begin{rpobjet}{arccercle(<A>,<O>,<B>)}{path}
+Arc de cercle de sens direct de centre $O$, passant par $A$ et s'appuyant sur la demi-droite $[OB)$.
+\end{rpobjet}
 
 \begin{exemple}
-repere(-1,6,1cm,-1,6,1cm);
-pair A,B,C,D,E,F;
-draw quadrillage(1,1);
-draw Segment(A,B)(4,(1,5),-20)();
-draw Segment(C,D)(2.52,10)("$x$")
-                               couleur bleu;
-E:=(1,2);
-draw Segment(E,F)(3)("$l$","$M$","$N$")
-                              couleur rouge;
+repere(-1,5,1cm,-2,8,0.5cm);
+draw axes(1,1);
+pair A,M,B;
+A=(2,2);M=(2,6);B=(3,2);
+nomme.bot(A);nomme.rt(B);nomme.top(M);
+draw B--A--M;
+draw cercle(A,2);
+draw arccercle(B,A,M);
 fin;
 \end{exemple}
 
 
-\begin{exemple}[0.53]
-repere(-1,6,1cm,-1,6,1cm);
-pair A,B,C,D,E,F,u,v,w;
-draw quadrillage(1,1);
-draw Vecteur(v,B,C)(3,(1,4),10)();
-A:=(0,1);u:=(3,-1);
-draw Vecteur(u,A)()() couleur rouge
-                                  dashed evenly;
-D:=(1,2);
-draw Vecteur(w,D)(4)("$\vv{MN}$","$M$","$N$")
-                                   couleur bleu;
+
+
+\subsection{Figures complètes}
+\label{figcomp}
+
+Les figures « complètes » sont des figures composées d'un chemin, du nom des points et éventuellement des cotes et angles. Pour les distinguer des chemins, leur nom commence par une capitale.
+
+
+\begin{rpobjet}{Segment(<A>,<B>)(<points>)(<cote>)}{picture}
+Figure formée du segment $[AB]$ et des noms des points, et éventuellement des cotes.
+Les étiquettes sont composées automatiquement mais peuvent être modifiées en passant des valeurs à \verb|(points)| ou \verb|(cote)|.
+\end{rpobjet}
+
+\begin{exemple}
+repere();
+pair A,B,C;
+A=(0,0);B=(2,-1);C=(4,2);
+drawoptions(withpen pencircle scaled 1);
+draw Segment(A,B)()();
+draw Segment(C,B)("$E$","")("$\ell$");
 fin;
 \end{exemple}
 
+\begin{rpobjet}{Triangle(<A>,<B>,<C>)(<points>)(<cotes>)(<angles>)}{picture}
+Figure formée du triangle $ABC$ et des noms des points, et éventuellement des cotes et angles.
+Les étiquettes sont composées automatiquement mais peuvent être modifiées en passant des valeurs à \verb|(points)|, \verb|(cotes)| ou \verb|(angles)|.
+\end{rpobjet}
 
+
 \begin{exemple}
-repere(-1,6,1cm,-5,6,1cm);
-pair A,B,C,D,E,F,G,H,I;
+repere();
+pair D,E,F;
+D:=(0,0);E:=(4,1);F:=(2,3);
+draw Triangle(D,E,F)()()();
+fin;
+\end{exemple}
+
+
+\begin{exemple}
+repere();
+pair D,E,F;
+D:=(0,0);E:=(4,1);F:=(2,3);
 angle_cote:=0;
-draw quadrillage(1,1);
-draw TriangleLLL(A,B,C)(4,3,2,(0,4))()()()
-                                 couleur bleu;
-draw TriangleLLA(D,E,F)(4,3,45)
-      ()()("$\alpha$","$\beta$","$\gamma$")
-                                couleur rouge;
-G:=(0,-4);
-draw TriangleLAA(G,H,I)(4,60,40,10)
-               ("$O$")("$a$","$b$","$c$")();
+draw Triangle(D,E,F)("$A$","$B$","$C$")
+                       ("$a$","$b$","$c$")
+       ("$\alpha$","$\beta$","$\gamma$");
 fin;
 \end{exemple}
 
 
-\subsubsection*{Paramètres}
-\begin{description}
-\item[AffPoints] Booléen qui indique si les noms des points doivent être affichés. La valeur par défaut est \verb|true|. Les noms sont affichés quelle que soit la valeur de \verb|AffPoints| si le nom est donné explicitement.
+\begin{rpparam}
+AffPoints & boolean & true & Booléen qui indique si les noms des points doivent être affichés. Les noms sont affichés quelle que soit la valeur de \verb|AffPoints| si le nom est donné explicitement.\\
+AffCotes & boolean & false & Booléen qui indique si la cote des segment doit être affichée. La cote est affichée quelle que soit la valeur de \verb|AffCotes| si une cote est donnée explicitement.\\
+UnitCotes & string & "" & Chaine de caractère qui indique l'unité à rajouter à la cote lorsqu'elle est composée automatiquement.\\
+ArrondiCotes & numeric & 2 & Valeur entière qui indique à quelle décimale la cote doit être arrondie lorsqu'elle est affichée automatiquement.\\
+AffAngles & boolean & false & Booléen qui indique si les angles doivent être marqués et leur nom affiché. Les noms sont affichés quelle que soit la valeur de \verb|AffAngles| si le nom est donné explicitement.\\
+ArrondiAngles & numeric & 1 & Valeur entière qui indique à quelle décimale l'angle doit être arrondi lorsqu'il est affiché automatiquement.\\
+EchelleAngles & numeric & 0.8 & Valeur numérique indiquant le facteur d'échelle de l'affichage des angles.\\
+AutoAngleDroit & boolean & false &  Booléen qui indique si les angles droits doivent être marqués comme tels.
+\end{rpparam}
 
-\item[AffCotes] Booléen qui indique si la cote des segment doit être affichée. La valeur par défaut est \verb|true|. La cote est affichée quelle que soit la valeur de \verb|AffCotes| si une cote est donnée explicitement.
+\begin{exemple}
+repere();
+pair A,B,C;
+A=(0,0);B=(2,-1);C=(4,2);
+drawoptions(withpen pencircle scaled 1);
+AffCotes:=true;
+ArrondiCotes:=1;UnitCotes:="cm";
+draw Segment(A,B)()();
+angle_cote:=0;
+draw Segment(C,B)("$E$","")("$\ell$");
+fin;
+\end{exemple}
 
-\item[UnitCotes] Chaine de caractère qui indique l'unité à rajouter à la cote lorsqu'elle est composée automatiquement. La valeur par défaut est la chaine vide.
+ Pour les points, cotes ou angles, la chaine \verb|"~"| permet de laisser les valeurs calculées tout en passant d'autres valeurs à l'affichage.
+ 
+\begin{exemple}
+repere(-1,6,1cm,-4,6,1cm);
+pair A,B,C,D,E,F,G,H,I;
+A=(0,3);B=(4,3);C=(3,5);
+D=(0,0);E=(5,0);F=(2,2);
+G=(0,-3);H=(5,-3);I=(1,-1);
+draw quadrillage(1,1);
+angle_cote:=0;AffCotes:=true;
+draw Triangle(A,B,C)()()() withcolor blue;
+AffAngles:=true;angle_cote:=-1;
+ArrondiCotes:=1;UnitCotes:="cm";
+draw Triangle(D,E,F)()()() withcolor red;
+EchelleAngles:=0.6;AutoAngleDroit:=true;
+ArrondiAngles:=2;angle_cote:=0;
+draw Triangle(G,H,I)
+             ("$O$")("$a$","~","$c$")();
+fin;
+\end{exemple}
 
-\item[ArrondiCotes] Valeur entière qui indique à quelle décimale la cote doit être arrondie lorsqu'elle est affichée automatiquement.
 
-\item[AffVect] Booléen qui indique si le nom du vecteur doit être affiché. La valeur par défaut est \verb|true|. Le nom sont affiché quelle que soit la valeur de \verb|AffVect| s'il est donné explicitement.
+\subsection{Figures définies à l'aide de propriétés géométriques}
 
-\item[AffAngles] Booléen qui indique si les angles doivent être marqués et leur nom affiché. La valeur par défaut est \verb|false|. Les noms sont affichés quelle que soit la valeur de \verb|AffAngles| si le nom est donné explicitement.
-\item[ArrondiAngles] Valeur entière qui indique à quelle décimale l'angle doit être arrondi lorsqu'il est affiché automatiquement.
-\item[EchelleAngles] Valeur numérique indiquant le facteur d'échelle de l'affichage des angles. La valeur par défaut est \verb|0.8|.
-\item[AutoAngleDroit] Booléen qui indique si les angles droits doivent être marqués comme tels. La valeur par défaut est \verb|false|.
+\subsubsection*{Segments}
 
-\item[AffDonnees] Booléen qui permet de n'afficher que les valeurs des côtés et des angles correspondant aux données. La valeur par défaut est \verb|false|.
-\end{description}
+\begin{rpdeclaration}{defSegmentL(<A>,<B>)(<long>,<ptdep>,<angle>)}
+Définit les points $A$ et $B$ de telle sorte que le segment $[AB]$ mesure \verb|long|, commence à \verb|ptdep| et fasse un angle \verb|angle| avec l'horizontale. Les valeurs \verb|ptdep| et \verb|angle| peuvent être omises, les valeurs par défaut sont respectivement \verb|(0,0)| et \verb|0|.
 
+Il n'est pas nécessaire de déclarer les points $A$ et $B$. S'ils existent déjà, leur valeur n'est pas modifiée.
+\end{rpdeclaration}
 
 \begin{exemple}
-repere(-1,6,1cm,-1,6,1cm);
-pair A,B,C,D,E,F;
+repere(0,5,1cm,0,5,1cm);
 draw quadrillage(1,1);
-UnitCotes:="cm";
-draw Segment(A,B)(4,(1,5),-20)();
-AffPoints:=false;
-ArrondiCotes:=1;
-draw Segment(C,D)(2.52,10)() couleur bleu;
-E:=(1,2);
-draw Segment(E,F)(3)("$l$","$M$","$N$")
-                               couleur rouge;
+defSegmentL(A,B)(3,(1,1),70);
+defSegmentL(B,C)(2);
+draw A--B--C;
+nomme.llft(A);nomme.ulft(B);
+nomme.rt(C);
 fin;
 \end{exemple}
-\begin{codecache}
-ArrondiCotes:=2;
-AffPoints:=true;
-UnitCotes:="";
-\end{codecache}
 
+\begin{rpobjet}{segmentL(<A>,<B>)(<long>,<ptdep>,<angle>)}{path}
+Définit les points $A$ et $B$ comme précédemment et renvoie la ligne \verb|A--B|.
+\end{rpobjet}
 
-\begin{exemple}[0.53]
-repere(-1,6,1cm,-1,6,1cm);
-pair A,B,C,D,u,v,w;
+\begin{exemple}
+repere(0,5,1cm,0,3,1cm);
 draw quadrillage(1,1);
-AffVect:=false;
-draw Vecteur(v,B,C)(3,(1,4),10)();
-A:=(0,1);u:=(3,-1);
-AffVect:=true;
-AffPoints:=false;
-draw Vecteur(u,A)()() couleur rouge
-                                  dashed evenly;
-D:=(1,2);
-draw Vecteur(w,D)(4)("$\vv{MN}$","$M$","$N$")
-                                   couleur bleu;
+draw segmentL(A,B)(3,(1,1),30);
+nomme.llft(A);nomme.urt(B);
 fin;
 \end{exemple}
 
-\begin{codecache}
-AffPoints:=true;
-\end{codecache}
 
+\begin{rpobjet}{SegmentL(<A>,<B>)(<long>,<ptdep>,<angle>)(<points>)(<cote>)}{picture}
+Définit les points $A$ et $B$ comme précédemment et renvoie le segment complet (voir \ref{figcomp}).
+\end{rpobjet}
+
 \begin{exemple}
-repere(-1,6,1cm,-5,6,1cm);
-pair A,B,C,D,E,F,G,H,I;
+repere(0,5,1cm,0,3,1cm);
 draw quadrillage(1,1);
-angle_cote:=0;
-AffAngles:=true;
-draw TriangleLLL(A,B,C)(4,3,2,(0,4))()()()
-                                couleur bleu;
-ArrondiAngles:=2;
-EchelleAngles:=0.6;
-draw TriangleLLA(D,E,F)(4,3,45)()()()
-                               couleur rouge;
-G:=(0,-4);
-EchelleAngles:=0.8;
-AutoAngleDroit:=true;
-draw TriangleLAA(G,H,I)(5,60,30,10)
-             ("$O$")("$a$","$b$","$c$")();
+AffCotes:=true;
+draw SegmentL(A,B)(3,(1,1),30)()();
 fin;
 \end{exemple}
 
-\begin{codecache}
-AutoAngleDroit:=false;
-ArrondiAngles:=1;
-AffAngles:=false;
-\end{codecache}
 
+\subsubsection*{Triangles}
+
+\begin{rpdeclaration}{defTriangleLLL(<A>,<B>,<C>)(<longAB>,<longAC>,<longBC>,<ptdepart>,<angle>)}
+Définit les points $A$, $B$ et $C$ de telle sorte que $AB=\verb|longAB|$, $AC=\verb|longAC|$, $BC=\verb|longBC|$, \verb|A=ptdepart| et l'angle entre $[AB]$ et l'horizontale vaut \verb|angle|.
+
+Les valeurs \verb|ptdep| et \verb|angle| peuvent être omises, leurs valeurs par défaut sont respectivement \verb|(0,0)| et \verb|0|.
+
+Il n'est pas nécessaire de déclarer les points $A$, $B$ et $C$. Si certains de ces points existent déjà, leur valeur n'est pas modifiée, les autres valeurs sont calculées au mieux.
+\end{rpdeclaration}
+
+
 \begin{exemple}
-repere(-1,6,1cm,-5,6,1cm);
-pair A,B,C,D,E,F,G,H,I;
-angle_cote:=0;
-AffDonnees:=true;
+repere(-1,5,1cm,-1,3,1cm);
 draw quadrillage(1,1);
-draw TriangleLLL(A,B,C)(4,3,2,(0,4))()()()
-                                 couleur bleu;
-draw TriangleLLA(D,E,F)(4,3,45)
-      ()()("$\alpha$","$\beta$","$\gamma$")
-                                couleur rouge;
-G:=(0,-4);
-draw TriangleLAA(G,H,I)(4,60,40,10)
-               ("$O$")("$a$","$b$","$c$")();
+defTriangleLLL(A,B,C)(4,3,2,10);
+AffCotes:=true;
+draw Triangle(A,B,C)()()();
 fin;
 \end{exemple}
-\begin{codecache}
-AffDonnees:=false;
-\end{codecache}
 
-\subsubsection*{Définitions seules}
+\begin{rpdeclaration}{defTriangleLLA(<A>,<B>,<C>)(<longAB>,<longAC>,<angleA>,<ptdepart>,<angle>)}
+Définit les points $A$, $B$ et $C$ de telle sorte que $AB=\verb|longAB|$, $AC=\verb|longAC|$, $\widehat{BAC}=\verb|angleA|$, \verb|A=ptdepart| et l'angle entre $[AB]$ et l'horizontale vaut \verb|angle|.
 
-\begin{description}
-\item[defSegment(A,B)(longueur,ptdepart,angle)] Macro permettant de définir les points $A$ et $B$ sans dessiner le segment.
+Les valeurs \verb|ptdep| et \verb|angle| peuvent être omises, leurs valeurs par défaut sont respectivement \verb|(0,0)| et \verb|0|.
 
-\item[defVecteur(u,A,B)(longueur,ptdepart,angle)] Macro permettant de définir les points $A$ et $B$ et le vecteur $\vect{u}$ sans les dessiner.
+Il n'est pas nécessaire de déclarer les points $A$, $B$ et $C$. Si certains de ces points existent déjà, leur valeur n'est pas modifiée, les autres valeurs sont calculées au mieux.
+\end{rpdeclaration}
 
-\item[defTriangleLLL(A,B,C)(longAB,longAC,longBC,ptdepart,angle)] Macro permettant de définir les points $A$, $B$ et $C$ sans dessiner le triangle.
+\begin{exemple}
+repere(-1,5,1cm,-1,3,1cm);
+draw quadrillage(1,1);
+defTriangleLLA(A,B,C)(4,3,40);
+AffCotes:=true;AffAngles:=true;
+draw Triangle(A,B,C)()("")("~");
+fin;
+\end{exemple}
 
-\item[defTriangleLLA(A,B,C)(longAB,longAC,angleA,ptdepart,angle)]  Macro permettant de définir les points $A$, $B$ et $C$ sans dessiner le triangle.
 
-\item[defTriangleLAA(A,B,C)(longAB,angleA,angleB,ptdepart,angle)]  Macro permettant de définir les points $A$, $B$ et $C$ sans dessiner le triangle.
-\end{description}
+\begin{rpdeclaration}{defTriangleLAA(<A>,<B>,<C>)(<longAB>,<angleA>,<angleB>,<ptdepart>,<angle>)}
+Définit les points $A$, $B$ et $C$ de telle sorte que $AB=\verb|longAB|$,  $\widehat{BAC}=\verb|angleA|$, $\widehat{CBA}=\verb|angleB|$, \verb|A=ptdepart| et l'angle entre $[AB]$ et l'horizontale vaut \verb|angle|.
 
+Les valeurs \verb|ptdep| et \verb|angle| peuvent être omises, leurs valeurs par défaut sont respectivement \verb|(0,0)| et \verb|0|.
 
+Il n'est pas nécessaire de déclarer les points $A$, $B$ et $C$. Si certains de ces points existent déjà, leur valeur n'est pas modifiée, les autres valeurs sont calculées au mieux.
+\end{rpdeclaration}
+
 \begin{exemple}
-repere(0,6,1cm,0,6,1cm);
-pair A,B,C,D,E,F;
+repere(-1,5,1cm,-1,3,1cm);
 draw quadrillage(1,1);
-A:=(1,1);
-defSegment(A,B)(4,70);
-defSegment(B,C)(3);
-draw A--B--C;
-nomme.llft(A);nomme.ulft(B);
-nomme.rt(C);
+defTriangleLAA(A,B,C)(4,40,60);
+AffCotes:=true;AffAngles:=true;
+draw Triangle(A,B,C)()("","")("~","~");
 fin;
 \end{exemple}
 
+
+\begin{rpobjet}{triangleLLL(<A>,<B>,<C>)(<def>)}{(closed) path}
+Définit les points $A$, $B$ et $C$ comme précédemment et renvoie la ligne \verb|A--B--C--cycle|.
+\end{rpobjet}
+
+\begin{rpobjet}{TriangleLLL(<A>,<B>,<C>)(<def>)(<points>)(<cotes>)(<angles>)}{picture}
+Définit les points $A$, $B$ et $C$ comme précédemment et renvoie le triangle complet (voir \ref{figcomp}).
+\end{rpobjet}
+
 \begin{exemple}
-repere(-1,6,1cm,0,5,1cm);
-pair A,B,C,D,E,F,u,v,w,ve;
+repere(-1,5,1cm,-1,2,1cm);
 draw quadrillage(1,1);
-defVecteur(u,A,B)(3,(2,1),30);
-draw A--B;
-nomme.llft(A);nomme.urt(B);
-defVecteur(v)(4,70);
-C:=(0,1);
-draw C--(C+v);
-nomme.llft(C);
+angle_cote:=0;
+AffCotes:=true;AffAngles:=true;
+draw TriangleLLL(A,B,C)(4,3,2)()()()
+                               withcolor blue;
 fin;
 \end{exemple}
 
+
+\begin{rpobjet}{triangleLLA(<A>,<B>,<C>)(<def>)}{(closed) path}
+Définit les points $A$, $B$ et $C$ comme précédemment et renvoie la ligne \verb|A--B--C--cycle|.
+\end{rpobjet}
+
+\begin{rpobjet}{TriangleLLA(<A>,<B>,<C>)(<def>)(<points>)(<cotes>)(<angles>)}{picture}
+Définit les points $A$, $B$ et $C$ comme précédemment et renvoie le triangle complet (voir \ref{figcomp}).
+\end{rpobjet}
+
 \begin{exemple}
 repere(-1,5,1cm,-1,3,1cm);
-pair A,B,C;
 draw quadrillage(1,1);
-defTriangleLLL(A,B,C)(4,3,2,15);
-nomme.llft(A);nomme.rt(B);
-nomme.top(C);
+angle_cote:=0;
+AffCotes:=true;AffAngles:=true;
+ArrondiAngles:=2;
+EchelleAngles:=0.6;
+draw TriangleLLA(D,E,F)(4,3,45)()()()
+                               withcolor red;
 fin;
 \end{exemple}
 
-\subsubsection*{Tracé seul}
 
-Si les points sont définis, on peut utiliser la macro de tracé ci-dessous.
+\begin{rpobjet}{triangleLAA(<A>,<B>,<C>)(<def>)}{(closed) path}
+Définit les points $A$, $B$ et $C$ comme précédemment et renvoie la ligne \verb|A--B--C--cycle|.
+\end{rpobjet}
 
-\begin{description}
-\item[Triangle(A,B,C)(points)(cotes)(angles)] Figure formée du triangle $ABC$ et des noms des points, cotes et éventuellement des angles.
-\end{description}
+\begin{rpobjet}{TriangleLAA(<A>,<B>,<C>)(<def>)(<points>)(<cotes>)(<angles>)}{picture}
+Définit les points $A$, $B$ et $C$ comme précédemment et renvoie le triangle complet (voir \ref{figcomp}).
+\end{rpobjet}
 
+\begin{exemple}
+repere(-1,6,1cm,-2,3,1cm);
+draw quadrillage(1,1);
+angle_cote:=0;
+AffCotes:=true;AffAngles:=true;
+ArrondiAngles:=2;
+EchelleAngles:=0.8;
+AutoAngleDroit:=true;
+pair I;
+I:=(1,2);
+draw TriangleLAA(G,H,I)(5,60,30,10)
+("$O$")("$a$","$b$","~")();
+fin;
+\end{exemple}
 
+
+\begin{rpparam}
+ AffDonnees & string & false & Booléen qui permet de n’afficher que les valeurs des côtés et des angles correspondant aux données.
+\end{rpparam}
+
+
 \begin{exemple}
-repere(-1,5,1cm,-1,4,1cm);
-pair D,E,F;
+repere(-1,6,1cm,-5,6,1cm);
 angle_cote:=0;
+AffDonnees:=true;
 draw quadrillage(1,1);
-D:=(0,0);E:=(4,1);F:=(2,3);
-draw Triangle(D,E,F)()()();
+draw TriangleLLL(A,B,C)(4,3,2,(0,4))()()()
+                               withcolor blue;
+draw TriangleLLA(D,E,F)(4,3,45)
+()()("$\alpha$","$\beta$","$\gamma$")
+                                withcolor red;
+pair I; I:=(1,-2);
+draw TriangleLAA(G,H,I)(4,60,40,10)
+                 ("$O$")("$a$","$b$","~")();
 fin;
 \end{exemple}
 
+\section{Divers}
 
-\section{Divers}
+\subsection{Compilation avec \texttt{mpost}}
+\label{compilmpost}
+Il est possible de compiler une série de figure dans un document \texttt{mpost}.
+Chaque figure devra alors débuter par une instruction \verb|repere()| et se terminer par \verb|fin|.
+
+Il est possible de placer ces commandes en dehors d'un environnement \verb|beginfig()|-\verb|endfig|, la numérotation est alors automatique et est incrémentée d'une unité à chaque commande \verb|repere|.
+
+\bigskip
+\begin{minipage}[c]{0.33\linewidth}
+\begin{codempost}
+beginfig(2);
+repere(...);
+<instructions de dessin>
+fin;
+endfig;
+\end{codempost}
+\end{minipage}
+\hfill
+\begin{minipage}[c]{0.6\linewidth}
+La figure porte le numéro 2
+\end{minipage}
+
+\bigskip
+\begin{minipage}[c]{0.33\linewidth}
+\begin{codempost}
+repere(...);
+<instructions de dessin>
+fin;
+\end{codempost}
+\end{minipage}
+\hfill
+\begin{minipage}[c]{0.6\linewidth}
+La numérotation est automatique. La figure porte le numéro qui suit la figure précédemment dessinée. S'il s'agit de la première, elle porte le numéro 1.
+\end{minipage}
+
+
 \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'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}
 
+\begin{rpobjet}{LaTeX(<ch>)}{picture}
+\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{rpobjet}
 
-\begin{exemple}[0.65]
+
+\begin{exemple}[lefthand ratio=0.65]
 repere(-1,7,1cm,-1,1,1cm);
 for i=2 upto 6:
 label(LaTeX("$\frac{1}{"&decimal(i)&"}$"),(i,0));
@@ -2053,11 +2675,11 @@
 fin;
 \end{exemple}
 
-\begin{description}
-\item[label.pos(fig,point)] Commande de \MP{} qui permet de placer la figure \verb|fig| au niveau du point \verb|point|.
-\end{description}
+\begin{rplabel}{label.<pos>(<fig>,<point>)}
+Commande de \MP{} qui permet de placer la figure \verb|fig| au niveau du point \verb|point|.
+\end{rplabel}
 
-\begin{exemple}[0.55]
+\begin{exemple}[lefthand ratio=0.55]
 repere(-1,5,1cm,-1,4,1cm);
 draw axes(1,1);
 label.ulft("Abscisses",(5,0.1));
@@ -2066,27 +2688,29 @@
 fin;
 \end{exemple}
 
-\begin{description}
-\item[legende.pos(fig,p)] Figure formée du chemin \verb|p| dessiné avec une flèche et de la figure ou de la chaine \verb|fig| située à la position \verb|pos| par rapport au premier point du chemin.
-\end{description}
 
-\begin{exemple}[0.6]
+\begin{rplabel}{legende.<pos>(<fig>,<p>)}
+Figure formée du chemin \verb|p| dessiné avec une flèche et de la figure ou de la chaine \verb|fig| située à la position \verb|pos| par rapport au premier point du chemin.
+\end{rplabel}
+
+\begin{exemple}[lefthand ratio=0.6]
 repere(-0.5,5,1cm,-0.5,4,1cm);
-  draw axes(1,1);
-  pair A,B;
-  A=(2,1);B=(2,2);
-  nomme.rt(A) couleur rouge;
-  nomme.top(B) couleur rouge;
-  legende.top("Le point $A$",(1,3){down}..{down}A);
-  legende.bot("Le point $B$",(4,1)--B);
+ draw axes(1,1);
+ pair A,B;
+ A=(2,1);B=(2,2);
+ nomme.rt(A) withcolor red;
+ nomme.top(B) withcolor red;
+ legende.top("Le point $A$",(1,3){down}..{down}A);
+ legende.bot("Le point $B$",(4,1)--B);
 fin;
 \end{exemple}
 
+
 \subsection{Couleurs}
 Certaines couleurs sont définies par leur nom et peuvent être utilisées directement : 
 
 \begin{center}
-\begin{figreperedoc}
+\begin{mplibcode}
 repere(0,18,1cm,-3,1,1cm);
  path rectangle;
  save a,b,dech,decv;
@@ -2120,192 +2744,207 @@
  draw couleur("grisfonce") shifted (5*dech,2decv);
  draw couleur("vertfonce") shifted (6*dech,2decv);
 fin;
-\end{figreperedoc}
+\end{mplibcode}
 \end{center}
 
 Toutes ces couleurs sont définies selon le modèle \og rgb \fg. Pour les obtenir selon le modèle \og cmyk \fg, remplacer la première lettre par une majuscule.
 
 
-\subsection{Remplissage}
-Pour remplir des chemins fermés avec autre chose que de la couleur, \verb+repere+ permet l'utilisation de la syntaxe \verb+fill p avec motif+ où \verb+motif+ est un des motifs décrits ci-dessous. Cette instruction peut être complétée par des options de dessin (\verb+withpen+, \verb+withcolor+...).
 
-\begin{description}
-\item[hachures(pas,angle)] hachures espacées de \verb+pas+ et formant un angle en degrés de \verb+angle+ avec l'horizontale. Si les valeurs sont omises, \verb|pas| vaut 5 et \verb+angle+ vaut 60.
 
 
-\item[briques(larg,haut,dec)] briques de largeur \verb+larg+, de hauteur \verb+haut+ et décalées d'une ligne à l'autre de \verb+dec+. Si les valeurs sont omises, \verb|larg| vaut 12, \verb|haut| vaut 6 et \verb+dec+ vaut 6.
+\subsection{Remplissage}
 
+\begin{rpdeclaration}{avec}
+Pour remplir des chemins fermés avec autre chose que de la couleur, \verb+repere+ permet l'utilisation de la syntaxe \verb+fill p avec motif+ où \verb+motif+ est un des motifs décrits ci-dessous ou même une figure quelconque. Cette instruction peut être complétée par des options de dessin (\verb+withpen+, \verb+withcolor+...).
+\end{rpdeclaration}
 
-\item[vagues(per,amp,dec)] (d'après le manuel de l'utilisateur) \og vagues \fg{} de période \verb+per+, d'amplitude \verb+amp+ et décalées d'une ligne à l'autre de \verb+dec+. Si les valeurs sont omises, \verb|per| vaut 20, \verb|amp| vaut 3 et \verb+dec+ vaut 10.
-\end{description}
 
+\begin{rpobjet}{hachures(<pas>,<angle>)}{picture}
+Hachures espacées de \verb+pas+ et formant un angle en degrés de \verb+angle+ avec l'horizontale. Si les valeurs sont omises, \verb|pas| vaut 5 et \verb+angle+ vaut 60.
+\end{rpobjet}
 
-
-\begin{exemple}[0.55]
-repere(-1.5,4.5,1cm,-1.5,7.5,1cm);
-path c[];picture lab;
-c1=fullcircle scaled 2.5;
-for k=1 upto 6:
-  i:=(k-1) mod 2;j:=(k-1) div 2;
-  c[k]:=c1 shifted (3*i,3*j);
-endfor;
+\begin{exemple}[lefthand ratio=0.51]
+repere();
+path c[];
+c1=fullcircle scaled 3;
+c2=c1 shifted (3.5,0);
 fill c1 withcolor lime;
 fill c1 avec hachures(10,30) dashed evenly;
 fill c2 withcolor lime;
 fill c2 avec hachures();
-fill c3 withcolor (0,0.65,0.8,0.48);
-fill c3 avec briques(15,5,4);
-fill c4 withcolor (0,0.65,0.8,0.48);
-fill c4 avec briques();
-fill c5 withcolor (1,0,0,0.2);
-fill c5 avec vagues(30,10,20)
-           withpen pencircle scaled 2;
-fill c6 withcolor (1,0,0,0.2);
-fill c6 avec vagues();
-for k=1 upto 6:
-  i:=(k-1) mod 2;j:=(k-1) div 2;
-  draw c[k];
-  lab:=thelabel("c"&decimal(k),3*(i,j));
-  unfill bbox lab;draw lab;
-endfor;
+draw c1;draw c2;
 fin;
 \end{exemple}
 
+\begin{rpobjet}{briques(<larg>,<haut>,<dec>)}{picture}
+briques de largeur \verb+larg+, de hauteur \verb+haut+ et décalées d'une ligne à l'autre de \verb+dec+. Si les valeurs sont omises, \verb|larg| vaut 12, \verb|haut| vaut 6 et \verb+dec+ vaut 6.
+\end{rpobjet}
 
+\begin{exemple}
+repere();
+path c[];
+c1=fullcircle scaled 3;
+c2=c1 shifted (3.5,0);
+fill c1 withcolor (0,0.65,0.8,0.48);
+fill c1 avec briques(15,5,4);
+fill c2 withcolor (0,0.65,0.8,0.48);
+fill c2 avec briques();
+draw c1;draw c2;
+fin;
+\end{exemple}
 
-\subsection{Figures pour une présentation}
-\begin{description}
-\item[figureinter] exporte la figure telle qu'elle est au moment où cette commande apparait. La numérotation est incrémentée et la figure peut continuer.
-\end{description}
- L'exemple ci-dessous crée trois figures :
- 
- \begin{exemplefiginter}[0.7]{3}
- repere(-3,3,0.7cm,-1,5,0.7cm);
-  path C_f;
-  vardef f(expr x)=x**2 enddef;
-  C_f= courbefonc(f)();
-  draw quadrillage(1,1);
-  draw axes(1,1);
-  draw cadre;
-  figureinter;
-  draw courbepoints(f)(-2,2,9) withcolor rouge;
-  figureinter;
-  draw C_f withcolor bleu withpen pencircle scaled 1;
- fin;
- \end{exemplefiginter}
 
 
-Si ces trois figures s'appellent \verb|mafigure.1|, \verb|mafigure.2| et \verb|mafigure.3|,  elles peuvent être incluses dans un document de la classe \verb|beamer| avec le code ci-dessous :
+\begin{rpobjet}{vagues(<per>,<amp>,<dec>)}{picture}
+ \og Vagues \fg{} de période \verb+per+, d'amplitude \verb+amp+ et décalées d'une ligne à l'autre de \verb+dec+ (d'après le manuel de l'utilisateur). Si les valeurs sont omises, \verb|per| vaut 20, \verb|amp| vaut 3 et \verb+dec+ vaut 10.
+\end{rpobjet}
 
-\begin{center}
-\begin{minipage}{0.6\linewidth}
-\begin{lstlisting}[frame=single,frameround=tttt,backgroundcolor=\color{LightSteelBlue},language={[LaTeX]TeX}]
-\documentclass{beamer}
- \ifpdf   % Pour utiliser pdflatex
-  \DeclareGraphicsRule{*}{mps}{*}{}
- \fi
-\begin{document}
-\begin{frame}
-\includegraphics<+>{mafigure.1}%
-\includegraphics<+>{mafigure.2}%
-\includegraphics<+>{mafigure.3}%
-\end{frame}
-\end{document}
-\end{lstlisting}
-\end{minipage}
-\end{center}
+\begin{exemple}
+repere();
+path c[];
+c1=fullcircle scaled 3;
+c2=c1 shifted (3.5,0);
+fill c1 withcolor (1,0,0,0.2);
+fill c1 avec vagues(30,10,20)
+           withpen pencircle scaled 2;
+fill c2 withcolor (1,0,0,0.2);
+fill c2 avec vagues();
+draw c1;draw c2;
+fin;
+\end{exemple}
 
 
 
+\subsection{Francisation}
+Quelques mot-clefs ont été traduits.
 
+\par\medskip
+\begin{center}
+     \begin{longtblr}[label=none,caption={}]{
+             rowhead=2,
+             verb,
+             hlines={2pt,white},
+             columns={c},
+             row{1}=white,
+             row{2-Z}={bg=CoulParam!5!white,m},
+             row{3-Z}={cmd=\bfseries\testparam}
+             }
+        \SetCell[c=2]{c} Mots-clefs \\
+        Nom français & Nom original   \\
+        couleur & withcolor \\
+        epaisseur & withpen pencircle scaled \\
+     \end{longtblr}
+\end{center}
+\bigskip
 
-\section{Dessin à main levée avec \texttt{geometriesyr}}
 
-\label{exgeom}Il est possible, dans une figure créée avec \verb+repere+, d'utiliser le \og dessin à main levée \fg{} de \verb+geometriesyr+. Il faut alors charger \verb+geometriesyr+ \emph{avant} \verb|repere| et utiliser les fonctions de dessin telles que \verb|cercles|, \verb|triangle|...
+\newpage
 
-\begin{exemple}
-repere(-0.5,5,1cm,-0.5,5,1cm);
-pair A,B,C,D;
-A=(0.5,0.5);B=(4,1);C=(3,4);
-typetrace:="mainlevee";
-draw axes(1,1);
-drawoptions(withcolor violet);
-draw triangle(A,B,C);
-nomme.llft(A);nomme.lrt(B);
-nomme.top(C);
-draw marqueangle(B,A,C,1);
-drawoptions(withcolor vertfonce);
-draw cercles(CentreCercleC(A,B,C),A);
-fin;
-\end{exemple}
-
-\newpage
 \part{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.
 
+
 \section{Définition et grilles}
 \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}
+\begin{rpdeclaration}{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|.
+\end{rpdeclaration}
 
+\begin{rpdeclaration}{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|.
+\end{rpdeclaration}
+
+\begin{rpdeclaration}{fin}
+Termine la figure.
+\end{rpdeclaration}
+
 \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{rpobjet}{grille(<x>,<y>)}{picture}
+Quadrillage avec un pas de \verb|x| sur les colonnes et de \verb|y| sur les lignes.
+\end{rpobjet}
 
+\begin{exemple}
+tableau(6,6,0.5cm);
+ draw grille(1,1);
+fin;
+\end{exemple}
 
-\begin{exemple}
-tableau(8,8,0.7cm);
-coullignes:=olive;
+\bigskip
+La couleur et l'épaisseur des lignes peuvent être modifiées localement mais on peut aussi les changer globalement.
+
+\begin{rpparam}
+grille_coul & color   & black & Couleur des traits de la grille \\
+grille_ep   & numeric & 0.7   & Épaisseur des traits de la grille \\
+\end{rpparam}
+
+\begin{exemple}[lefthand ratio=0.51]
+tableau(8,8,0.5cm);
+draw grille(1,1) couleur olive;
+draw grille(2,2) couleur olive epaisseur 2;
+fin;
+\end{exemple}
+
+
+\begin{exemple}[lefthand ratio=0.51]
+tableau(8,8,0.5cm);
+grille_coul:=olive;
 draw grille(1,1);
-draw grille(2,2) epaisseur 2;
+grille_ep:=2;
+draw grille(2,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.
+\begin{rpobjet}{damier(<x>,<y>)}{picture}
+Figure formée de la grille et des cases coloriées alternativement.
+\end{rpobjet}
 
-Les valeurs par défaut sont \verb|coultableau[1]=0.45white| et \verb|coultableau[2]:=0.9white|.
+\begin{exemple}
+tableau(5,5,1cm);
+  draw damier(1,1);
+fin;
+\end{exemple}
 
-\end{description}
+\begin{rpparam}
+table_coul[1] & color & 0.45white & Couleur de la case située en bas à gauche \\
+table_coul[2] & color & 0.9white & Couleur de la case située à côté de la précédente \\
+\end{rpparam}
 
 \begin{exemple}
 tableau(5,5,1cm);
-  coultableau[1]:=jaune;
-  coultableau[2]:=0.7rouge;
+  table_coul[1]:=jaune;
+  table_coul[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{rpobjet}{lignesh(<suite de 0 et 1>)}{picture}
+Figure qui décrit les lignes horizontales qui doivent être tracées. De gauche à droite et de haut en bas.
+\end{rpobjet}
+
+\begin{rpobjet}{lignesv(<suite de 0 et 1>)}{picture}
+Figure qui décrit les lignes verticales qui doivent être tracées. De gauche à droite et de haut en bas.
+\end{rpobjet}
+
+
+
 \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;
+                 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;
+                 1,1,1,1,
+                 1,0,1,1) epaisseur 3;
 fin;
 \end{exemple}
 
@@ -2312,12 +2951,19 @@
 \section{Repérage et cases}
 \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{rpobjet}{coordx}{picture}
+Figure formée des numéros de colonnes placée par défaut en bas.
+\end{rpobjet}
 
+\begin{rpobjet}{coordy}{picture}
+Figure formée des numéros de lignes placée par défaut à gauche.
+\end{rpobjet}
+
+\begin{rpobjet}{coord}{picture}
+Figure formée des deux figures précédentes.
+\end{rpobjet}
+
+
 \begin{exemple}
 tableau(5,5,1cm);
   draw grille(1,1);
@@ -2325,17 +2971,21 @@
 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{rpparam}
+style_coord_x & string & "1" &  Variable qui indique comment doivent être composées les coordonnées des colonnes. Les valeurs possibles sont \verb|"1"| (nombres), \verb|"a"| (lettres minuscules), \verb|"A"| (lettres majuscules), \verb|"i"| (chiffres romains minuscules) et \verb|"I"| (chiffres romains majuscules).\\
+style_coord_y & string & "1" &  Même chose pour les lignes.\\
+deb_coord_x & numeric & 1 &  Variable  qui indique la première valeur des colonnes. \\
+deb_coord_y & numeric & 1 &  Variable  qui indique la première valeur des lignes. \\
+align_coord_y & string & "c" &  Variable qui indique comment doivent être alignés horizontalement les numéros de lignes. Les valeurs possibles sont \verb|"c"| (centré), \verb|"g"| ou \verb|"l"| (gauche) et \verb|"d"| ou \verb|"r"| (droite).\\
+place_coord & string & "bg" &  Variable qui indique où les coordonnées doivent être affichées. On peut utiliser une combinaison des lettres \verb|"b"| (en bas), \verb|"h"| (en haut), \verb|"g"| (à gauche) et \verb|"d"| (à droite).\\
+inverse_coord_x & boolean & false &  Variable qui indique si le sens par défaut dans lequel  les numéros de colonnes doivent être écrits (de gauche à droite) doit être inversé.\\
+inverse_coord_y & boolean & false &  Variable qui indique si le sens par défaut dans lequel  les numéros de lignes doivent être écrits (de bas en haut) doit être inversé.\\
+\end{rpparam}
+
+
+
+
 \begin{exemple}
 tableau(5,5,1cm);
   draw grille(1,1);
@@ -2359,23 +3009,31 @@
 fin;
 \end{exemple}
 
+\begin{rpobjet}{numerotationdames}{picture}
+Figure formée par les numéros des cases comme au jeu de dames.
+\end{rpobjet}
 
-\begin{description}
-\item[numerotationdames] description
-\end{description}
 
-\subsection{Placements d'objets dans les cases}
+\begin{exemple}
+tableau(10,10,0.7cm);
+ draw damier(1,1);
+ draw numerotationdames;
+fin;
+\end{exemple}
 
-\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]
+\subsection{Placement d'objets dans les cases}
+
+\begin{rpobjet}{case(<x>,<y>)}{picture}
+Figure formée de la case de coordonnées \verb|(x,y)| remplie ainsi que de son contour dessiné avec l'épaisseur et la couleur de la grille.
+\end{rpobjet}
+
+\begin{rpobjet}{cases((<x1>,<y1>),(<x2>,<y2>),...)}{picture}
+Toutes les cases \verb|(x1,y1)|, \verb|(x2,y2)|...
+\end{rpobjet}
+
+\begin{exemple}[lefthand ratio=0.6]
 tableau(5,5,1cm);
  draw damier(1,1);
  draw coord;
@@ -2384,14 +3042,21 @@
 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]
+\begin{rplabel}{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.
+\end{rplabel}
+
+
+\begin{rplabel}{tablabels(<obj>)((<x1>,<y1>),(<x2>,<y2>)...)}
+Place l'objet \verb|obj| dans toutes les cases indiquées.
+\end{rplabel}
+
+\begin{exemple}[lefthand ratio=0.6]
 tableau(8,8,0.6cm);
   draw grille(1,1);
   draw coord;
@@ -2417,164 +3082,224 @@
 fin;
 \end{exemple}
 
+
+
 \section{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}
+   \begin{longtblr}[label=none,caption={}]{
+             rowhead=1,
+             verb,
+             hlines,vlines,
+             columns={c},
+%             row{1}=white,
+             row{2-Z}={m,ht=1.5cm},
+             column{1-2}={wd=5.5cm},
+             cell{2-Z}{3}={wd=4cm,cmd=\decfig},
+             cell{2-Z}{1-2}={cmd=\desstab},
+             }
+   Syntaxe & Exemple & Résultat  \\
+   
+Pion(<v>)(<coul1>,<coul2>) & 
+Pion(1)(noir,0.85blanc) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Pion(1)(noir,0.85blanc),1,1);
+draw Pion(1)(noir,0.85blanc);
 fin;
-\end{figreperedoc}
-\\ \hline
- & \verb|Pion(1)(0.9blanc,noir)|&
-\begin{figreperedoc}
+\end{mplibcode}
+\\
+
+ & 
+Pion(1)(0.9blanc,noir) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Pion(1)(0.9blanc,noir),1,1);
+draw Pion(1)(0.9blanc,noir);
 fin;
-\end{figreperedoc}
-\\ \hline
-  & \verb|Pion(2)(noir,0.85blanc)|&
-\begin{figreperedoc}
+\end{mplibcode}
+\\
+
+ & 
+Pion(2)(noir,0.85blanc) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-   tablabel(Pion(2)(noir,0.85blanc),1,1);
- fin;
-\end{figreperedoc}
- \\ \hline
- & \verb|Pion(2)(0.9blanc,noir)|&
-\begin{figreperedoc}
+draw Pion(2)(noir,0.85blanc);
+fin;
+\end{mplibcode}
+\\
+
+ & 
+Pion(2)(0.9blanc,noir) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Pion(2)(0.9blanc,noir),1,1);
+draw Pion(2)(0.9blanc,noir);
 fin;
-\end{figreperedoc}
-\\ \hline
-\verb|Dame(v)(coul1,coul2)| & \verb|Dame(1)(noir,0.85blanc)|&
-\begin{figreperedoc}
+\end{mplibcode}
+\\
+
+
+Dame(<v>)(<coul1>,<coul2>) & 
+Dame(1)(noir,0.85blanc) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Dame(1)(noir,0.85blanc),1,1);
+draw Dame(1)(noir,0.85blanc);
 fin;
-\end{figreperedoc}
-\\ \hline
- & \verb|Dame(1)(0.9blanc,noir)|&
-\begin{figreperedoc}
+\end{mplibcode}
+\\
+
+ & 
+Dame(1)(0.9blanc,noir) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Dame(1)(0.9blanc,noir),1,1);
+draw Dame(1)(0.9blanc,noir);
 fin;
-\end{figreperedoc}
-\\ \hline
-  & \verb|Dame(2)(noir,0.85blanc)|&
-\begin{figreperedoc}
+\end{mplibcode}
+\\
+
+ & 
+Dame(2)(noir,0.85blanc) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-   tablabel(Dame(2)(noir,0.85blanc),1,1);
- fin;
-\end{figreperedoc}
- \\ \hline
- & \verb|Dame(2)(0.9blanc,noir)|&
-\begin{figreperedoc}
+draw Dame(2)(noir,0.85blanc);
+fin;
+\end{mplibcode}
+\\
+
+ & 
+Dame(2)(0.9blanc,noir) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Dame(2)(0.9blanc,noir),1,1);
+draw Dame(2)(0.9blanc,noir);
 fin;
-\end{figreperedoc}
-\\ \hline
-\verb|Croix| & &
-\begin{figreperedoc}
-tableau(1,1,1.5cm);
-  tablabel(Croix,1,1);
+\end{mplibcode}
+\\
+
+
+ Croix & 
+ &
+\begin{mplibcode}
+tableau(1,1,2cm);
+draw Croix;
 fin;
-\end{figreperedoc}
-\\ \hline
-\verb|Trou| & &
-\begin{figreperedoc}
+\end{mplibcode}
+\\
+ Trou & 
+ &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Trou,1,1);
+draw Trou;
 fin;
-\end{figreperedoc}
-\\ \hline
-\verb|Marque(v)(coul)| &\verb|Marque(1)((0.9,0.7,0.7))| &
-\begin{figreperedoc}
+\end{mplibcode}
+\\
+
+Marque(<v>)(<coul>) & 
+Marque(1)((0.9,0.7,0.7)) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Marque(1)((0.9,0.7,0.7)),1,1);
+draw Marque(1)((0.9,0.7,0.7));
 fin;
-\end{figreperedoc}
-\\ \hline
- &\verb|Marque(2)((0.8,0.65,0.5))| &
-\begin{figreperedoc}
+\end{mplibcode}
+\\
+
+ & 
+Marque(2)((0.8,0.65,0.5)) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Marque(2)((0.8,0.65,0.5)),1,1);
+draw Marque(2)((0.8,0.65,0.5));
 fin;
-\end{figreperedoc}
-\\ \hline
-\verb|Mur(coul1,coul2)| &\verb|Mur(rouge,noir)| &
-\begin{figreperedoc}
+\end{mplibcode}
+\\
+
+Mur(<coul1>,<coul2>) & 
+Mur(rouge,noir) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Mur(rouge,noir),1,1);
+draw Mur(rouge,noir);
 fin;
-\end{figreperedoc}
-\\ \hline
-\verb|Plot(coul1,coul2)| &\verb|Plot(0.7rouge,0.5rouge)| &
-\begin{figreperedoc}
+\end{mplibcode}
+\\
+
+
+Plot(<coul1>,<coul2>) & 
+Plot(0.7rouge,0.5rouge) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Plot(0.7rouge,0.5rouge),1,1);
+draw Plot(0.7rouge,0.5rouge);
 fin;
-\end{figreperedoc}
-\\ \hline
-\verb|Caisse(coul1,coul2)| &\verb|Caisse(orange,marron)| &
-\begin{figreperedoc}
+\end{mplibcode}
+\\
+
+
+Caisse(<coul1>,<coul2>) & 
+Caisse(orange,marron) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Caisse(orange,marron),1,1);
+draw Caisse(orange,marron);
 fin;
-\end{figreperedoc}
-\\ \hline
-\verb|Robotdroite(coul1,coul2)| &\verb|Robotdroite(noir,0.6vert)| &
-\begin{figreperedoc}
+\end{mplibcode}
+\\
+
+
+Robotdroite(<coul1>,<coul2>) & 
+Robotdroite(noir,0.6vert) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Robotdroite(noir,0.6vert),1,1);
+draw Robotdroite(noir,0.6vert);
 fin;
-\end{figreperedoc}
-\\ \hline
-\verb|Robotgauche(coul1,coul2)| &\verb|Robotgauche(marine,0.6rouge)| &
-\begin{figreperedoc}
+\end{mplibcode}
+\\
+
+Robotgauche(<coul1>,<coul2>) & 
+Robotgauche(marine,0.6rouge) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Robotgauche(marine,0.6rouge),1,1);
+draw Robotgauche(marine,0.6rouge);
 fin;
-\end{figreperedoc}
-\\ \hline
-\verb|Bateau(numcases,coul)| &\verb|Bateau(1,violet)| &
-\begin{figreperedoc}
+\end{mplibcode}
+\\
+
+Bateau(<numcases>,<coul>) & 
+Bateau(1,violet) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Bateau(1,violet),1,1);
+draw Bateau(1,violet);
 fin;
-\end{figreperedoc}
-\\ \hline
- &\verb|Bateau(2,marron)| &
-\begin{figreperedoc}
+\end{mplibcode}
+\\
+
+ & 
+Bateau(2,marron) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Bateau(2,marron),1,1);
+draw Bateau(2,marron);
 fin;
-\end{figreperedoc}
-\\ \hline
-\verb|Eau(coul)| &\verb|Eau(marine)| &
-\begin{figreperedoc}
+\end{mplibcode}
+\\
+
+Eau(<coul>) & 
+Eau(marine) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Eau(marine),1,1);
+draw Eau(marine);
 fin;
-\end{figreperedoc}
-\\ \hline
-\verb|Fleche(coul1,coul2)| &\verb|Fleche(jaune,marine)| &
-\begin{figreperedoc}
+\end{mplibcode}
+\\
+
+
+Fleche(<coul1>,<coul2>) & 
+Fleche(jaune,marine) &
+\begin{mplibcode}
 tableau(1,1,2cm);
-  tablabel(Fleche(jaune,marine),1,1);
+draw Fleche(jaune,marine);
 fin;
-\end{figreperedoc}
-\\ \hline
-\end{longtable}
+\end{mplibcode}
+\\
+
+   \end{longtblr}
 \end{center}
 
 
+
+
 \section{Exemples}
 
 \subsection{Mots croisés}
@@ -2626,8 +3351,8 @@
  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;
+ table_coul[1]:=0.7marron+0.3blanc;
+ table_coul[2]:=beige;
  fleche:=Fleche(rouge,noir) rotated 135;
  draw damier(1,1);
  draw numerotationdames;
@@ -2640,7 +3365,7 @@
 
 \subsection{Bataille navale}
 
-\begin{exemplev}{1}
+\begin{exemple}[listing above text]
 tableau(10,10,0.8cm);
  draw grille(1,1);
  inverse_coord_y:=true;
@@ -2654,14 +3379,14 @@
  tablabels(Eau(marine),(2,7),(3,7),(4,9),(4,2),(5,2));
  tablabels(Croix,(5,3),(8,8));
 fin;
-\end{exemplev}
+\end{exemple}
 
 \subsection{Algoréa}
 
-\begin{exemplev}{1}
+\begin{exemple}[listing above text]
 tableau(13,5,1cm);
- coultableau[1]:=(1,0.9,0.7);
- coultableau[2]:=(1,0.9,0.7);
+ table_coul[1]:=(1,0.9,0.7);
+ table_coul[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:
@@ -2673,117 +3398,9 @@
   tablabel(Marque(2)((0.8,0.65,0.5)),i,4);
  endfor
 fin;
-\end{exemplev}
+\end{exemple}
 
-
-\begin{codecache}
-end
-\end{codecache}
-
-\makeatletter
-\immediate\closeout\verbatim at out
-\makeatother
 \end{document}
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-\vspace{2em}
-
-
-\begin{exemplev}[1]{2}
-repere(-9.5,6,1cm,-1.25,1.25,2cm);
-%cercle
-pair O,A,A',B,B',M,S,C;
-numeric x;x=pi/4;
-O=_c(-7,0);A=_c(-5,0);
-B=_c(-7,1);A+A'=B+B'=2O;
-M=rotation(A,O,180*x/pi);
-C=projection(M,A,A');
-S=projection(M,B,B');
-draw cerclepoint(O,A);
-drawarrow A'--A;drawarrow B'--B;
-nomme.rt(A);nomme.top(B);nomme.llft(O);
-drawoptions(withcolor rouge);
-draw O--M;draw C--M--S dashed evenly;
-draw codeperp(M,C,O,5);
-draw codeperp(O,S,M,5);
-draw codeangle.urt(A,O,M,0,
-                         LaTeX("$x$"));
-marque_p:="";
-nomme.urt(M);
-label.lft(LaTeX("$\sin x$"),S);
-%repere
-settout(-4.5,6,-1.25,1.25);
-path C_f;
-C_f=courbefonc(sin,-4.5,6,80);
-pair m;m=_c(x,sin(x));
-drawoptions();
-draw axexpi.bot(1,2);
-draw axey(0.5,1);
-drawoptions(withcolor bleu);
-draw C_f withpen pencircle scaled 1.5;
-nomme.urt(C_f,2.5,LaTeX("$y=\sin x$"));
-drawoptions(withcolor rouge);
-draw projectionx.bot(m,LaTeX("$x$"))
-                         dashed evenly;
-%
-draw M--m dashed evenly;
-fin;
-\end{exemplev}
-
-\vspace{3em}
-
-\begin{exemple}
-repere(-0.5,5,1cm,-0.5,5,1cm);
-coulpoint:=blue;coullabel:=blue;
-pair A,B,C,D;
-A=_c(0.5,0.5);B=_c(4,1);C=_c(3,4);
-typetrace:="mainlevee";
-draw axes(1,1);
-drawoptions(withcolor violet);
-draw triangle(A,B,C);
-nomme.llft(A);nomme.lrt(B);
-nomme.top(C);
-draw marqueangle(B,A,C,0);
-drawoptions(withcolor vertfonce);
-draw cercles(CentreCercleC(A,B,C),A);
-fin;
-\end{exemple}
-
-
-
-\begin{codecache}
-end
-\end{codecache}
-
-\makeatletter
-\immediate\closeout\verbatim at out
-\makeatother
-\end{document}
-
-

Modified: trunk/Master/texmf-dist/metapost/repere/repere.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/repere/repere.mp	2023-01-10 21:13:14 UTC (rev 65505)
+++ trunk/Master/texmf-dist/metapost/repere/repere.mp	2023-01-10 21:14:12 UTC (rev 65506)
@@ -2,11 +2,11 @@
 %%                        repere.mp                           %%
 %%   Macros pour la construction de figures dans un repère    %%
 %%                    o.peault at posteo.net                     %%
-%%               Version 22.07 (Juillet 2022)                 %%
+%%               Version 23.01 (Janvier 2023)                 %%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
 % This work may be distributed and/or modified under the conditions of
-% the LaTeX Project Public License, either version 1.3 of this license
+% the LaTeX Project Public License, either version 1.3c of this license
 % or (at your option) any later version.  The latest version of this
 % license is in http://www.latex-project.org/lppl.txt
 %
@@ -19,7 +19,7 @@
 % Juin 2022 : marquesegment plusieurs segments
 %             angle_cote
 %             segments, vecteurs, polygones complets
-% À faire : extratextx, extratexty
+% Octobre-Décembre 2022 : doc
 
 input format;
 if not known mplib: input latexmp fi;
@@ -31,7 +31,19 @@
 %%%%%%%%%%   REPERE   %%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 numeric _nfig,_nbaxes,theta,taillegrad,taillepoint,taillecroix,facteurx,facteury;
-boolean flecheaxe,displayfrac,coupe,boolgradxpart,boolgradypart;
+boolean flecheaxe,displayfrac,coupe,gradxpart,gradypart;
+
+numeric Xmin,Xmax,Ux,Ymin,Ymax,Uy,theta,Uxy,Lx,Ly;
+Xmin:=-10;Xmax:=10;Ux:=1cm;
+Ymin:=-10;Ymax:=10;Uy:=1cm;
+Lx:=10cm;Ly:=10cm;
+theta:=90;
+Uxy:=-1;
+
+
+numeric xminf,xmaxf,nbf;
+% pour les tracés de fonctions
+
 _nfig:=1;
 path cadre;
 numeric _diag,_largcadre,_hautcadre,_tfig;
@@ -112,8 +124,12 @@
   save i,_def;
   if not rep_groupe: oldbeginfig(_nfig);bf:=true fi;
   numeric _def[],i,unitex,unitey,unite;
-  numeric Xmin,Xmax,Ymin,Ymax,XmiN,XmaX,YmiN,YmaX;
   _def[7]:=90;i:=1;
+  _def1:=Xmin; _def2:=Xmax; _def3:=Ux;
+  _def4:=Ymin; _def5:=Ymax; _def6:=Uy;
+  _def7:=theta;
+  if Uxy>0: _def3:=Uxy;_def6:=Uxy fi;
+  if (str @#="larg") or (str @#="width"): _def3:=Lx;_def6:=Ly fi;
   for _i=t: _def[i]:=_i; i:=i+1; endfor;
   Xmin:=_def1; Xmax:=_def2; Ymin:=_def4; Ymax:=_def5; theta:=_def7;
   if (str @#="larg") or (str @#="width"): _def3:=(_def3-_def6*cosd(theta)/sind(theta))/(Xmax-Xmin);_def6:=_def6/((Ymax-Ymin)*sind(theta))
@@ -126,14 +142,15 @@
   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:=1mm;_nbaxes:=0;_axorlab:=nullpicture;poslabO:=(0,0);
-  marque_p := "plein";displayfrac:=false;flecheaxe:=true;coupe:=true;
-  boolgradxpart:=true;boolgradypart:=true;
-  defaultscale:=1;
+  taillegrad:=0.8mm;taillepoint:=3;taillecroix:=5;_nbaxes:=0;_axorlab:=nullpicture;poslabO:=(0,0);
+  marque_p := "*";displayfrac:=false;flecheaxe:=true;coupe:=true;
+  gradxpart:=true;gradypart:=true;
+  defaultscale:=0.9;
   unitex:=abs(_I);unitey:=abs(_J);unite:=unitex;
   facteurx:=1;facteury:=1;
   string extranumx,extranumy;
   extranumx=extranumy="";
+     xminf:=Xmin;xmaxf:=Xmax;nbf:=50; % défaut tracés fonctions
   init_traces;
 enddef;
 
@@ -260,7 +277,7 @@
   QuadXmin:=a;QuadXmax:=b;QuadYmin:=c;QuadYmax:=d
 enddef;
 
-def settout(expr a,b,c,d)=
+def setrepere(expr a,b,c,d)=
   setaxes(a,b,c,d);
   setgrad(a,b,c,d);
   setval(a,b,c,d);
@@ -267,7 +284,8 @@
   setquad(a,b,c,d);
 enddef;
 
-let setall=settout;
+let setall=setrepere;
+let settout=setrepere;
 
 def fin =
   if _nbaxes=1: olddraw _axorlab fi;
@@ -871,7 +889,7 @@
 	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 boolgradxpart:
+		if gradxpart:
 		   olddraw graduationx(_i) withpen pencircle scaled 0.8bp
 		fi;
 		tmp:=_i;
@@ -895,7 +913,10 @@
 	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;
+%		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:
@@ -962,33 +983,39 @@
 coulpoint:=black;coullabel:=black;coullabelfonc:=black;
 
 
-vardef MarquePointFig(expr pp)=      % compatibilité geometriesyr15
+vardef marquepointFig(expr pp)=      % compatibilité geometriesyr15
  save $;
  picture $;
-  if marque_p = "plein":
+  if (marque_p = "plein") or (marque_p="*"):
     $:=image(oldfill fullcircle scaled taillepoint shifted _cart(pp) withcolor coulpoint);
-  elseif marque_p = "creux":
+  elseif (marque_p = "creux") or (marque_p="o"):
     $:=image(%
-    oldfill fullcircle scaled taillepoint shifted _cart(pp) withcolor background;
+    %oldfill fullcircle scaled taillepoint shifted _cart(pp) withcolor background;
     olddraw fullcircle scaled taillepoint shifted _cart(pp) withcolor coulpoint);
-  elseif marque_p = "croix":
+  elseif (marque_p = "croix") or (marque_p = "+"):
   $:=image(%
-    olddraw ((-taillecroix,0)--(taillecroix,0)) shifted _cart(pp) withcolor coulpoint;
-    olddraw ((0,-taillecroix)--(0,taillecroix)) shifted _cart(pp) withcolor coulpoint)
+    olddraw ((-taillecroix/2,0)--(taillecroix/2,0)) shifted _cart(pp) withcolor coulpoint;
+    olddraw ((0,-taillecroix/2)--(0,taillecroix/2)) shifted _cart(pp) withcolor coulpoint)
+  elseif (marque_p = "x"):
+  $:=image(%
+    olddraw ((-taillecroix/2,0)--(taillecroix/2,0)) rotated 45 shifted _cart(pp) withcolor coulpoint;
+    olddraw ((0,-taillecroix/2)--(0,taillecroix/2)) rotated 45 shifted _cart(pp) withcolor coulpoint)
   else: $:=nullpicture
   fi;
   $
 enddef;
 
-def MarquePoint(expr pp)=      % compatibilité geometriesyr15
-  draw MarquePointFig(pp)
+def marquepoint(expr pp)=      % compatibilité geometriesyr15
+  draw marquepointFig(pp)
 enddef;
 
 
-vardef pointe(text t) =      %geometriesyr15
-  for p_ = t: if pair p_: MarquePoint(p_); fi endfor;
+def marquepoints(text t) text q =      %geometriesyr15
+  for p_ = t: show p_; if pair p_: marquepoint(p_) q; fi endfor;
 enddef;
 
+let MarquePoint = marquepoint;
+
 % Juin 2019 : placement fin des étiquettes (angle donné)
 vardef thelabelang@#(expr s,z)=
      save tmpang,tmpfig,tmppt,tmppath,tmpstr;
@@ -1025,13 +1052,13 @@
        def mylabel = label enddef
    fi;
    if long_texte(t)=1:
-      dess:=image(draw MarquePointFig(t);
+      dess:=image(draw marquepointFig(t);
                   ch:=_chaine(t);
                   mylabel@#("$" & ch & "$",t) withcolor coullabel)
    else:
       dess:=image(%
       for PP=t:
-        if pair PP: MarquePoint(PP); $:=PP
+        if pair PP: marquepoint(PP); $:=PP
         else: if string PP: mylabel@#(PP,$) else: mylabel@#(PP scaled defaultscale,$) fi withcolor coullabel
         fi;
       endfor)
@@ -1040,6 +1067,16 @@
 enddef;
 
 
+% Décembre 2022 définition et nom
+
+vardef nommedef@#(suffix suff_A)(expr ptA)=
+  pair suff_A;
+  suff_A:=ptA;
+  nomme@#(suff_A);
+enddef;
+
+
+
 % Octobre 2021
 vardef thelabelangrot@#(expr s,z,an)=
      save tmpang,tmpfig,tmppt,tmppath,tmpstr;
@@ -1077,13 +1114,13 @@
        def mylabel = labelrot enddef
    fi;
    if long_texte(t)=1:
-      dess:=image(draw MarquePointFig(t);
+      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
+        if pair PP: marquepoint(PP); $:=PP
         else: if string PP: mylabel@#(PP,$,an) else: mylabel@#(PP scaled defaultscale,$,an) fi withcolor coullabel
         fi;
       endfor)
@@ -1100,12 +1137,12 @@
    picture dess;
    if long_texte(t)=1: 
       dess:=image(ch:=_chaine(p);
-                  A:=(t,fonccourbe.p(t));
+                  A:=(t,fonccourbe(p)(t));
                   label@#("$" & ch & "$",A) withcolor coullabelfonc)
    else:
       dess:=image(%
         for _a=t:
-          if numeric _a: A:=(_a,fonccourbe.p(_a))
+          if numeric _a: A:=(_a,fonccourbe(p)(_a))
           else: if string _a: label@#(_a,A) else: label@#(_a scaled defaultscale,A) fi withcolor coullabelfonc
           fi;
         endfor)
@@ -1114,7 +1151,7 @@
 enddef;
 
 
-vardef nommeobj@#(text t)=
+vardef nommeFig@#(text t)=
  save $;
  picture $;
  if long_texte(t)=4: $:=nommeangle@#(t)
@@ -1130,7 +1167,7 @@
    $
 enddef;
 
-def nomme = draw nommeobj enddef;
+def nomme = draw nommeFig enddef;
 
 
 %
@@ -1156,19 +1193,18 @@
   numeric nbint,pp,T[];
   intercourbestimes(T)(cadre,p);
   Pt:=_O;pp:=0;
-  if known T[1]:
-    Pt:= point T[1] of p;
-    pp:=T[1];
-    nbint:=1;
-    forever:
-      exitif not known T[nbint+1];
-      nbint:=nbint+1;
-      if (point T[nbint] of p) estmieuxplace Pt:
-         Pt:=point T[nbint] of p;
-         pp:=T[nbint];
-      fi;
-    endfor
-  fi;
+  if unknown T[1]: T[1]:= 0; T[2] :=infinity fi;
+  Pt:= point T[1] of p;
+  pp:=T[1];
+  nbint:=1;
+  forever:
+    exitif not known T[nbint+1];
+    nbint:=nbint+1;
+    if (point T[nbint] of p) estmieuxplace Pt:
+       Pt:=point T[nbint] of p;
+       pp:=T[nbint];
+    fi;
+  endfor
   pp
 enddef;
 
@@ -1194,6 +1230,14 @@
      if tmpdir <0: pos:="urt"
      else: pos:="lrt"
      fi
+  elseif tt=0:
+     if tmpdir<0: pos:="urt"
+     else: pos := "lrt"
+     fi
+  else:
+     if tmpdir>0: pos :="ulft"
+     else: pos := "llft"
+     fi
   fi;
   pos
 enddef;
@@ -1273,7 +1317,7 @@
    picture $;
    $=image(%
    for i=t:
-     MarquePoint((i,fonccourbe.p(i)));
+     marquepoint((i,fonccourbe(p)(i)));
    endfor);
    $
 enddef;
@@ -1285,7 +1329,7 @@
    picture $;
    $=image(%
    for i=t:
-     MarquePoint(point i of p);
+     marquepoint(point i of p);
    endfor);
    $
 enddef;
@@ -1360,9 +1404,9 @@
 %%%%%%%%%%   QUADRILLAGE   %%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-  numeric ep; color coul;
-  ep:= .3bp;                    %%%%%%%% épaisseur du trait
-  coul := .7white;              %%%%%%%% couleur du trait
+  numeric q_ep; color q_coul;
+  q_ep:= .3bp;                    %%%%%%%% épaisseur du trait
+  q_coul := .7white;              %%%%%%%% couleur du trait
   def quadstyle= enddef;
 
   vardef quadrillage(expr quadx,quady) =
@@ -1370,17 +1414,22 @@
    picture $;
  $=image(if quadx>0:
     for i=ceiling((QuadXmin-xO)/quadx) upto floor((QuadXmax-xO)/quadx):
-     olddraw _cart(arrondimil(i*quadx)+xO,QuadYmin)--_cart(arrondimil(i*quadx)+xO,QuadYmax) quadstyle withpen pencircle scaled ep withcolor coul;
+     olddraw _cart(arrondimil(i*quadx)+xO,QuadYmin)--_cart(arrondimil(i*quadx)+xO,QuadYmax) quadstyle withpen pencircle scaled q_ep withcolor q_coul;
     endfor;
   fi;
   if quady>0:
     for i=ceiling((QuadYmin-yO)/quady) upto floor((QuadYmax-yO)/quady):
-     olddraw _cart(QuadXmin,arrondimil(i*quady)+yO)--_cart(QuadXmax,arrondimil(i*quady)+yO) withpen pencircle scaled ep withcolor coul quadstyle;
+     olddraw _cart(QuadXmin,arrondimil(i*quady)+yO)--_cart(QuadXmax,arrondimil(i*quady)+yO) withpen pencircle scaled q_ep withcolor q_coul quadstyle;
     endfor;
   fi);
   $
  enddef;
 
+numeric pp_ep;
+color pp_coul;
+pp_ep:=2;
+pp_coul:=black;
+
   vardef papierpointe(expr quadx,quady) =
    save $;
    picture $;
@@ -1387,7 +1436,7 @@
  $=image(if (quadx>0) and (quady>0):
     for i=ceiling(QuadXmin/quadx) upto floor(QuadXmax/quadx):
       for j=ceiling(QuadYmin/quady) upto floor(QuadYmax/quady):
-        olddraw (0,0) shifted _cart(i*quadx,j*quady) withpen pencircle scaled 2;
+        olddraw (0,0) shifted _cart(i*quadx,j*quady) withpen pencircle scaled pp_ep withcolor pp_coul;
       endfor;
     endfor;
   fi);
@@ -1396,8 +1445,8 @@
 
  numeric pm_epa, pm_epb, pm_epc;
  color pm_coula, pm_coulb, pm_coulc;
- pm_epa := .2bp; pm_epb := .3bp; pm_epc := .4bp;              %%%%%%%%%% épaisseurs des traits
- pm_coula := .6*white; pm_coulb := .4*white; pm_coulc := black;   %%%%%%%%%% couleurs des traits
+ pm_epa := .2bp; pm_epb := .4bp; pm_epc := .6bp;              %%%%%%%%%% épaisseurs des traits
+ pm_coula := .6*white; pm_coulb := .2*white; pm_coulc := black;   %%%%%%%%%% couleurs des traits
 
 vardef papiermillimetre =
   save $;
@@ -1454,15 +1503,15 @@
 
 
 vardef courbefonc(suffix f)(text t)=
-        save cc;path cc;
-        save k,Val;numeric k,Val[];
-        Val[1]:=Xmin;Val[2]:=Xmax;Val[3]:=60;
-        k:=1;
-        for i=t:
-           Val[k]:=i;
-           k:=k+1;
-        endfor
-        courbef_(f,Val[1],Val[2],Val[3])
+   save cc;path cc;
+   save k,Val;numeric k,Val[];
+   Val[1]:=xminf;Val[2]:=xmaxf;Val[3]:=nbf;
+   k:=1;
+   for i=t:
+      Val[k]:=i;
+      k:=k+1;
+   endfor
+   courbef_(f,Val[1],Val[2],Val[3])
 enddef;
 
 
@@ -1484,31 +1533,57 @@
 vardef courbepoints(suffix f)(expr xmin, xmax, n) =  %Points non reliés
    save $,x;
    picture $;
-   $=image(MarquePoint((xmin,f(xmin)));
+   $=image(marquepoint((xmin,f(xmin)));
            for i=1 upto n-1:
-              MarquePoint((xmin+i*(xmax-xmin)/(n-1),f(xmin+i*(xmax-xmin)/(n-1))));
+              marquepoint((xmin+i*(xmax-xmin)/(n-1),f(xmin+i*(xmax-xmin)/(n-1))));
            endfor );
    $
 enddef;
 
-vardef fonccourbe@#(expr x)=    %Ordonnée du point de la courbe @# d'abscisse x (dans le repère utilisateur)
-   ypart pointcourbe@#(x)
+%vardef fonccourbe@#(expr x)=    %Ordonnée du point de la courbe @# d'abscisse x (dans %le repère utilisateur)
+%   ypart pointcourbe@#(x)
+%enddef;
+
+vardef fonccourbe(expr p)(expr x)=    %Ordonnée du point de la courbe @# d'abscisse x (dans le repère utilisateur)
+   ypart pointcourbe(p)(x)
 enddef;
 
-vardef pointcourbe@#(expr x)=   %Point de la courbe @# d'abscisse x dans le repère utilisateur
+%vardef pointcourbe@#(expr x)=   %Point de la courbe @# d'abscisse x dans le repère %utilisateur
+%save _P_,t;
+%  numeric t; pair _P_;
+%  (t,whatever)=@# intersectiontimes ((x,2*Ymin-Ymax)--(x,2*Ymax-Ymin));
+%  if t=-1: _P_:=(x,0)
+%  else: _P_:=point t of @#
+%  fi;
+%  _P_
+%enddef;
+
+vardef pointcourbe(expr p)(expr x)=   %Point de la courbe @# d'abscisse x dans le repère utilisateur
 save _P_,t;
   numeric t; pair _P_;
-  (t,whatever)=@# intersectiontimes ((x,2*Ymin-Ymax)--(x,2*Ymax-Ymin));
+  (t,whatever)=p intersectiontimes ((x,2*Ymin-Ymax)--(x,2*Ymax-Ymin));
   if t=-1: _P_:=(x,0)
-  else: _P_:=point t of @#
+  else: _P_:=point t of p
   fi;
   _P_
 enddef;
 
-vardef der@#(expr x)=   %Fonction dérivée
+vardef der(expr p)(expr x)=   %Fonction dérivée
    save pp,t,v,w,d;
    path pp;
    pair v,w;
+   pp:=p;
+   (t,whatever) = pp intersectiontimes ((x,2*Ymin-Ymax)--(x,2*Ymax-Ymin));
+   v:=direction t of pp;
+%   w:=unitvector(v transformed inverse _T);
+   if xpart v = 0: d:=0 else: d:= (ypart v)/(xpart v) fi;
+   d
+enddef;
+
+vardef deri@#(expr x)=   %Fonction dérivée
+   save pp,t,v,w,d;
+   path pp;
+   pair v,w;
    pp:=@#;
    (t,whatever) = pp intersectiontimes ((x,2*Ymin-Ymax)--(x,2*Ymax-Ymin));
    v:=direction t of pp;
@@ -1844,7 +1919,7 @@
    c:= ypart direction t of p;
    _v:=N2*unitvector(direction t of p);
    $=image(%
-		MarquePoint(M);
+		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;
     );
@@ -1909,8 +1984,8 @@
  _sousp=subpath (xpart(p intersectiontimes droiteeqx(a)),xpart(p intersectiontimes droiteeqx(a+pas))) of p;
  if _typerect@#=1: llcorner _sousp -- lrcorner _sousp
   elseif _typerect@#=2: ulcorner _sousp -- urcorner _sousp
-   elseif _typerect@#=3: (pointcourbe.p(a))--(pointcourbe.p(a) shifted (pas,0))
-    elseif _typerect@#=4: (pointcourbe.p(a+pas) shifted (-pas,0))--(pointcourbe.p(a+pas))
+   elseif _typerect@#=3: (pointcourbe(p)(a))--(pointcourbe(p)(a) shifted (pas,0))
+    elseif _typerect@#=4: (pointcourbe(p)(a+pas) shifted (-pas,0))--(pointcourbe(p)(a+pas))
  fi
 enddef;
 
@@ -2044,7 +2119,7 @@
   (xO,ypart (A))
 enddef;
 
-vardef projectionx@#(text t)=
+vardef Projectionx@#(text t)=
   save $,_a,_fg,dec;
   picture $,_fg;_fg:=nullpicture;
   numeric dec;dec=0;
@@ -2057,7 +2132,9 @@
   $
 enddef;
 
-vardef projectiony@#(text t)=
+def projectionx = Projectionx enddef;   %% Compatibilité
+
+vardef Projectiony@#(text t)=
   save $,_a,_fg,dec;
   picture $,_fg;_fg:=nullpicture;
   numeric dec;dec=0;
@@ -2070,8 +2147,9 @@
   $
 enddef;
 
+def projectiony = Projectiony enddef;   %% Compatibilité
 
-vardef projectionaxes(text t)=
+vardef Projectionaxes(text t)=
   save $,_A,n;
   picture $,_fg[];_fg1=_fg2=nullpicture;
   pair _A;
@@ -2090,6 +2168,8 @@
  $
 enddef;
 
+def projectionaxes = Projectionaxes enddef;   %% Compatibilité
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%   SUITES   %%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -2229,6 +2309,57 @@
 enddef;
 
 
+% Octobre 2022 - SuiteRec figure complète
+string suite_nom,suite_labx,suite_laby,suite_posx,suite_posy,suite_styleproj;
+boolean suite_affx,suite_affy;
+numeric suite_arrondi;
+suite_nom:="u";
+suite_arrondi:=1;
+suite_labx:="nom";
+suite_laby:="";
+suite_affx:=true;
+suite_affy:=true;
+suite_posx:="bot";
+suite_posy:="lft";
+suite_styleproj:="dashed evenly";
+
+vardef Suiterec(suffix f)(expr deb,fin,init) text t=
+  save tmpfig,tmpsr;
+  path tmpsr;
+  picture tmpfig;
+  tmpfig:=image(%
+    tmpsr:= suiterec(f,deb,fin,init);
+    if suite_labx="val":
+       numeric tmpsreclab;
+       tmpsreclab:=suite_arrondi
+    else:
+       string tmpsreclab;
+       if suite_labx="nom":
+          tmpsreclab:=suite_nom
+       else:
+          tmpsreclab:=""
+       fi
+    fi;
+    if suite_affx: 
+       draw scantokens("suiterecprojx."& suite_posx)(tmpsreclab) t scantokens(suite_styleproj)
+    fi;
+    if suite_laby="val":
+       numeric tmpsreclab;
+       tmpsreclab:=suite_arrondi
+    else:
+       string tmpsreclab;
+       if suite_laby="nom":
+          tmpsreclab:=suite_nom
+       else:
+          tmpsreclab:=""
+       fi
+    fi;
+    if suite_affy: draw scantokens("suiterecprojy."& suite_posy)(tmpsreclab) t scantokens(suite_styleproj) fi;
+    draw tmpsr t;
+  );
+  tmpfig
+enddef;
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%   INTERVALLES   %%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -2243,13 +2374,16 @@
 pair sensborne.FF,sensborne.FO,sensborne.OF,sensborne.OO;
 sensborne.FF=-sensborne.OO=(1,-1);sensborne.FO=-sensborne.OF=(1,1);
 
+numeric int_ep;
+int_ep:=2bp;
+
 vardef intervallex@#(expr vmin,vmax)=
   save $;
   picture $;
   $=image(%
-   olddraw _cart(vmin,xO)--_cart(vmax,xO) withpen pencircle scaled 2pt;
-   olddraw bornex[xpart sensborne@#](vmin) withpen pencircle scaled 2pt;
-   olddraw bornex[ypart sensborne@#](vmax) withpen pencircle scaled 2pt);
+   olddraw _cart(vmin,xO)--_cart(vmax,xO) withpen pencircle scaled int_ep;
+   olddraw bornex[xpart sensborne@#](vmin) withpen pencircle scaled int_ep;
+   olddraw bornex[ypart sensborne@#](vmax) withpen pencircle scaled int_ep);
   $
 enddef;
 
@@ -2257,9 +2391,9 @@
   save $;
   picture $;
   $=image(%
-   olddraw _cart(yO,vmin)--_cart(yO,vmax) withpen pencircle scaled 2pt;
-   olddraw borney[xpart sensborne@#](vmin) withpen pencircle scaled 2pt;
-   olddraw borney[ypart sensborne@#](vmax) withpen pencircle scaled 2pt);
+   olddraw _cart(yO,vmin)--_cart(yO,vmax) withpen pencircle scaled int_ep;
+   olddraw borney[xpart sensborne@#](vmin) withpen pencircle scaled int_ep;
+   olddraw borney[ypart sensborne@#](vmax) withpen pencircle scaled int_ep);
   $
 enddef;
 
@@ -2267,6 +2401,12 @@
 %%%%%%%%%%%%%   STATISTIQUES   %%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
+%
+%Obsolète 2022
+%
+% Deb
+%
+
 numeric _decboitemoustache_,_largboitemoustache_;
 
 
@@ -2334,10 +2474,96 @@
    $
 enddef;
 
+%
+% Fin
+%
+% Obsolète 2022
+%
 
-numeric diampointsbatons;
-diampointsbatons:=5;
+% Novembre 2022 - Nouvelle version diagramme en boite
+numeric boite_dec,boite_larg;
+string boite_lab,boite_lab_[],boite_pos,boite_styleproj;
+boolean boite_points,boite_proj;
+boite_dec:=1.5;
+boite_larg:=1;
+boite_points:=true;
+boite_pos:="bot";
+boite_styleproj:="dashed evenly";
+boite_proj:=true;
+boite_lab:="nom";
 
+
+def def_boite_lab(text t)=
+  save k;
+  numeric k;
+  k:=0;
+  for i=t:
+     k := k+1;
+     if string i: boite_lab_[k]:=i
+     elseif numeric i: boite_lab_[k]:="\num{" & decimal(i) & "}"
+     fi;
+  endfor
+enddef;
+
+def_boite_lab("$X_{\text{min}}$","$Q_1$","$M$","$Q_3$","$X_{\text{max}}$");
+
+numeric _valeursboitemoustache_[];
+def def_boite_val(text t)=
+   save n;
+   numeric n;
+   n:=0;
+   for i=t:
+     n:=n+1;
+     _valeursboitemoustache_[n]:=i;
+   endfor;
+enddef;
+
+vardef diagrammeboite(text t)=
+  save tmp;
+   path tmp;
+   def_boite_val(t);
+   tmp := ((_valeursboitemoustache_[1],yO)--(_valeursboitemoustache_[2],yO)--
+          (_valeursboitemoustache_[2],yO-0.5boite_larg)--(_valeursboitemoustache_[3],yO-0.5boite_larg)--
+          (_valeursboitemoustache_[3],yO+0.5boite_larg)--(_valeursboitemoustache_[3],yO-0.5boite_larg)--
+          (_valeursboitemoustache_[4],yO-0.5boite_larg)--(_valeursboitemoustache_[4],yO)--
+          (_valeursboitemoustache_[5],yO)--(_valeursboitemoustache_[4],yO)--
+          (_valeursboitemoustache_[4],yO+0.5boite_larg)--(_valeursboitemoustache_[2],yO+0.5boite_larg)--
+          (_valeursboitemoustache_[2],yO)--cycle) shifted (0,boite_dec);
+   tmp
+enddef;
+
+
+
+vardef Diagrammeboite(text s) text t=
+  save figtmp;
+  picture figtmp;
+  def_boite_val(s);
+  if boite_lab="":
+     def_boite_lab("","","","","")
+  elseif boite_lab="val":
+     def_boite_lab(_valeursboitemoustache_[1],_valeursboitemoustache_[2],_valeursboitemoustache_[3],_valeursboitemoustache_[4],_valeursboitemoustache_[5])
+  fi;
+  figtmp:=image(%
+    draw diagrammeboite() t;
+    if boite_points: marquepoint((_valeursboitemoustache_[1],yO+boite_dec)) t;
+                     marquepoint((_valeursboitemoustache_[5],yO+boite_dec)) t
+    fi;
+    if boite_proj:
+      for i=1,5:
+        draw scantokens("Projectionx." & boite_pos)((_valeursboitemoustache_[i],yO+boite_dec),boite_lab_[i]) t scantokens(boite_styleproj);
+      endfor
+      for i=2,3,4:
+        draw scantokens("Projectionx." & boite_pos)((_valeursboitemoustache_[i],yO+boite_dec-0.5boite_larg),boite_lab_[i]) t scantokens(boite_styleproj);
+      endfor
+    fi
+    );
+  figtmp
+enddef;
+
+
+numeric batons_diampoints;
+batons_diampoints:=5;
+
 vardef diagrammebatons(text t) =
    save $;
    picture $;
@@ -2348,10 +2574,10 @@
    $=image(%
      interim linecap:=butt;
      marque_p:="plein";
-     taillepoint:=diampointsbatons*0.5;
+     taillepoint:=batons_diampoints*0.5;
      for i=t:
         draw i--projetex(i);
-        MarquePoint(i);
+        marquepoint(i);
      endfor
      );
    taillepoint:=tmp_taillepoint;
@@ -2360,11 +2586,11 @@
 enddef;
 
 
-numeric largbarres;
-largbarres := 20;
+numeric barres_larg;
+barres_larg := 20;
 
-def barrei(expr p)=
-   (projetex(_cart(p)-0.5(largbarres,0))--(_cart(p)-0.5(largbarres,0))--(_cart(p)+0.5(largbarres,0))--projetex(_cart(p)+0.5(largbarres,0))) transformed inverse _T
+vardef barrei(expr p)=
+   (projetex(_cart(p)-0.5(barres_larg,0))--(_cart(p)-0.5(barres_larg,0))--(_cart(p)+0.5(barres_larg,0))--projetex(_cart(p)+0.5(barres_larg,0))) transformed inverse _T
 enddef;
 
 vardef diagrammebarres(text t)=
@@ -2427,32 +2653,30 @@
 enddef;
 
 
-% mai 2017
+% mai 2017 - modifiée novembre 2022
 % courbe de la densité de la loi normale
-vardef densitenormale(text t)=
-  if long_texte(t)=2: %les bornes ne sont pas précisées donc on prend Xmin et Xmax
-    densitenormalebornes(t,Xmin,Xmax)
-  else:   % les bornes sont précisées
-    densitenormalebornes(t)
-  fi
-enddef;
-
-%courbe de la densité de la loi normale entre a et b
-vardef densitenormalebornes(expr mu,sigma,a,b)=
+vardef densitenormale(expr mu,sigma)(text t)=
   vardef tmpdens(expr x)=
     (1/(sigma*sqrt(2*pi)))*exp(-0.5*(((x-mu)/sigma)**2))
   enddef;
-  courbefonc(tmpdens)(a,b)
+  courbefonc(tmpdens)(t)
 enddef;
 
-
 % Mai 2017
 % courbe de la densité de la loi exponentielle
-vardef densiteexponentielle(expr lambda)=
+vardef densiteexponentielle(expr lambda)(text t)=
   vardef tmpdens(expr x)=
     lambda*exp(-lambda*x)
   enddef;
-  courbefonc(tmpdens)(0,Xmax)
+   save k,Val;numeric k,Val[];
+   Val[1]:=0;Val[2]:=xmaxf;Val[3]:=nbf;
+   k:=1;
+   for i=t:
+      Val[k]:=i;
+      k:=k+1;
+   endfor
+   if Val[1]<0: Val[1]:=0 fi;
+   courbef_(tmpdens,Val[1],Val[2],Val[3])
 enddef;
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -2527,7 +2751,8 @@
 enddef;
 
 vardef cerclecp(expr O,A)=
-  fullcircle scaled (2*abs(_cart(A)-_cart(O))) shifted _cart(O) transformed inverse _T
+%  fullcircle scaled (2*abs(_cart(A)-_cart(O))) shifted _cart(O) transformed inverse _T
+  fullcircle scaled (2*abs(_cart(A)-_cart(O))) rotated angle(_cart(A)-_cart(O)) shifted _cart(O) transformed inverse _T
 enddef;
 
 vardef cerclecir(expr A,B,C)=
@@ -2600,31 +2825,59 @@
 enddef;
 
 
+echelle_marque_ad:=1;
 taille_marque_ad:=0.3cm;
 
 vardef marqueangledroit(expr A,O,B)=
-  parallelogramme((_cart(O)+taille_marque_ad*unitvector(_cart(A)-_cart(O))) transformed inverse _T,O,(_cart(O)+taille_marque_ad*unitvector(_cart(B)-_cart(O))) transformed inverse _T)
+  parallelogramme((_cart(O)+taille_marque_ad*echelle_marque_ad*unitvector(_cart(A)-_cart(O))) transformed inverse _T,O,(_cart(O)+taille_marque_ad*echelle_marque_ad*unitvector(_cart(B)-_cart(O))) transformed inverse _T)
 enddef;
 
+echelle_marque_s:=1;
 taille_marque_s:=0.3cm;
 angle_marque_s:=60;
 sep_marque_s:=2;
+string forme_marque_s;
+forme_marque_s:="/";
 
 vardef milieu(expr A,B)=
   0.5[A,B]
 enddef;
 
-vardef marqueunique_s(expr A,B)=
-   ((-taille_marque_s*unitvector(_cart(A)-_cart(B))/2)--(taille_marque_s*unitvector(_cart(A)-_cart(B))/2)) rotated angle_marque_s
+vardef marqueuniquesegment_s(expr A,B)=
+   ((-taille_marque_s*echelle_marque_s*unitvector(_cart(A)-_cart(B))/2)--(taille_marque_s*echelle_marque_s*unitvector(_cart(A)-_cart(B))/2)) rotated angle_marque_s
 enddef;
 
+vardef marqueuniquecroix_s(expr A,B)=
+   ((-taille_marque_s*echelle_marque_s*unitvector(_cart(A)-_cart(B))/2) rotated 45 -- (taille_marque_s*echelle_marque_s*unitvector(_cart(A)-_cart(B))/2) rotated 45 -- (0,0) -- (-taille_marque_s*echelle_marque_s*unitvector(_cart(A)-_cart(B))/2) rotated -45 -- (taille_marque_s*echelle_marque_s*unitvector(_cart(A)-_cart(B))/2) rotated -45) 
+enddef;
 
-vardef marqueseg(expr A,B,n)=
+vardef marqueuniquevague_s(expr A,B)=
+   ((-taille_marque_s*echelle_marque_s/2,0){1,-1}..(0,0){1,1}..{1,-1}(taille_marque_s*echelle_marque_s/2,0)) rotated (angle(_cart(A)-_cart(B))+angle_marque_s)
+enddef;
+
+vardef marqueuniquerond_s(expr A,B)=
+   fullcircle scaled (0.5taille_marque_s*echelle_marque_s)
+enddef;
+
+vardef marqueunique_s(expr A,B,f)=
+   if f="o":
+      marqueuniquerond_s(A,B)
+   elseif f="s":
+      marqueuniquevague_s(A,B)
+   elseif f="x":
+      marqueuniquecroix_s(A,B)
+   else:
+      marqueuniquesegment_s(A,B)
+   fi
+enddef;
+
+
+vardef marqueseg(expr A,B,n,f)=
  save $;
  picture $;
  $=image(
     for i=1 upto n:
-      draw marqueunique_s(A,B) shifted ((i-1-(n-1)/2)*sep_marque_s*unitvector(_cart(B)-_cart(A))) transformed inverse _T;
+      draw marqueunique_s(A,B,f) shifted ((i-1-(n-1)/2)*sep_marque_s*unitvector(_cart(B)-_cart(A))) transformed inverse _T;
     endfor
     );
   $ shifted milieu(_cart(A),_cart(B))
@@ -2631,13 +2884,18 @@
 enddef;
 
 vardef marquesegment(text t)=
- save n,N,Pti,Ptii,tmpfig;
+ save n,N,Pti,Ptii,tmpfig,tmpforme;
  numeric n,N;
  picture tmpfig;
+ string tmpforme;
  pair Pti,Ptii;
+ tmpforme:=substring (0,1) of forme_marque_s;
  N:=0;
+ n:=1;
  for i=t:
-   if numeric i: n:=i fi;
+   if numeric i: n:=i 
+   elseif string i: tmpforme:=substring (0,1) of i;n:=length i
+   fi;
  endfor
  tmpfig:=image(%
  for i=t:
@@ -2646,7 +2904,7 @@
      Pti := i;
   elseif pair i:
      Ptii := i;
-     draw marqueseg(Pti,Ptii,n);
+     draw marqueseg(Pti,Ptii,n,tmpforme);
   fi;
  endfor
      );
@@ -2653,8 +2911,6 @@
   tmpfig
 enddef;
 
-
-
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%   FIGURES GÉOMÉTRIQUES COMPLÈTES   %%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -2661,7 +2917,7 @@
 
 boolean AffPoints, AffCotes, AffAngles, AffVect, AffDonnees;
 AffPoints:=true; % 
-AffCotes:=true;
+AffCotes:=false;
 AffAngles:=false;
 AffVect:=true;
 AffDonnees:=false;
@@ -2700,8 +2956,41 @@
 
 %
 %%%%%%%%%%%%%%%%   Segments   %%%%%%%%%%%%%%%
+vardef Segment(suffix AA,BB)(text t)(text s)=
+  save ll_seg,posAA,anghh,count_tmp,chAA,chBB,chcote;
+  numeric ll_seg,anghh,count_tmp;
+  string chAA,chBB,chcote;
+  count_tmp:=0;
+  if AffCotes:
+     chcote:=decimal(abs(BB-AA));
+     if UnitCotes<>"":
+       chcote:="\SI[round-pad = false,round-mode=places,round-precision=" & decimal(ArrondiCotes) & "]{" & chcote & "}{" & UnitCotes & "}"
+     else:
+       chcote:="\num[round-pad = false,round-mode=places,round-precision=" & decimal(ArrondiCotes) & "]{" & chcote & "}";
+     fi
+  else:
+     chcote:=""
+  fi;
+  if AffPoints:
+     chAA:="$" & _chaine(AA) & "$";
+     chBB:="$" & _chaine(BB) & "$";
+  else:
+    chAA:="";chBB:="";
+  fi;
+  for i=t:
+    count_tmp:=count_tmp+1;
+    if count_tmp = 1: chAA:=i
+    elseif count_tmp=2: chBB:=i
+    fi;
+  endfor
+  for i=s:
+    chcote:=i;
+  endfor
+  SegmentComplet(AA,BB)(chAA,chBB,chcote)
+enddef;
 
 
+
 vardef SegmentComplet(expr AA,BB)(expr chAA,chBB,cotei) text t=
 %% 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
@@ -2715,7 +3004,11 @@
     draw AA--BB t;
     nomme[tmpana](AA,chAA) t withpen currentpen;
     nomme[tmpanb](BB,chBB) t withpen currentpen;
-    cote(AA,BB,cotei) t;
+    if xpart AA <= xpart BB:
+       cote(AA,BB,cotei) t
+    else:
+       cote(BB,AA,cotei) t
+    fi;
   );
   tmp
 enddef;
@@ -2722,7 +3015,7 @@
 
 numeric ll_seg;
 
-vardef defSegment(suffix AA,BB)(text s)=
+vardef defSegmentL(suffix AA,BB)(text s)=
 %% Définit les points AA et BB en fonction de la longueur, le point de départ et l'angle
   save count_tmp,anghh,posAA;
   numeric count_tmp,anghh;
@@ -2740,9 +3033,10 @@
       fi;
     endfor
   % Point A
-  if unknown AA: AA:=posAA fi;
+  if unknown AA: pair AA;AA:=posAA fi;
   % Point B
   if unknown BB:
+        pair BB;
         BB:=(ll_seg,0) rotated anghh shifted AA;
   else: %du coup, on change la valeur de l et angh
         ll_seg:=abs(BB-AA);anghh:=angle(BB-AA);
@@ -2749,46 +3043,19 @@
   fi;
 enddef;
 
-vardef Segment(suffix AA,BB)(text s)(text t)=
+vardef SegmentL(suffix AA,BB)(text s)(text t)(text q)=
 %% Macro utilisateur, definit les points A et B et trace la figure complète en fonctions des données
-  save ll_seg,posAA,anghh,count_tmp,chAA,chBB,chcote;
-  numeric ll_seg,anghh,count_tmp;
-  string chAA,chBB,chcote;
-  defSegment(AA,BB)(s);
-  count_tmp:=0;
-  if AffCotes:
-     if ll_seg=0:
-       chcote:=decimal(abs(BB-AA))
-     else:
-       chcote:=decimal(ll_seg)
-     fi;
-     if UnitCotes<>"":
-       chcote:="\SI[round-pad = false,round-mode=places,round-precision=" & decimal(ArrondiCotes) & "]{" & chcote & "}{" & UnitCotes & "}"
-     else:
-       chcote:="\num[round-pad = false,round-mode=places,round-precision=" & decimal(ArrondiCotes) & "]{" & chcote & "}";
-     fi
-  else:
-     chcote:=""
-  fi;
-  if AffPoints:
-     chAA:="$" & _chaine(AA) & "$";
-     chBB:="$" & _chaine(BB) & "$";
-  else:
-    chAA:="";chBB:="";
-  fi;
-  for i=t:
-    count_tmp:=count_tmp+1;
-    if count_tmp = 1: chcote:=i
-    elseif count_tmp=2: chAA:=i
-    else: chBB:=i
-    fi;
-  endfor
-  SegmentComplet(AA,BB)(chAA,chBB,chcote)
+  defSegmentL(AA,BB)(s);
+  Segment(AA,BB)(t)(q)
 enddef;
 
 
+vardef segmentL(suffix AA,BB)(text s)=
+%% Macro utilisateur, definit les points A et B et renvoie A--B
+  defSegmentL(AA,BB)(s);
+  AA--BB
+enddef;
 
-
 %%%%%%%%%%%%%%%%   Vecteurs   %%%%%%%%%%%%%%%
 
 
@@ -2814,11 +3081,13 @@
   tmp
 enddef;
 
+%vardef Vecteur(suffix
+
 pair AA_vect,uu_vect;
 
-vardef defVecteur(text t)(text s)=
+vardef defVecteurL(text t)(text s)=
 %% t peut être (u), (u,A) ou (u,A,B)
-%% Définit le vecteur u et, éventuellement, les points AA et BB en fonction de la longueur, le point de départ et l'angle
+%% Définit le vecteur u et, éventuellement, les points A et B en fonction de la longueur, le point de départ et l'angle
   save anghh,count_tmp,ufixe,ll,posAA,anghh;
   numeric anghh,count_tmp,ll;
   pair posAA;
@@ -2857,7 +3126,7 @@
 enddef;
 
 
-vardef Vecteur(text q)(text s)(text t) text r=
+vardef VecteurL(text q)(text s)(text t) text r=
 %% Macro utilisateur, definit le vecteur u et éventuellement les points A et B et trace la figure complète en fonctions des données
   save tmp,posAA,count_tmp,chAA,chBB,chvect,AA_vect,uu_vect,ch;
   numeric count_tmp;
@@ -2864,7 +3133,7 @@
   pair posAA,AA_vect,uu_vect;
   string chAA,chBB,chvect,ch;
   picture tmp;
-  defVecteur(q)(s);
+  defVecteurL(q)(s);
   chAA:="";chBB:="";chvect:="";
   count_tmp:=0;
   forsuffixes i=q:
@@ -2898,10 +3167,32 @@
 
 boolean rep_ad_A,rep_ad_B,rep_ad_C;
 
+def cotepolyplacee(suffix ptA,ptB)(expr chcote,sensdirect) text t=
+   if xpart ptA<= xpart ptB:
+       if sensdirect:
+         cote(ptA,ptB,chcote) t
+       else:
+         cote.top(ptA,ptB,chcote) t
+       fi
+   else:
+       if sensdirect:
+         cote.top(ptB,ptA,chcote) t
+       else:
+         cote(ptB,ptA,chcote) t
+       fi
+   fi
+enddef;
+
 vardef TriangleComplet(suffix AA,BB,CC)(expr chAA,chBB,chCC,coteAB,coteBC,coteCA,angAA,angBB,angCC) text t =
-%% Trace le triangle, les noms des points, les cotes et le sangles
-  save tmpang,tmpfig,tmpscale;
+%% Trace le triangle, les noms des points, les cotes et les angles
+  save tmpang,tmpfig,tmpscale,sensdir;
   numeric tmpang,tmpscale;
+  boolean sensdir;
+  if angle(CC rotatedaround(AA,-angle(BB-AA)) - AA)>0:
+    sensdir:=true
+  else:
+    sensdir:=false
+  fi;
   tmpscale:=defaultscale;
   picture tmpfig;
   tmpfig:=image(%
@@ -2918,10 +3209,11 @@
         cote(AA,BB,coteAB) t;
         if rep_type_triangle=0: cote(BB,CC,coteBC) t fi;
         if rep_type_triangle<=1: cote(CC,AA,coteCA) t fi;
-     elseif AffCotes:
-        cote(AA,BB,coteAB) t;
-        cote(BB,CC,coteBC) t;
-        cote(CC,AA,coteCA) t;
+%     elseif AffCotes:
+     else:
+        cotepolyplacee(AA,BB)(coteAB,sensdir) t;
+        cotepolyplacee(BB,CC)(coteBC,sensdir) t;
+        cotepolyplacee(CC,AA)(coteCA,sensdir) t;
      fi
      defaultscale:=EchelleAngles;
      if AffDonnees and (rep_type_triangle<3):
@@ -2984,11 +3276,11 @@
   forsuffixes i=t:
     nbsommet:=nbsommet+1;
     if nbsommet=1:
-       if known i: sommetdefiniA:=true; rep_tri_AA:=i fi
+       if known i: sommetdefiniA:=true; rep_tri_AA:=i else: pair i fi
     elseif nbsommet=2:
-       if known i: sommetdefiniB:=true; rep_tri_BB:=i fi
+       if known i: sommetdefiniB:=true; rep_tri_BB:=i else: pair i fi
     else:
-       if known i: sommetdefiniC:=true; rep_tri_CC:=i fi
+       if known i: sommetdefiniC:=true; rep_tri_CC:=i else: pair i fi
     fi;
   endfor
   count_tmp:=0;
@@ -3074,11 +3366,11 @@
   forsuffixes i=t:
     nbsommet:=nbsommet+1;
     if nbsommet=1:
-       if known i: sommetdefiniA:=true; rep_tri_AA:=i fi
+       if known i: sommetdefiniA:=true; rep_tri_AA:=i else: pair i fi
     elseif nbsommet=2:
-       if known i: sommetdefiniB:=true; rep_tri_BB:=i fi
+       if known i: sommetdefiniB:=true; rep_tri_BB:=i else: pair i fi
     else:
-       if known i: sommetdefiniC:=true; rep_tri_CC:=i fi
+       if known i: sommetdefiniC:=true; rep_tri_CC:=i else: pair i fi
     fi;
   endfor
   count_tmp:=0;
@@ -3155,11 +3447,11 @@
   forsuffixes i=t:
     nbsommet:=nbsommet+1;
     if nbsommet=1:
-       if known i: sommetdefiniA:=true; rep_tri_AA:=i fi
+       if known i: sommetdefiniA:=true; rep_tri_AA:=i else: pair i fi
     elseif nbsommet=2:
-       if known i: sommetdefiniB:=true; rep_tri_BB:=i fi
+       if known i: sommetdefiniB:=true; rep_tri_BB:=i else: pair i fi
     else:
-       if known i: sommetdefiniC:=true; rep_tri_CC:=i fi
+       if known i: sommetdefiniC:=true; rep_tri_CC:=i else: pair i fi
     fi;
   endfor
   count_tmp:=0;
@@ -3259,6 +3551,9 @@
   elseif arrondi(10**rep_int_arr,rep_tri_la**2)=arrondi(10**rep_int_arr,(rep_tri_lc)**2+(rep_tri_lb)**2):
          rep_ad_A:=true
   fi;
+  rep_tri_lc:=arrondi(10**ArrondiCotes,rep_tri_lc);
+  rep_tri_lb:=arrondi(10**ArrondiCotes,rep_tri_lb);
+  rep_tri_la:=arrondi(10**ArrondiCotes,rep_tri_la);
 enddef;
 
 vardef TriangleLLA(text q)(text s)(text p)(text c)(text a) text r=
@@ -3268,6 +3563,13 @@
   ProcessAffTriangles(q)(p)(c)(a) r
 enddef;
 
+vardef triangleLLA(suffix AA,BB,CC)(text s)=
+%% Macro utilisateur, definit le triangle et renvoie la ligne
+  defTriangleLLA(AA,BB,CC)(s);
+  rep_type_triangle:=0;
+  triangle(AA,BB,CC)
+enddef;
+
 vardef TriangleLAA(text q)(text s)(text p)(text c)(text a) text r=
 %% Macro utilisateur, definit le triangle et appelle la macro de tracé
   defTriangleLAA(q)(s);
@@ -3275,6 +3577,13 @@
   ProcessAffTriangles(q)(p)(c)(a) r
 enddef;
 
+vardef triangleLAA(suffix AA,BB,CC)(text s)=
+%% Macro utilisateur, definit le triangle et renvoie la ligne
+  defTriangleLAA(AA,BB,CC)(s);
+  rep_type_triangle:=0;
+  triangle(AA,BB,CC)
+enddef;
+
 vardef TriangleLLL(text q)(text s)(text p)(text c)(text a) text r=
 %% Macro utilisateur, definit le triangle et appelle la macro de tracé
   defTriangleLLL(q)(s);
@@ -3282,6 +3591,14 @@
   ProcessAffTriangles(q)(p)(c)(a) r
 enddef;
 
+vardef triangleLLL(suffix AA,BB,CC)(text s)=
+%% Macro utilisateur, definit le triangle et renvoie la ligne
+  defTriangleLLL(AA,BB,CC)(s);
+  rep_type_triangle:=0;
+  triangle(AA,BB,CC)
+enddef;
+
+
 vardef Triangle(text q)(text p)(text c)(text a) text r=
   defTriangle(q);
   rep_type_triangle:=3;
@@ -3296,6 +3613,9 @@
   string chAA,chBB,chCC,cha,chb,chc,changA,changB,changC,ch;
   chAA=chBB=chCC=cha=chb=chc=changA=changB=changC="";
   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:
@@ -3311,29 +3631,31 @@
   count_tmp:=0;
   for i=p:
     count_tmp:=count_tmp+1;
-    if count_tmp=1:     chAA:=
-    elseif count_tmp=2: chBB:=
-    else:               chCC:=
+    if (count_tmp=1) and (i<>"~"):     chAA:=
+    elseif (count_tmp=2) and (i<>"~"): chBB:=
+    elseif (count_tmp=3) and (i<>"~"): chCC:=
     fi
     i;
   endfor
   % Cotes données par les longueurs
-    if UnitCotes<>"":
-       cha:=AffichageCoteAvecUnite(rep_tri_la,ArrondiCotes,UnitCotes);
-       chb:=AffichageCoteAvecUnite(rep_tri_lb,ArrondiCotes,UnitCotes);
-       chc:=AffichageCoteAvecUnite(rep_tri_lc,ArrondiCotes,UnitCotes);
-     else:
-       cha:=AffichageCoteSansUnite(rep_tri_la,ArrondiCotes);
-       chb:=AffichageCoteSansUnite(rep_tri_lb,ArrondiCotes);
-       chc:=AffichageCoteSansUnite(rep_tri_lc,ArrondiCotes);
-     fi
+    if AffCotes:
+      if UnitCotes<>"":
+        cha:=AffichageCoteAvecUnite(rep_tri_la,ArrondiCotes,UnitCotes);
+        chb:=AffichageCoteAvecUnite(rep_tri_lb,ArrondiCotes,UnitCotes);
+        chc:=AffichageCoteAvecUnite(rep_tri_lc,ArrondiCotes,UnitCotes);
+      else:
+        cha:=AffichageCoteSansUnite(rep_tri_la,ArrondiCotes);
+        chb:=AffichageCoteSansUnite(rep_tri_lb,ArrondiCotes);
+        chc:=AffichageCoteSansUnite(rep_tri_lc,ArrondiCotes);
+      fi
+    fi
   % On modifie les cotes si des valeurs sont passées dans c
   count_tmp:=0;
   for i=c:
     count_tmp:=count_tmp+1;
-    if count_tmp=1:     cha:=
-    elseif count_tmp=2: chb:=
-    else:               chc:=
+    if (count_tmp=1) and (i<>"~"):     cha:=
+    elseif (count_tmp=2) and (i<>"~"): chb:=
+    elseif (count_tmp=3) and (i<>"~"): chc:=
     fi
     i;
   endfor
@@ -3345,13 +3667,14 @@
   count_tmp:=0;
   for i=a:
     count_tmp:=count_tmp+1;
-    if count_tmp=1:     changA:=
-    elseif count_tmp=2: changB:=
-    else:               changC:=
+    if (count_tmp=1) and (i<>"~"):     changA:=
+    elseif (count_tmp=2) and (i<>"~"): changB:=
+    elseif (count_tmp=3) and (i<>"~"): changC:=
     fi
     i;
   endfor
   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) r
 enddef;
@@ -3775,8 +4098,8 @@
 boolean rep_tab;
 rep_tab:=false;
 
-color coultableau[],coullignes;
-numeric eplignes;
+color table_coul[],grille_coul;
+numeric grille_ep;
 
 
 
@@ -3789,12 +4112,12 @@
     vv[ind]:=i;
   endfor
   vv[4]:=vv[ind];
-  coullignes:=black;
-  eplignes:=0.7;
+  grille_coul:=black;
+  grille_ep:=0.7;
   tab_init;
   deftableau(vv[1],vv[2],vv[3],vv[4]);
-  coultableau[1]:=0.45white;
-  coultableau[2]:=0.9white;
+  table_coul[1]:=0.45white;
+  table_coul[2]:=0.9white;
 enddef;
 
 
@@ -3806,19 +4129,23 @@
 
 
 vardef grille(expr dx,dy)=
- save coul;color coul;
- coul:=coullignes;
-  ep := eplignes;
+ save coultmp,eptmp;
+ color coultmp; numeric eptmp;
+ coultmp:=q_coul;eptmp:=q_ep;
+ q_coul:=grille_coul;
+ q_ep := grille_ep;
  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)
+ quadrillage(dx,dy) shifted _cart(0.5,0.5) hide(q_coul:=coultmp;q_ep:=eptmp)
 enddef;
 
 vardef damier(expr dx,dy) text t=
- save coul;color coul;
- coul:=coullignes;
-  ep := eplignes;
+ save coultmp,eptmp;
+ color coultmp; numeric eptmp;
+ coultmp:=q_coul;eptmp:=q_ep;
+ q_coul:=grille_coul;
+ q_ep := grille_ep;
  save count_tmp,pn;
  numeric count_tmp,pn;
  save QuadXmin,QuadXmax,QuadYmin,QuadYmax;
@@ -3829,11 +4156,12 @@
  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];
+     fill ((i,j) -- (i+dx,j) -- (i+dx,j+dy) -- (i,j+dy) -- cycle) shifted (-0.5,-0.5) withcolor table_coul[count_tmp];
    endfor
    if pn=0: count_tmp:=3-count_tmp fi;
  endfor
- draw quadrillage(dx,dy) shifted _cart(0.5,0.5) t
+ draw quadrillage(dx,dy) shifted _cart(0.5,0.5) t;
+ q_coul:=coultmp;q_ep:=eptmp
  )
 enddef;
 
@@ -4064,7 +4392,7 @@
 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
+    draw (contour_case(n,m)) withpen pencircle scaled grille_ep withcolor grille_coul
     )
 enddef;
 



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