\documentclass[11pt,a4paper,french]{article}
% to compile this doc (needs geometriesyr16.mp http://melusine.eu.org/syracuse/poulecl/macros/):
% (pdf)latex repere-doc.tex
% mpost repere-doc.mp
% mpost repere-doc.mp
% (pdf)latex repere-doc.tex

  \usepackage{calc,ifthen}

  \usepackage[utf8]{inputenc}
  \usepackage[T1]{fontenc}
  \usepackage{lmodern}
  \usepackage{textcomp}

  \usepackage{geometry}
  \geometry{twoside,hmargin=2cm,vmargin={1.5cm,1.8cm},includefoot}

  \usepackage{mflogo}
  
  \usepackage[output-decimal-marker={,}]{siunitx}

  \usepackage{multicol}
  \setlength{\multicolsep}{3pt}
  \setlength{\columnsep}{0pt}
  
  \usepackage[toc]{multitoc}
  
  \usepackage{enumitem}
  \setlist[description]{font=\ttfamily\bfseries\color{blue}}
  
  \usepackage[svgnames]{xcolor}

  \usepackage{graphicx}
  \usepackage{ifpdf}
    \ifpdf
      \DeclareGraphicsRule{*}{mps}{*}{}
    \fi

  \usepackage{url}
  \usepackage{verbatim}
  \usepackage{fancyvrb}
  
  \usepackage{array}
  \usepackage{tabularx}
  \renewcommand{\tabularxcolumn}[1]{>{\arraybackslash}m{#1}}
  
  \usepackage{tcolorbox}
  \tcbset{colframe=black,boxsep=0pt,left=3pt,right=3pt,top=0pt,bottom=0pt,boxrule=0.4pt,colback=LightGoldenrod}
  
  \usepackage{listings}
  \lstset{columns=flexible,%
          language=MetaPost,%
          showstringspaces=false,%
          basicstyle=\ttfamily}


  \usepackage{babel}
  \usepackage[colorlinks=true,urlcolor=blue]{hyperref}



%%%%%%%%%%%%%%%%%%% moreverb.sty
\makeatletter
\newwrite\verbatim@out
  \immediate\openout \verbatim@out \jobname.mp
\newwrite\temp@code
\def\verbatimwrite{%
  \@bsphack
  \immediate\openout \temp@code figtmp.mp
  \let\do\@makeother\dospecials
  \catcode`\^^M\active \catcode`\^^I=12
  \def\verbatim@processline{%
    \immediate\write\verbatim@out
      {\the\verbatim@line}%
    \immediate\write\temp@code
          {\the\verbatim@line}
     }%
  \verbatim@start}

\def\endverbatimwrite{%
  \immediate\closeout\temp@code
  \@esphack
  }%
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newlength{\largeurcode}
\newlength{\largeurfig}
\newcounter{numfig}
\setcounter{numfig}{0}

\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
                 }

\newcommand{\codevert}{%
                   {\centering
                   \begin{minipage}[c]{\largeurcode}
                        \lstinputlisting[frame=single,frameround=tttt,backgroundcolor=\color{LightGoldenrod}]{figtmp.mp}
                    \end{minipage}
                    \par\noindent}
                 }

\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}\par
                    \end{minipage}}{}
               \par}


\newenvironment{codecache}%
            {\verbatimwrite}{\endverbatimwrite}
            
\newcounter{reptmp}

\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}
                    \qquad}{}
                   }
                 \par}
            

\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}
                   }


\newenvironment{exemple}[1][0.5]%
                   {\debutexemple
                   \codefigure{0}{#1}{1}
                   }%
                   {\endcodefigure
                   \par\vspace{2ex}}

\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}}{}
                   }


\newcommand{\vect}[1]{\overrightarrow{#1\rule{0.1em}{0ex}}}

\begin{document}
\title{Documentation de \texttt{repere.mp}}
\date{\today}
\author{Olivier \textsc{Péault}%
\footnote{E-mail : \href{mailto:o.peault@gmail.com}{\texttt{o.peault@gmail.com}}}}
\maketitle

\setcounter{tocdepth}{2}

\setlength{\columnsep}{25pt}
\tableofcontents
\setlength{\columnsep}{10pt}




\begin{codecache}
input geometriesyr16;
input latexmp;
input repere;
\end{codecache}


\section{Utilisation du fichier}
Les macros du fichier \verb+repere.mp+ ont pour but de simplifier la création de figures dans un repère du plan avec \MP{}. L'idée de départ est de coller le plus possibles aux besoins de l'enseignement secondaire de mathématiques.

Il est possible d'utiliser \verb+repere+ et \verb+geometriesyr+ (les macros de Christophe \textsc{Poulain} pour la géométrie disponibles à l'adresse \url{http://melusine.eu.org/syracuse/poulecl/macros/}) dans une même figure comme le montrent les exemples page \pageref{exgeom}.

Le fichier \verb+repere.mp+ doit être placé dans un répertoire accessible à \MP{} (Par ex. le répertoire \verb+metapost+ du \verb+texmf+ local). De plus, la ligne \verb+input repere;+ doit apparaître dans le document contenant les figures.


Certaines des étiquettes (noms de points, de courbes, de vecteurs...) sont composées automatiquement au format \LaTeX{} mais la compilation peut devenir assez longue pour un nombre important de figures car un fichier est créé et compilé automatiquement par \MP{} pour chaque étiquette. Il est alors possible d'utiliser le fichier \verb+latexmp.mp+ à condition de placer l'instruction \verb+input latexmp;+ avant l'instruction \verb+input repere;+. Attention, utiliser \verb+latexmp.mp+ oblige à compiler deux fois les documents.


\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 :

\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}

\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}



\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.

\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)$.

\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}




\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+.

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é.

\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.

\item[axey.pos(grad,val)] axe des ordonnées. La valeur par défaut de \verb+pos+ est \verb+lft+.
\end{description}


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{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}

Les axes sont dessinés, gradués et étiquetés par défaut sur toute la longueur du repère utilisateur. Pour des valeurs différentes on peut utiliser les macros suivantes :



\begin{exemple}
repere(-3,3,1cm,-1,1,1cm);
draw axex(1,1);
fin;
\end{exemple}

\begin{exemple}
repere(-3,3,1cm,-1,1,1cm);
draw axex.top(1,1);
fin;
\end{exemple}

\begin{exemple}
repere(-3,3,0.8cm,-2.5,2.5,1cm);
draw axes(1,1) withcolor pourpre;
draw cadre;
fin;
\end{exemple}

\begin{exemple}
repere(-3,3,0.8cm,-2.5,2.5,1cm,60);
draw axes.lrt(1,1);
draw cadre;
fin;
\end{exemple}

\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;
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 :


\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.

\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.
\end{description}

\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);
fin;
\end{exemple}


\begin{description}
 \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{exemple}
repere(-0.5,3,0.8cm,-0.5,2.5,1cm);
setaxes(0,3,0,2.5);
draw axeso(1,1);
fin;
\end{exemple}

\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;
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+.

\item[axeypi.pos(n,d)] axe des ordonnées gradué et étiqueté avec un pas de $\frac{n\pi}{d}$.

\item[axespi.pos(n,d)] les deux axes gradués et étiquetés avec un pas de $\frac{n\pi}{d}$.

\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;
fin;
\end{exemple}

\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+""+.

\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{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;
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.

\end{description}

\begin{exemple}
repere(-1,4,1.2cm,-1,3.5,1cm);
extranumx:="e3";
extranumy:="0000";
draw axes(1,1);
draw cadre;
fin;
\end{exemple}


\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+.
\end{description}


\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}

\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;
fin;
\end{exemple}

\begin{description}
\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+.
\end{description}


\begin{exemple}
repere(-2.5,2.5,1cm,-2.5,2.5,1cm);
setquad(-2,2,-2,2);
draw papiermillimetre;
draw axes(1,1);
fin;
\end{exemple}

\begin{description}
\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}
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 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.

\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);
flecheaxe:=false;
draw axesn(1,1);
drawoptions(withcolor marine);
draw base(O,i,j);
interaxes(2,1);
draw base(I,e1,e2);
drawoptions();
draw cadre;
fin;
\end{exemple}

\begin{exemple}
repere(-1,2.5,0.8cm,-1,2,1cm);
flecheaxe:=false;
draw axes(1,0);
draw basep(O,I,J);
draw cadre;
fin;
\end{exemple}

\section{Points, vecteurs}

\subsection{Points}
\label{points}
\begin{description}
\item[\_c(x,y)] désigne le point (ou le vecteur) de coordonnées cartésiennes \verb+x+ et \verb+y+ dans le repère utilisateur.

\item[pol(r,t)] désigne le point (ou le vecteur) de coordonnées $(r\cos t;r\sin t)$ dans le repère utilisateur.

\item[pold(r,t)] même chose avec l'angle donné en degrés.
\end{description}

Les macros suivantes sont directement inspirées des macros similaires de \verb+geometriesyr16.mp+.


\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.

\item[pointe(A,B,C...)] permet de marquer plusieurs points.

\item[nomme.pos(A,nom)] marque le point et affiche son nom à la position \verb+pos+. \verb+nom+ peut être soit une chaîne de caractères, soit une expression du type \verb+btex ... etex+, soit une autre figure. Si \verb+nom+ est omis, le nom \verb+A+ est affiché. S'il s'agit d'un élément d'un tableau de points (\verb+A1+, \verb+A2+...), le nombre est affiché en indice.
\end{description}


\begin{exemple}[0.6]
repere(-3,3,0.9cm,-2.5,5,0.9cm);
pair A,B,C[],D,E,F;
A=_c(1,1);B=_c(2,3);
D=_c(-2,-1);E=_c(-1,-1);F=_c(-1,-2);
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.bot(pol(sqrt(2),-pi/4),
          LaTeX("$\sqrt{2}e^{-i\frac{\pi}{4}}$"));
nomme.bot(_c(-1.5,1),LaTeX("$(-1,5;1)$"));
marque_p:="plein";drawoptions(withcolor violet);
for i=2 upto 4:
  C[i]=_c(-3+i/2,i);nomme.lft(C[i]);
endfor
draw cadre;
fin;
\end{exemple}

\subsection{Vecteurs}
\begin{description}
\item[vecteur.pos(A,u,nom)] figure formée du représentant du vecteur \verb+u+ d'origine \verb+A+ ainsi que de \verb+nom+ placé à la position \verb+pos+ par rapport au milieu de la flèche. Si \verb+nom+ est une chaine de caractère, il sera affiché avec une flèche. Si \verb+nom+ est omis, \verb+u+ surmonté d'une flèche est utilisé. S'il s'agit d'un élément d'un tableau de points (\verb+u1+, \verb+u2+...), le nombre est affiché en indice.
\end{description}


\begin{exemple}[0.6]
repere(-1,5.5,0.7cm,-4,4,0.8cm);
pair A,B,C[],u,v,w[];
u=_c(2,2);v=_c(2,-1);
A=_c(1,1);B=A+u;
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]=_c(1,i-4);w[i]=_c(1.5,0.5*i-1);
draw vecteur.bot(C[i],w[i]);
endfor
draw cadre;
fin;
\end{exemple}


\section{Droites, courbes...}

\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.

\item[droite(a,b)] droite d'équation $y=ax+b$ dans le repère utilisateur.

\item[droite(c)] droite d'équation $x=c$ dans le repère utilisateur.
\end{description}


\begin{exemple}[0.65]
repere(-2,3,1cm,-2,3,1cm);
pair A,B;
A=_c(-0.5,-1);B=_c(1.5,1.5);
draw axes(1,0);
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
fin;
\end{exemple}

\subsection{Courbes et fonctions}
\MP{} permet de définir simplement des fonctions (en utilisant par exemple la syntaxe suivante :
\verb|vardef f(expr x)=2x+1 enddef;|) et de définir des courbes passant par des points donnés (\verb+A..B..C+). Ces possibilités sont utilisées dans les macros qui suivent.

\begin{description}
\item[courbefonc(f,xmin,xmax,n) ou courbefonc(f)(xmin,xmax,n)] courbe représentant la fonction \verb+f+ entre \verb+xmin+ et \verb+xmax+ en utilisant \verb+n+ points d'interpolation.

\item[courbepoints(f,xmin,xmax,n)] ne trace que les \verb+n+ points sans les relier. Les points sont dessinés en fonction de la valeur de \verb+marque_p+ (voir \ref{points}).

\item[fonccourbe.p(x)] image de \verb+x+ par la fonction dont la courbe représentative est le chemin \verb+p+. La macro renvoie 0 si la fonction n'est pas définie.

\item[nomme.pos(p,x,nom)] affiche \verb+nom+ au point d'abscisse \verb+x+ de la courbe \verb+p+ à la position \verb+pos+. \verb+nom+ peut être soit une chaîne de caractères, soit une expression du type \verb+btex ... etex+, soit une autre figure. Si \verb+nom+ est omis, le nom \verb+p+ est affiché. S'il s'agit d'un élément d'un tableau de points (\verb+p1+, \verb+p2+...), le nombre est affiché en indice.
\end{description}


\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;
path C_f;
draw axes(1,1);
drawoptions(withcolor moutarde);
C_f=courbefonc(f)(-2,5,50);
draw C_f withpen pencircle scaled 1;
nomme.llft(C_f,4.7);
drawoptions(withcolor beige);
draw courbepoints(g,0,4,9);
fin;
\end{exemple}

\begin{description}
\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.

\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.
\end{description}


\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;
p=_c(-2,-2).._c(-1,1).._c(0,2).._c(1,1)
       .._c(2,-2).._c(3,-3).._c(3.5,-2.5)
       .._c(4,-1);
C_f=courbefonc(f,-2,4,40);
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 droite(0,-1.5) dashed evenly;
ptantecedents(A,-1.5,p);
nomme.lrt(A1);nomme.llft(A2);
nomme.lrt(A3);
fin;
\end{exemple}

\begin{description}
\item[marquepointcourbe(p,x1,x2,...)] marque les points de la courbe \verb+p+ d'abscisses \verb+x1+, \verb+x2+... La marque dépend de la valeur de \verb+marque_p+.

\item[marquepointchemin(p,n1,n2,...)] dans le cas d'un chemin défini par \verb+A..B..C..+, marque le \verb+n1+ème point, le \verb+n2+ième point... La marque dépend de la valeur de \verb+marque_p+. Attention, le premier point est numéroté 0.

\end{description}



\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;
p=_c(-2,-2).._c(-1,1).._c(0,2)
  .._c(1,1).._c(2,-2).._c(3,-3)
  .._c(3.5,-2.5).._c(4,-1);
C_f=courbefonc(f,-2,4,40);
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);
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+.

\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+.

\item[tangente.droite(p,x,long)] idem à droite.

\item[tangente.double(p,x,long)] idem des deux côtés.
\end{description}


\begin{exemple}
repere(-2.5,4.5,1cm,-3.5,2.5,1cm);
path p,q;
p=_c(-2,-2){dir 60}.._c(-1,1)
  .._c(0,2){right}.._c(1,1).._c(2,-2)
  .._c(3,-3){right}.._c(4,-2){(1,2)};
q=courbefonc(der.p,-1,4,40);
draw axes(1,1);
drawoptions(withpen pencircle scaled 1);
draw p withcolor  bleu;
nomme.rt(p,0.7,LaTeX("$y=f(x)$"));
draw q withcolor  rouge;
nomme.lft(q,3.7,LaTeX("$y=f'(x)$"));
drawoptions(withpen pencircle scaled 1
            withcolor violet);
draw tangente.double(p,0);
draw tangente.droite(p,-2,40);
draw tangente.gauche(p,4,30);
draw tangente(p,2.5);
fin;
\end{exemple}



\section{Suites}
\begin{description}
\item[suite(u,deb,fin)] figure formée des points $(i;u_i)$ pour $i$ variant entre \verb+deb+ et \verb+fin+.
\end{description}


\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;
fin;
\end{exemple}

\begin{description}
\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}[0.55]
repere(-2,4.5,1cm,-1,4,1cm);
vardef f(expr x)=sqrt(2*x+4) enddef;
path C_f,sr;
C_f=courbefonc(f,-2,5,50);
sr=suiterec(f,0,3,-1.2);
draw axes(1,0);
drawoptions(withpen pencircle scaled 1);
draw C_f withcolor bleu;
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}
repere(-0.5,5,1cm,-0.5,5,1cm);
vardef f(expr x)=4-0.8*x enddef;
path C_f,sr;
C_f=courbefonc(f,-1,5,10);
sr=suiterec(f,0,5,0.2);
draw axes(1,0);
drawoptions(withpen pencircle scaled 1);
draw C_f  withcolor bleu;
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+$.
\end{description}


\begin{exemple}
repere(-3.5,6,0.7cm,-2.5,4.5,0.7cm);
vardef f(expr x)= -(x/4)**3+0.75x enddef;
vardef g(expr x)= -((x-2)**2)/9+4 enddef;
path C_f,C_g,p,q;
C_f:=courbefonc(f,-3.5,6,40);
C_g:=courbefonc(g,-3.5,6,40);
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;
draw axes(1,1);
drawoptions(withpen pencircle scaled 1);
draw C_f withcolor Bleu;
draw C_g withcolor Rouge;
draw cadre;
fin;
\end{exemple}

\begin{description}
\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{exemple}
repere(-2.5,6,0.8cm,-2,5,0.8cm);
vardef f(expr x)=
 -((x-2)**4)/32+((x-2)**2)/2+1
enddef;
path Cf,r[];
Cf=courbefonc(f,-2.5,6.5,50);
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;
draw axes(1,0);
draw Cf withcolor Bleu
               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{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);
d3=droite(-0.5,-0.5);
dp1=demiplansup(d1);
dp2=demiplansup(d2);
dp3=demiplaninf(d3);
for i=1 upto 3:
fill dp[i] withcolor 0.7Lime;
endfor
draw axes(1,1);
drawoptions(withpen pencircle scaled 1
                     withcolor Vertfonce);
draw d1;draw d2;
draw d3 dashed evenly;
drawoptions();
draw cadre;
fin;
\end{exemple}

\subsection{Remplissage}
Pour remplir des chemins fermés avec autre chose que de la couleur, \verb+repere+ permet l'utilisation de la syntaxe \verb+fill p avec motif+ où \verb+motif+ est un des motifs décrits ci-dessous. Cette instruction peut être complétée par des options de dessin (\verb+withpen+, \verb+withcolor+...).

\begin{description}
\item[hachures(pas,angle)] hachures espacées de \verb+pas+ et formant un angle en degrés de \verb+angle+ avec l'horizontale. Si les valeurs sont omises, \verb|pas| vaut 5 et \verb+angle+ vaut 60.


\item[briques(larg,haut,dec)] briques de largeur \verb+larg+, de hauteur \verb+haut+ et décalées d'une ligne à l'autre de \verb+dec+. Si les valeurs sont omises, \verb|larg| vaut 12, \verb|haut| vaut 6 et \verb+dec+ vaut 6.


\item[vagues(per,amp,dec)] (d'après le manuel de l'utilisateur) \og vagues \fg{} de période \verb+per+, d'amplitude \verb+amp+ et décalées d'une ligne à l'autre de \verb+dec+. Si les valeurs sont omises, \verb|per| vaut 20, \verb|amp| vaut 3 et \verb+dec+ vaut 10.
\end{description}



\begin{exemple}[0.55]
repere(-1.5,4.5,1cm,-1.5,7.5,1cm);
path c[];picture lab;numeric u;u:=3cm;
c1=fullcircle scaled 2.5cm;
for k=1 upto 6:
  i:=(k-1) mod 2;j:=(k-1) div 2;
  c[k]:=c1 shifted (u*i,u*j);
endfor;
fill c1 withcolor lime;
fill c1 avec hachures(10,30) dashed evenly;
fill c2 withcolor lime;
fill c2 avec hachures();
fill c3 withcolor (0,0.65,0.8,0.48);
fill c3 avec briques(15,5,4);
fill c4 withcolor (0,0.65,0.8,0.48);
fill c4 avec briques();
fill c5 withcolor (1,0,0,0.2);
fill c5 avec vagues(30,10,20)
           withpen pencircle scaled 2;
fill c6 withcolor (1,0,0,0.2);
fill c6 avec vagues();
for k=1 upto 6:
  i:=(k-1) mod 2;j:=(k-1) div 2;
  draw c[k];
  lab:=thelabel("c"&decimal(k),u*(i,j));
  unfill bbox lab;draw lab;
endfor;
fin;
\end{exemple}



\section{Projections sur les axes}

\subsection{Projetés}
\begin{description}
\item[projetex(A)] projeté de \verb+A+ sur l'axe des abscisses parallèlement à l'axe des ordonnées.

\item[projetey(A)] projeté de \verb+A+ sur l'axe des ordonnées parallèlement à l'axe des abscisses.

\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.

\item[projectiony.pos(A,lab,dec)] même chose sur l'axe des ordonnées.

\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{exemple}[0.6]
repere(-1.5,3.5,1cm,-2.2,2.5,1cm);
path Cf; pair A[];
vardef f(expr x)= x**2-2x-0.5 enddef;
Cf=courbefonc(f,-2,4,40);
ptantecedents(A,2,Cf);
draw axes(1,1);
draw Cf withpen pencircle scaled 1 withcolor bleu;
drawoptions(dashed evenly withcolor rouge);
draw projectionaxes(_c(1.3,f(1.3)),
         LaTeX("$x$"),LaTeX("$f(x)$"));
draw projectionx.urt(A1,LaTeX("$x_1$"));
draw projectionx.llft(A2,LaTeX("$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{exemple}[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,-1,5,50)
       withpen pencircle scaled 1 withcolor bleu;
drawoptions(dashed evenly withcolor rouge);
draw projectionx.bot(_c(1,f(1)));
draw projectiony.llft(_c(2.5,f(2.5)),"0,75");
draw projectionaxes(_c(4,f(4)));
drawoptions(withcolor violet);
draw intervallex.OF(1,4);
draw intervalley.FF(0.75,3);
label(LaTeX("$f(]1;4])=[0,75;3]$"),_c(2.5,4));
draw cadre;
fin;
\end{exemple}



\section{Statistiques}

\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{exemple}
repere(-0.5,10,0.7cm,-1,5,0.7cm);
 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;
fin;
\end{exemple}

\begin{exemplev}[1]{1}
repere(-1,11,0.8cm,-1,5,0.7cm);
 settout(-0.5,10.5,0,1);
 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;
 drawoptions(withcolor blue);
 draw boitemoustache(0,3.14,6,8,10,2cm,0.7cm);
 draw projboitemoustache.bot(0.00456,"$\pi$","$\num{2x3}$","$x$","Max")
                                                                 dashed evenly;
fin;
\end{exemplev}

\section{Divers}
\subsection{Composition des étiquettes}
Tous les textes et étiquettes peuvent être composés en utilisant la macro ci-dessous. Cette macro utilise \verb+latexmp+ si ce fichier est chargé ou l'écriture dans un fichier externe (adaptation de la macro \verb+TEX+) dans le cas contraire.
\begin{description}
 \item[LaTeX(ch)] \label{latex} Figure formée de la chaîne \verb+ch+ composée avec \LaTeX. Il est donc possible d'utiliser la macro \verb|decimal()| de \MP.
\end{description}


\begin{exemple}[0.65]
repere(-1,7,1cm,-1,1,1cm);
for i=2 upto 6:
label(LaTeX("$\frac{1}{"&decimal(i)&"}$"),(i*cm,0));
endfor
fin;
\end{exemple}


\subsection{Couleurs}
Certaines couleurs sont définies par leur nom et peuvent être utilisées directement : 

\begin{center}
\begin{figreperedoc}
repere(0,18,1cm,-3,1,1cm);
 path rectangle;
 save a,b,dech,decv;
 a:=25;b:=12;dech:=70;decv:=-20;
 rectangle = (0,0)--(a,0)--(a,b)--(0,b)--cycle;
 vardef couleur(expr t)=
    image(%
          fill rectangle withcolor scantokens(t);
          label.rt(LaTeX("\smash{" & t & "}"),(a,b/4))
          )
 enddef;
 draw couleur("rouge");
 draw couleur("vert") shifted (dech,0);
 draw couleur("bleu") shifted (2*dech,0);
 draw couleur("cyan") shifted (3*dech,0);
 draw couleur("magenta") shifted (4*dech,0);
 draw couleur("jaune") shifted (5*dech,0);
 draw couleur("noir") shifted (6*dech,0);
 draw couleur("marron") shifted (0,decv);
 draw couleur("lime") shifted (dech,decv);
 draw couleur("orange") shifted (2*dech,decv);
 draw couleur("rose") shifted (3*dech,decv);
 draw couleur("pourpre") shifted (4*dech,decv);
 draw couleur("olive") shifted (5*dech,decv);
 draw couleur("violet") shifted (6*dech,decv);
 draw couleur("beige") shifted (0,2decv);
 draw couleur("marine") shifted (dech,2decv);
 draw couleur("moutarde") shifted (2*dech,2decv);
 draw couleur("grisclair") shifted (3*dech,2decv);
 draw couleur("gris") shifted (4*dech,2decv);
 draw couleur("grisfonce") shifted (5*dech,2decv);
 draw couleur("vertfonce") shifted (6*dech,2decv);
fin;
\end{figreperedoc}
\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{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,-3,3,50);
  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{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}

\subsection{Code embarqué dans un document \LaTeX}

Certains packages permettent d'écrire du code \MP{} directement dans un document \LaTeX. \verb|repere| est compatible avec, entre autres, \verb|emp| et \verb|mpgraphics|.

\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 latexmp;
 input repere;
\end{empcmds}
\begin{emp}(0,0)
 repere(-3,3,0.8cm,-2.5,2.5,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 latexmp;
 input repere;
\end{mpdefs}
\begin{mpdisplay}
 repere(-3,3,0.8cm,-2.5,2.5,1cm);
 draw axes(1,1);
 fin;
\end{mpdisplay}
\end{document}
\end{lstlisting}
\end{minipage}


\section{Exemples d'utilisation simultanée de \texttt{repere} et \texttt{geometriesyr}}

\label{exgeom}Il est possible, dans une figure créée avec \verb+repere+, d'utiliser certaines macros de \verb+geometriesyr+. Il faut alors charger \verb+geometriesyr+ \emph{avant} \verb|repere|.

\begin{exemple}[0.6]
repere(-1,10,0.5cm,-1,9,0.5cm);
pair A,B,C,A',B',C',u;
A=_c(3,1);B=_c(5,2);C=_c(1,5);u=_c(3,3);
A'-A=B'-B=C'-C=u;
draw projectionaxes(A,LaTeX("$x_A$"),
                 LaTeX("$y_A$")) dashed evenly;
draw axes(0,0);
drawoptions(withcolor pourpre);
draw triangle(A,B,C);draw triangle(A',B',C');
draw codeperp(B,A,C,7);draw codeperp(B',A',C',7);
draw codesegments(B,C,B',C',2);
nomme.llft(A);nomme.lrt(B);nomme.ulft(C);
nomme.llft(A');nomme.lrt(B');nomme.ulft(C');
drawoptions(withcolor vertfonce);
draw vecteur.lrt(B,u);draw vecteur.lrt(C,u);
fin;
\end{exemple}%

\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@out
\makeatother
%\addtocontents{toc}{\protect\end{multicols}}
\end{document}


