\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[a4paper,margin=2cm,nohead,includefoot]{geometry}
\usepackage{fourier}
\usepackage[scaled=0.875]{helvet}
\pagestyle{empty}
\usepackage[frenchb]{babel}
\input{Christ5}
\usepackage{graphicx}
\graphicspath{{figures/}}
\DeclareGraphicsRule{*}{mps}{*}{}
\usepackage{mflogo}
\usepackage{url}
\usepackage{multicol}
\usepackage{listingsutf8}
\usepackage{filecontents}
\lstset{language=MetaPost,inputencoding=utf8,basicstyle=\sffamily}
\usepackage[tikz]{bclogo}
%\renewcommand\bcStyleTitre[1]{}
\title{\includegraphics[scale=0.05]{Scratch_cat.png}\kern0.05\linewidth Scratch et \MP\kern0.05\linewidth\includegraphics{Carre.1}}
\author{
  \begin{tabular}{c}
    C.Poulain\\
    \url{chrpoulain@gmail.com}\\
  \end{tabular}
}
\date{Janvier 2017}
\begin{document}
\maketitle
\begin{abstract}
  Comment utiliser \MP\ pour produire des algorithmes \og papier\fg\ avec les conventions de Scratch.
\end{abstract}
\vspace{2em}
\setcounter{tocdepth}{1}
\tableofcontents
\vspace{2em}
Avec les nouveaux programmes 2016 du Cycle 4 (Classes de 5\ieme\ à 3\ieme\ de collège) est apparu l'enseignement de l'algorithmique et l'utilisation de Scratch. Développé par le laboratoire Média du MIT, il permet de mettre en \oe uvre des algorithmes sous forme {\em ludique}. Sans rentrer dans un débat \og pour ou contre\fg, son emploi doit donc être enseigné aux élèves aux travers de différentes activités : questions {\em flash}\footnote{Sans aucun lien avec le langage informatique. Il s'agit de questions rapides posées en début de séance.}, questions de compréhension, modification, correction d'algorithmes\ldots\ Il fallait donc trouver une solution me permettant de proposer des algorithmes Scratch dans mes devoirs.\par La première solution envisagée a été, bien évidemment, la capture d'écran. Simple, facile, rapide\ldots\ ses avantages sont nombreux. Cependant, la qualité d'impression est parfois \og moyenne\fg\ldots
\\Soucieux de proposer quelque chose de plus {\em cohérent} avec le \og monde\fg\ \LaTeX, je me suis lancé dans la création de {\sffamily mp-scratch} avec pour objectif principal de proposer une syntaxe et une présentation très proche de celles utilisées par Scratch.
\begin{figure}[h]
  \centering
  \includegraphics[scale=0.85]{Scratch1.png}\kern0.05\linewidth\includegraphics{Algo1.1}
  \caption{Algorithme de création d'un carré - Versions Scratch et \MP\protect\footnotemark}
  \label{fig:1}
\end{figure}
\footnotetext{Ce premier algorithme me permet de remercier Maxime Chupin et son package {\sffamily bclogo} : le drapeau vert a été créé à partir des sources de son package et notamment la construction, en \MP, de ses drapeaux.}
\section{Installation}
{\sffamily mp-scratch} est indépendant des autres packages personnels déjà produits tels \lstinline!geometriesyr16!, \lstinline!mp-geo! ou \lstinline!mp-solid!.
\\Au travers d'un dépôt \lstinline!git!\footnote{Tous les contributeurs sont donc les bienvenus pour développer le package.}, on trouvera l'archive à l'adresse
\begin{center}
  \url{http://melusine.eu.org/syracuse/G/mp-scratch/}
\end{center}
et l'ensemble des fichiers sera à placer correctement dans une arborescence \TeX\footnote{Arborescence locale de préférence, par exemple dans {\sffamily /home/christophe/texmf/metapost/} sous Linux.}.
\\Pour l'utilisation, il sera nécessaire de veiller :
\begin{itemize}
\item à installer, si ce n'est pas fait, la fonte {\sffamily Carlito}\footnote{\url{http://www.tug.dk/FontCatalogue/carlito/} pour un exemple. Le choix reste personnalisable évidemment mais Thierry Pasquier, à juste titre, m'a préconisé d'utiliser une fonte sans serif.};
\item à modifier, dans le fichier {\sffamily LATEXScratch.mp}, la ligne
\vspace{1em}
\begin{center}
  \lstinline!  write "\graphicspath{{/home/cp/texmf/metapost/Scratch/}}" to "mptextmp.mp";!
\end{center}
\vspace{1em}
pour indiquer le chemin correspondant à votre installation.
\end{itemize}
\section{Utilisation}
\begin{figure}[h]
  \centering
  \begin{minipage}{0.4\linewidth}
  \includegraphics{Algo1.1}
\end{minipage}
\hspace{4em}
\begin{minipage}{0.4\linewidth}
\small
\begin{lstlisting}[firstnumber=1,frame=tb]
input mp-scratch;

beginfig(1);
  draw Drapeau;
  draw Repeter1(4);
  draw Avancer(50);
  draw Tournerd(90);
  draw FinBlocRepeter1(10);
endfig;
end
  \end{lstlisting}
\end{minipage}
  \caption{Un carré - Code et résultat sous \MP}
  \label{fig:carre}
\end{figure}
%\par\vspace{1em}\par
Reprenons l'exemple de l'algorithme du carré pour faire les premières constatations suivantes :
\begin{Enumerate}
  \item la syntaxe est très proche du vocabulaire utilisé par Scratch; donc très peu de nouvelles commandes à apprendre\ldots
  \item les couleurs\footnote{Cela reste, bien évidemment, paramétrable. Les paramètres disponibles pour personnaliser les couleurs sont \lstinline!colMouv!, \lstinline!colAp!, \lstinline!colSon!, \lstinline!colStylo!, \lstinline!colEvenements!, \lstinline!colControle!, \lstinline!colCapteur!, \lstinline!colBloc!, \lstinline!colVar!, \lstinline!colList!.} sont celles utilisées par Scratch\footnote{Une nouvelle fois, merci à Maxime Chupin pour m'avoir fait découvrir l'utilitaire \lstinline!gcolor2! sous Linux};
  \item le bloc {\sffamily Répéter} est particulier car il nécessite l'ajout {\em manuel} d'un nombre (ou chiffre)\footnote{{\sffamily Repeter2}, {\sffamily Repeter5}\ldots} qui permettra  à \MP\ de faire la liaison correcte lors de la présence de multiples blocs {\sffamily Répéter} comme le montre l'exemple ci-dessous.
%\par\vspace{1em}\par
    \begin{figure}[h]
      \centering
      \begin{minipage}{0.45\linewidth}
  \includegraphics{Algo2.1}
\end{minipage}
\hspace{2em}
\begin{minipage}{0.35\linewidth}
\small
\begin{lstlisting}[firstnumber=1,frame=tb]
input mp-scratch;

beginfig(1);
  draw Drapeau;
  draw Repeter2(10);
  draw Repeter1(4);
  draw Avancer(50);
  draw Tournerd(90);
  draw FinBlocRepeter1(10);
  draw Avancer(60);
  draw FinBlocRepeter2(10);
endfig;
end
  \end{lstlisting}
\end{minipage}
      \caption{Un carré se déplace - Code et résultat sous \MP}
      \label{fig:carredep}
    \end{figure}
\end{Enumerate}
\begin{bclogo}[arrondi=0.1,logo=\bcattention,noborder=true,cadreTitre=false,barre=none]{}
  Pour les codes \MP\ suivants, on omettra volontairement \lstinline!input mp-scratch! et \lstinline!end!.\footnotemark
\end{bclogo}
\footnotetext{Chacun aura reconnu le package \lstinline!bclogo! de Maxime Chupin.}
\subsection{Commandes Scratch}
\begin{description}
  \item[Groupe {\sffamily Mouvement}]\hfil\newline
    \begin{itemize}
    \item[\textbullet]\lstinline!draw Avancer(10);!
      \par\hfill\includegraphics{CommandeMouvement.1}
    \item[\textbullet]\lstinline!draw Tournerd(90);!
      \par\hfill\includegraphics{CommandeMouvement.2}
    \item[\textbullet]\lstinline!draw Tournerg(90)!
      \par\hfill\includegraphics{CommandeMouvement.3}
    \item[\textbullet]\lstinline!draw Orienter(90);!
      \par\hfill\includegraphics{CommandeMouvement.4}
    \item[\textbullet]\lstinline!draw Orienterdirection("pointeur de souris");!
      \par\hfill\includegraphics{CommandeMouvement.5}
    \item[\textbullet]\lstinline!draw Aller(50,100);!
      \par\hfill\includegraphics{CommandeMouvement.6}
    \item[\textbullet]\lstinline!draw Allera("pointeur de souris");!
      \par\hfill\includegraphics{CommandeMouvement.7}
    \item[\textbullet]\lstinline!draw Glisser(2,50,100);!
      \par\hfill\includegraphics{CommandeMouvement.8}
    \item[\textbullet]\lstinline!draw Ajouter(10,"x");!
      \par\hfill\includegraphics{CommandeMouvement.9}
    \item[\textbullet]\lstinline!draw Mettre(10,"x");!
      \par\hfill\includegraphics{CommandeMouvement.10}
    \item[\textbullet]\lstinline!draw Ajouter(50,"y");!
      \par\hfill\includegraphics{CommandeMouvement.11}
    \item[\textbullet]\lstinline!draw Mettre(10,"y");!
      \par\hfill\includegraphics{CommandeMouvement.12}
    \item[\textbullet]\lstinline!draw Rebondir;!
      \par\hfill\includegraphics{CommandeMouvement.13}
    \item[\textbullet]\lstinline!draw FixerSensRotation("position \`a gauche ou \`a droite"';!
      \par\hfill\includegraphics{CommandeMouvement.14}
    \end{itemize}
Les \og opérateurs\footnote{Je nomme \og opérateurs\fg\ les variables ou commandes Scratch pouvant s'inclure dans les blocs-commande. Je me demande si je suis assez clair\ldots}\fg\ 
\[\includegraphics{CommandeMouvement.18}\kern0.1\linewidth\includegraphics{CommandeMouvement.19}\kern0.1\linewidth\includegraphics{CommandeMouvement.20}\]
 s'obtiennent avec la commande \LaTeX\footnote{Oui, une commande \LaTeX. Cela signifie donc que cette commande sera passée comme un élément de type {\sffamily string} de \MP.} \lstinline!\opMouv{}! comme le montrent les exemples ci-dessous :
    \begin{itemize}
    \item[\textbullet]\lstinline!draw Avancer("\opOp{$\opMouv{abscisse x}\bm{+}\opSimple{10}$}");!
      \par\hfill\includegraphics{CommandeMouvement.15}
    \item[\textbullet]\lstinline!draw Mettre("\opMouv{abscisse x}","y");!
      \par\hfill\includegraphics{CommandeMouvement.16}
    \item[\textbullet]\lstinline!draw Ajouter("\opMouv{direction}","y");!
      \par\hfill\includegraphics{CommandeMouvement.17}
    \end{itemize}
    \vspace*{2em}\par
  \item[Groupe {\sffamily Apparence}]\hfil\newline
    \begin{itemize}
    \item[\textbullet]\lstinline!draw DireT("\opSimple{Hello}",2);!
      \par\hfill\includegraphics{CommandeApparence.1}
    \item[\textbullet]\lstinline!draw Dire("\opSimple{Hello}");!
      \par\hfill\includegraphics{CommandeApparence.2}
    \item[\textbullet]\lstinline!draw PenserT("\opSimple{Hmm...}",2);!
      \par\hfill\includegraphics{CommandeApparence.3}
    \item[\textbullet]\lstinline!draw Penser("\opSimple{Hmm...}");!
      \par\hfill\includegraphics{CommandeApparence.4}
    \item[\textbullet]\lstinline!draw Montrer;!
      \par\hfill\includegraphics{CommandeApparence.5}
    \item[\textbullet]\lstinline!draw Cacher;!
      \par\hfill\includegraphics{CommandeApparence.6}
    \item[\textbullet]\lstinline!draw Basculer("\opApMenu{costume2}");!
      \par\hfill\includegraphics{CommandeApparence.7}
    \item[\textbullet]\lstinline!draw CostumeSuivant;!
      \par\hfill\includegraphics{CommandeApparence.8}
    \item[\textbullet]\lstinline!draw BasculerAR("\opApMenu{arriere-plan2}");!
      \par\hfill\includegraphics{CommandeApparence.9}
    \item[\textbullet]\lstinline!draw AjouterEffet("\opApMenu{couleur}",10);!
      \par\hfill\includegraphics{CommandeApparence.10}
    \item[\textbullet]\lstinline!draw MettreEffet("\opApMenu{couleur}",10);!
      \par\hfill\includegraphics{CommandeApparence.11}
    \item[\textbullet]\lstinline!draw AnnulerEffet;!
      \par\hfill\includegraphics{CommandeApparence.12}
    \item[\textbullet]\lstinline!draw AjouterTaille(10);!
      \par\hfill\includegraphics{CommandeApparence.13}
    \item[\textbullet]\lstinline!draw MettreA("\opOp{$\opSimple{10}\bm{+}\opSimple{5}$}");!
      \par\hfill\includegraphics{CommandeApparence.14}
    \item[\textbullet]\lstinline!draw AllerPPlan;!
      \par\hfill\includegraphics{CommandeApparence.15}
    \item[\textbullet]\lstinline!draw DeplacerAP("\opOp{$\opMouv{abscisse x}\bm{+}\opSimple{10}$}");!
      \par\hfill\includegraphics{CommandeApparence.16}
    \end{itemize}
\vspace{1em}\par Quand \og la scène\fg\ est sélectionnée, on dispose également des commandes :
    \begin{itemize}
    \item[\textbullet]\lstinline!draw BasculerARA("\opApMenu{arriere-plan2}");!
      \par\hfill\includegraphics{CommandeApparence.20}
    \item [\textbullet]\lstinline!draw ARSuivant;!
      \par\hfill\includegraphics{CommandeApparence.21}
    \end{itemize}
    \par\vspace*{2em}\par Les \og opérateurs\fg\ 
\[\includegraphics{CommandeApparence.17}\kern0.1\linewidth\includegraphics{CommandeApparence.18}\kern0.1\linewidth\includegraphics{CommandeApparence.19}\kern0.1\linewidth\includegraphics{CommandeApparence.22}\]
s'obtiennent avec la commande \LaTeX\ \lstinline!\opAp{}!.
    \par\vspace*{2em}\par
  \item[Groupe {\sffamily Son}]\hfil\newline
    \begin{itemize}
    \item[\textbullet]\lstinline!draw Jouer("miaou");!
      \par\hfill\includegraphics{CommandeSon.1}
    \item[\textbullet]\lstinline!draw JouerT("miaou");!
      \par\hfill\includegraphics{CommandeSon.2}
    \item[\textbullet]\lstinline!draw ArreterSon;!
      \par\hfill\includegraphics{CommandeSon.3}
    \item[\textbullet]\lstinline!draw Tambour(2,0.25);!
      \par\hfill\includegraphics{CommandeSon.4}
    \item[\textbullet]\lstinline!draw Pause(0.25);!
      \par\hfill\includegraphics{CommandeSon.5}
    \item[\textbullet]\lstinline!draw JouerNote(50,0.25);!
      \par\hfill\includegraphics{CommandeSon.6}
    \item[\textbullet]\lstinline!draw ChoisirInstrument(17);!
      \par\hfill\includegraphics{CommandeSon.7}
    \item[\textbullet]\lstinline!draw AjouterVol(-10);!
      \par\hfill\includegraphics{CommandeSon.8}
    \item[\textbullet]\lstinline!draw MettreVol(15);!
      \par\hfill\includegraphics{CommandeSon.9}
    \item[\textbullet]\lstinline!draw AjouterTempo(20);!
      \par\hfill\includegraphics{CommandeSon.10}
    \item[\textbullet]\lstinline!draw MettreTempo(15);!
      \par\hfill\includegraphics{CommandeSon.11}
    \end{itemize}
Les \og opérateurs\fg
\[\includegraphics{CommandeSon.12}\kern0.1\linewidth\includegraphics{CommandeSon.13}\]
s'obtiennent par la commande \LaTeX\ \lstinline!\opSon{}!.
\[\includegraphics{CommandeSon.14}\]
\begin{lstlisting}[frame=tb]
draw DireT("\opOp{Regroupe\opSimple{Le volume actuel est}%
\opSon{Volume}}",2);
\end{lstlisting}
    \par\vspace*{2em}\par
  \item[Groupe {\sffamily Stylo}]\hfil\newline
    \begin{itemize}
    \item[\textbullet]\lstinline!draw Effacer;!
      \par\hfill\includegraphics{CommandeStylo.1}
    \item[\textbullet]\lstinline!draw Estampiller;!
      \par\hfill\includegraphics{CommandeStylo.2}
    \item[\textbullet]\lstinline!draw PoserStylo;!
      \par\hfill\includegraphics{CommandeStylo.3}
    \item[\textbullet]\lstinline!draw ReleverStylo;!
      \par\hfill\includegraphics{CommandeStylo.4}
    \item[\textbullet]\lstinline!draw MettreCouleur("Magenta",1,0,1);!\footnote{La couleur est définie par son triplet {\sffamily rgb}. Le nom de la couleur est libre mais ne doit pas rentrer en conflit avec les couleurs déjà définies dans le sous-package {\sffamily LATEXScratch.mp}.}
      \par\hfill\includegraphics{CommandeStylo.5}
    \item[\textbullet]\lstinline!draw AjouterCS("\opOp{$\opSimple{15}\bm{+}\opSimple{10}$}");!
      \par\hfill\includegraphics{CommandeStylo.6}
    \item[\textbullet]\lstinline!draw MettreCS(25);!
      \par\hfill\includegraphics{CommandeStylo.7}
    \item[\textbullet]\lstinline!draw AjouterIS("\opOp{$\opSimple{25}\bm{-}\opSimple{10}$}");!
      \par\hfill\includegraphics{CommandeStylo.8}
    \item[\textbullet]\lstinline!draw MettreIS(15);!
      \par\hfill\includegraphics{CommandeStylo.9}
    \item[\textbullet]\lstinline!draw AjouterTS(12);!
      \par\hfill\includegraphics{CommandeStylo.10}
    \item[\textbullet]\lstinline!draw MettreTS("\opOp{$\opSimple{15}\bm{\times}\opSimple{10}$}");!
      \par\hfill\includegraphics{CommandeStylo.11}
    \end{itemize}
    \vspace*{2em}\par
\item[Groupe {\sffamily Données}]\hfil\newline
  \begin{itemize}
  \item[\textbullet]\lstinline!draw MettreVar("pi",0);!
    \par\hfill\includegraphics{CommandeVariable.1}
  \item[\textbullet]\lstinline!draw AjouterVar("pi","\opOp{$\opSimple{15}\bm{+}\opSimple{10}$}");!
    \par\hfill\includegraphics{CommandeVariable.2}
  \item[\textbullet]\lstinline!draw MontrerVar("pi");!
    \par\hfill\includegraphics{CommandeVariable.3}
  \item[\textbullet]\lstinline!draw CacherVar("pi");!
    \par\hfill\includegraphics{CommandeVariable.4}
  \item[\textbullet]\lstinline!draw AjouterList("\opSimple{\LaTeX}","Listepi");!
    \par\hfill\includegraphics{CommandeVariable.5}
  \item[\textbullet]\lstinline!draw SupprimerList("\opSimple{\LaTeX}","Listepi");!
    \par\hfill\includegraphics{CommandeVariable.6}
  \item[\textbullet]\lstinline!draw InsererList("\opSimple{\MP}",1,"Listepi");!
    \par\hfill\includegraphics{CommandeVariable.7}
  \item[\textbullet]\lstinline!draw RemplacerList(3,"Listepi","\opOp{$\opSimple{4}\bm{+}\opSimple{5}$}");!
    \par\hfill\includegraphics{CommandeVariable.8}
  \item[\textbullet]\lstinline!draw MontrerList("Listepi");!
    \par\hfill\includegraphics{CommandeVariable.9}
  \item[\textbullet]\lstinline!draw CacherList("Listepi");!
    \par\hfill\includegraphics{CommandeVariable.10}
  \end{itemize}
  \par\vspace*{2em}\par Les \og opérateurs\fg
  \begin{center}
    \begin{minipage}{0.8\linewidth}
      \includegraphics{CommandeVariable.11}\hfill\includegraphics{CommandeVariable.12}\hfill \includegraphics{CommandeVariable.13}\par
    \includegraphics{CommandeVariable.14}\hfill \includegraphics{CommandeVariable.15}
    \end{minipage}
\end{center}
s'obtiennent par les commandes \LaTeX\ \lstinline!\opVar{}!, \lstinline!\opList{}! et \lstinline!\opSousList{}!.
\vspace{0.5em}
\begin{center}
    \includegraphics{CommandeVariable.15}
%  \begin{minipage}{0.6\linewidth}
    \begin{lstlisting}[frame=tb]
label(LATEX("\opList{\opSousList{Pythagore}
 contient \opSimple{(3;4;5)} ?}"),(0,0));
    \end{lstlisting}
%  \end{minipage}
\end{center}
    \par\vspace*{2em}\par
\item[Groupe {\sffamily \'Evènement}]\hfil\newline
  \begin{itemize}
  \item[\textbullet]\lstinline!draw Drapeau;!
    \par\hfill\includegraphics{CommandeEvenements.1}
  \item[\textbullet]\lstinline!draw QPresse("espace");!
    \par\hfill\includegraphics{CommandeEvenements.2}
  \item[\textbullet]\lstinline!draw QLutinPresse;!
    \par\hfill\includegraphics{CommandeEvenements.3}
  \item[\textbullet]\lstinline!draw QBasculeAR("arriere-plan1");!
    \par\hfill\includegraphics{CommandeEvenements.4}
  \item[\textbullet]\lstinline!draw QVolumeSup("Volume sonore",10);!
    \par\hfill\includegraphics{CommandeEvenements.5}
  \item[\textbullet]\lstinline!draw QRecevoirMessage("message1");!
    \par\hfill\includegraphics{CommandeEvenements.6}
  \item[\textbullet]\lstinline!draw EnvoyerMessage("message1");!
    \par\hfill\includegraphics{CommandeEvenements.7}
  \item[\textbullet]\lstinline!draw EnvoyerMessageA("message1");!
    \par\hfill\includegraphics{CommandeEvenements.8}
  \end{itemize}
\vspace{1em}\par
Quand \og la scène\fg\ est sélectionnée, on dispose de :
\begin{itemize}
  \item[\textbullet]\lstinline!draw QScenePressee;!
    \par\hfill\includegraphics{CommandeEvenements.9}\footnote{C'est le seul endroit où il y a une majuscule dans les notations {\sffamily Scratch}\ldots}
\end{itemize}
    \vspace*{2em}\par
\item[Groupe {\sffamily Contrôle}]\label{Groupecontrole}\hfil\newline
  \begin{itemize}
  \item[\textbullet]\lstinline!draw Attendre("\opOp{$\opSimple{10}\bm{+}\opSimple{40}$}");!
    \par\hfill\includegraphics{CommandeControle.1}
  \item[\textbullet]\lstinline!draw AttendreJ("\opOp{$\opSimple{10}\bm{+}\opMouv{Abscisse x}\bm{=}\opSimple{20}$}");!
    \par\hfill\includegraphics{CommandeControle.6}
  \item[\textbullet]\lstinline!draw Stop("ce script");!
    \par\hfill\includegraphics{CommandeControle.8}
%\newpage
  \item[\textbullet]\lstinline!draw CommencerClone;!
    \par\hfill\includegraphics{CommandeControle.9}
  \item[\textbullet]\lstinline!draw CreerClone("Lutin1");!
    \par\hfill\includegraphics{CommandeControle.10}
  \item[\textbullet]\lstinline!draw SupprimerClone;!
    \par\hfill\includegraphics{CommandeControle.11}
  \item[\textbullet]
    \begin{lstlisting}[frame=tb]
draw Repeter1("\opOp{$\opSimple{10}\bm{+}\opSimple{40}$}");
draw LigneVide("Bonjour");
draw FinBlocRepeter1(10);
    \end{lstlisting}
    \par\hfill\includegraphics{CommandeControle.2}
  \item[\textbullet]
    \begin{lstlisting}[frame=tb]
draw RepeterI1;
draw LigneVide("Bonjour");
draw FinBlocRepeterI1(10);
    \end{lstlisting}
    \par\hfill\includegraphics{CommandeControle.3}
\par On remarquera ici la distinction \lstinline!FinBlocRepeter1! et \lstinline!FinBlocRepeterI1!. Le premier autorise une suite à l'algorithme (par la présence du cadre \og puzzle\fg), le deuxième non.
\\Une deuxième remarque concerne la \og sortie\fg\ des blocs \lstinline!Repeter! (elle est aussi valable pour les blocs \lstinline!Si!\ldots\lstinline!alors!). Comme l'indique la figure \ref{fig:pbsortiebloc} et contrairement à \lstinline!Scratch!, j'ai {\em choisi}\footnote{Par commodité de programmation, par esthétique et aussi par conception de la sortie d'un tel bloc.} de ne pas faire de distinction \og puzzle / non puzzle\fg\ en fin de boucle (ou test).
\begin{figure}[h!]
  \centering
  \includegraphics[width=0.5\linewidth]{Scratchpbsortiebloc-1}\hfill\includegraphics{SortieBloc.1}
  \caption{Comparaison Scratch / \MP\ pour l'affichage des \og sorties\fg\ de boucles et tests.}
  \label{fig:pbsortiebloc}
\end{figure}

\`A noter dans le code \MP\ de cet exemple, l'utilisation du paramètre \lstinline! _coinprec ! afin de placer différentes partie d'un algorithme au sein d'une même figure \MP.
\begin{lstlisting}[frame=tb]
  ...
  draw FinBlocRepeter1(10);
  _coinprec:=_coinprec+(0,-1cm);
  draw Si2("\opOp{$\opVar{i}\bm{<}10$}");
  ...
\end{lstlisting}%

  \item[\textbullet]
    \begin{lstlisting}[frame=tb]
draw Si1("\opOp{$\opSimple{10}\bm{+}\opMouv{Abscisse x}%
\bm{=}\opSimple{20}$}");
draw LigneVide("Bonjour");
draw FinBlocSi1;
    \end{lstlisting}
    \par\hfill\includegraphics{CommandeControle.4}
  \item[\textbullet]
    \begin{lstlisting}[frame=tb]
draw Si1("\opOp{$\opSimple{10}\bm{+}\opMouv{Abscisse x}%
\bm{=}\opSimple{20}$}");
draw LigneVide("Bonjour");
draw Sinon1;
draw LigneVide("Bonjour");
draw FinBlocSi1;
    \end{lstlisting}
    \par\hfill\includegraphics{CommandeControle.5}
  \item[\textbullet]
    \begin{lstlisting}[frame=tb]
draw RepeterJ1("\opOp{$\opSimple{10}\bm{+}\opMouv{Abscisse x}%
 \bm{=}\opSimple{20}$}");
draw LigneVide("Bonjour");
draw FinBlocRepeter1(10);
    \end{lstlisting}
    \par\hfill\includegraphics{CommandeControle.7}
  \end{itemize}
\vspace*{2em}\par
\item[Groupe {\sffamily Capteurs}]\hfil\newline
  \begin{itemize}
  \item[\textbullet]\begin{filecontents*}{capteur1.txt}
draw Demander("Quel est votre prénom ?");
\end{filecontents*}
\lstinputlisting[inputencoding=utf8/latin1]{capteur1.txt}
    \par\hfill\includegraphics{CommandeCapteurs.1}
  \item[\textbullet]\lstinline!draw ActiverVideo("active");!
    \par\hfill\includegraphics{CommandeCapteurs.2}
  \item[\textbullet]\lstinline!draw TransparenceVideo("\opOp{$\opSimple{17}\bm{+}\opSimple{25}$}");!
    \par\hfill\includegraphics{CommandeCapteurs.3}
  \item[\textbullet]\lstinline!draw ReinitChrono;!
    \par\hfill\includegraphics{CommandeCapteurs.4}    
  \end{itemize}
Les \og opérateurs\fg
  \begin{center}
    \begin{minipage}{0.8\linewidth}
      \includegraphics{CommandeCapteurs.5}\par
      \includegraphics{CommandeCapteurs.6}\hfill \includegraphics{CommandeCapteurs.7}\par
      \includegraphics{CommandeCapteurs.19}\par
      \includegraphics{CommandeCapteurs.20}\hfill\includegraphics{CommandeCapteurs.8}
\par\includegraphics{CommandeCapteurs.9}\hfill \includegraphics{CommandeCapteurs.10}\hfill\includegraphics{CommandeCapteurs.11}
\par\includegraphics{CommandeCapteurs.12}\hfill \includegraphics{CommandeCapteurs.13}\par
\includegraphics{CommandeCapteurs.14}\hfill\includegraphics{CommandeCapteurs.15}
\par\includegraphics{CommandeCapteurs.16}\hfill
      \includegraphics{CommandeCapteurs.17}\hfill\includegraphics{CommandeCapteurs.18}
    \end{minipage}
\end{center}
s'obtiennent par les commandes \LaTeX\ \lstinline!\opCap{}! et \lstinline!\opCapCap{}!.
Néanmoins, il faut parfois un codage conséquent. Par exemple, voici un capteur et son code.
\par\vspace{1em}\par\begin{minipage}{0.3\linewidth}
  \includegraphics{CommandeCapteurs.7}
\end{minipage}
\hfill
\begin{minipage}{0.65\linewidth}
\small
\begin{lstlisting}[frame=tb]
\opCap{couleur %
  \definecolor{Magenta}{rgb}{1,0,1}%
  \colorbox{Magenta}{\textcolor{white}{%
      \phantom{t}}}touche%
  \definecolor{LGray}{gray}{0.85}%
  \colorbox{LGray}{\textcolor{white}{%
      \phantom{t}}} ?%
}
\end{lstlisting}
\end{minipage}
\\Un peu barbare ? Non, un simple copier-coller sera nécessaire pour les futures utilisations\ldots%}
%\par\vspace*{2em}\par
\item[Groupe {\sffamily Opérateurs}]\hfil\newline
Les éléments%
  \begin{center}
    \begin{minipage}{0.8\linewidth}
      \includegraphics{CommandeOperateurs.1}\hfill\includegraphics{CommandeOperateurs.2}\hfill\includegraphics{CommandeOperateurs.3}\hfill
      \includegraphics{CommandeOperateurs.4}\par
      \includegraphics{CommandeOperateurs.5}\par
      \includegraphics{CommandeOperateurs.6}\hfill \includegraphics{CommandeOperateurs.7}\hfill\includegraphics{CommandeOperateurs.8}
\par\includegraphics{CommandeOperateurs.9}\hfill \includegraphics{CommandeOperateurs.10}\hfill\includegraphics{CommandeOperateurs.11}
\par\includegraphics{CommandeOperateurs.12}\hfill \includegraphics{CommandeOperateurs.13}\par
\includegraphics{CommandeOperateurs.14}
\par\includegraphics{CommandeOperateurs.15}\hfill\includegraphics{CommandeOperateurs.16}\hfill\includegraphics{CommandeOperateurs.17}
    \end{minipage}
\end{center}
s'obtiennent par les commandes \LaTeX\ \lstinline!\opOp{}! et \lstinline!\opSousOp{}!.
\\Afin de rapprocher le package des conventions d'écriture des opérations, le choix du $\times$ à la place de * s'est imposé. Néanmoins, cela peut être discuté et modifié\ldots
\vspace*{2em}\par
\item[Groupe {\sffamily Ajouter blocs}]\hfil\newline
  \begin{itemize}
  \item[\textbullet]\lstinline!draw NouveauBloc("Pentagone");!
    \par\hfill\includegraphics{CommandeBloc.1}
  \item[\textbullet]\lstinline!draw NouveauBloc("Pentagone \opBloc{cote}");!
    \par\hfill\includegraphics{CommandeBloc.3}
  \item[\textbullet]\lstinline!draw Bloc("Pentagone");!
    \par\hfill\includegraphics{CommandeBloc.2}
\end{itemize}
\item[Groupe {\sffamily Divers}]\hfil\newline
D'un point de vue pédagogique, il m'est apparu nécessaire d'ajouter la possibilité de donner l'illusion d'un algorithme \og vide\fg. J'ai donc créé la commande \lstinline!LigneVide! qui demande un argument simple (on pourra se reporter aux exemples du groupe {\sffamily Contrôle}\footnote{On peut obtenir le même résultat avec le paramètre \lstinline! _coinprec ! mais la précision de placement me semble plus délicate à obtenir.} à la page \pageref{Groupecontrole}).
\[\includegraphics{CommandeControle.5}\]
On aura également à disposition \lstinline!CommandeVide("Bonjour!")! afin de faire compléter un algorithme par les élèves.
\begin{figure}[h]
  \centering
  \begin{minipage}{0.4\linewidth}
    \includegraphics{ExCommandeVide.1}
  \end{minipage}
  \hfill
  \begin{minipage}{0.5\linewidth}
\begin{filecontents*}{CommandeVide.txt}
  beginfig(1);
  draw Drapeau;
  draw Repeter1(4);
  draw Avancer(50);
  draw CommandeVide("Tourner à droite%
 de 90 degrés");
  draw FinBlocRepeter1(10);
  endfig;
\end{filecontents*}
\lstinputlisting[inputencoding=utf8/latin1,frame=tb]{CommandeVide.txt}
  \end{minipage}
  \caption{Utilisation de \lstinline!CommandeVide!}
  \label{fig:CommandeVide}
\end{figure}
Enfin, il y a la commande \lstinline!LignePointilles! permettant de faire des \og raccourcis\fg\ dans la
présentation des algorithmes.
\begin{lstlisting}[frame=tb]
beginfig(1);
  draw Drapeau;
  draw LignePointilles;
  draw CommandeVide("\opSimple{Je choisis un nombre aleatoirement%
 entre 1 et 999}");
  draw CommandeVide("\opSimple{Je choisis un nombre aleatoirement%
 entre 1 et 999}");
endfig;
\end{lstlisting}
\par\hfill\includegraphics{CommandeDivers.1}
  \end{description}
Terminons cette liste de commandes par un algorithme associé à la suite de Syracuse :)
\[\includegraphics[scale=0.9]{Syracuse.1}\]
\begin{filecontents*}{Syracuse.txt}
  beginfig(1);
  draw Drapeau;
  draw SupprimerList("\opSimple{tout}","Suite");
  draw Demander("\opSimple{Quel est le nombre choisi ?}");
  draw AjouterList("\opCap{réponse}","Suite");
  draw MettreVar("pas",1);
  draw RepeterI1;
  draw Si2("\opOp{\opList{élément \opVar{pas} de \opSousList{Suite}} modulo \opSimple{2}%
\,$\bm{=}$\,\opSimple{0}}");
  draw MettreVar("résultat","\opOp{\opList{élément \opVar{pas} de \opSousList{Suite}}%
\,$\bm{/}$\,\opSimple{2}}");
  draw Sinon2;
  draw MettreVar("résultat","\opOp{\opSimple{3}\,$\bm{\times}$\,\opList{élément \opVar{pas}%
 de \opSousList{Suite}}\,$\bm{+}$\,\opSimple{1}}");
  draw FinBlocSi2;
  draw Si3("\opList{\opSousList{Suite} contient \opVar{résultat} ?}");
  draw Stop("tout");
  draw Sinon3;
  draw AjouterList("\opVar{résultat}","Suite");
  draw AjouterVar("pas",1);
  draw FinBlocSi3;
  draw FinBlocRepeter1(10);
endfig;
\end{filecontents*}
{\footnotesize
\lstinputlisting[inputencoding=utf8/latin1,frame=tb]{Syracuse.txt}
}
\newpage
\section{Quelques exemples}
\subsection{Sujet de Brevet des collèges}
\vspace{-2em}
%  \begin{figure}[h]
%  \centering
%  \includegraphics{Scratch2-2}
%\caption{Figure du Sujet 0 de mathématiques du Brevet des Collèges}
%\label{fig:4}
%\end{figure}
\begin{figure}[h]
  \centering
  \includegraphics{Scratch2-2}\par
  \includegraphics[scale=0.85]{Scratch2-3}\kern0.05\linewidth\includegraphics{Algo3.1}
  \caption{Figure du Sujet 0 - versions Scratch et \MP}
  \label{fig:3}
\end{figure}
%\begin{minipage}{0.5\linewidth}
{\small
\begin{lstlisting}[firstnumber=1,frame=tb]
beginfig(1);
  draw Drapeau;
  draw Effacer;
  draw MettreTS(1);
  draw Repeter2(6);
  draw PoserStylo;
  draw Repeter1(4);
  draw Avancer(50);
  draw Tournerd(90);
  draw FinBlocRepeter1(10);
  draw ReleverStylo;
  draw AjouterTS(1);
  draw Avancer(60);
  draw FinBlocRepeter2(10);
endfig;
  \end{lstlisting}
}
\newpage
  \subsection{\OE uvre d'art}
\begin{figure}[h]
  \centering
  \includegraphics[width=0.7\linewidth]{Morellet}
  \label{fig:5}
  \caption{François Morellet - Oeuvre Pi piquant, 1=1°, 38 décimales}
\end{figure}
\[\includegraphics[width=0.7\linewidth]{Ex-Morellet.1}\]
\begin{filecontents*}{Morellet.txt}
beginfig(1)%François Morellet - Oeuvre Pi piquant, 1=1°, 38 décimales
  draw Drapeau;
  draw Effacer;
  draw Aller(-50,0);
  draw Orienter(180);
  draw PoserStylo;
  draw Tournerg("\opList{élément \opSimple{1} de \opSousList{Pi}}");
  draw Avancer(150);
  draw MettreVar("varpi","\opSimple{2}");
  draw RepeterJ1("\opOp{\opVar{varpi}\,$\bm{>}$\,38}");
  draw Si2("$\opOp{\opVar{varpi}\mbox{ modulo }\opSimple{2}\,=\,\opSimple{0}}$");
  draw Tournerg("$\opOp{\opSimple{180}}\bm{-}\opList{élément \opVar{varpi}
 de \opSousList{pi}}$");
  draw Sinon2;
  draw Tournerd("$\opOp{\opSimple{180}}-\opList{élément \opVar{varpi} de \opSousList{pi}}$");
  draw FinBlocSi2;
  draw Avancer(150);
  draw AjouterVar("varpi","\opSimple{1}");
  draw FinBlocRepeter1(10);
  draw ReleverStylo;
endfig;
\end{filecontents*}
{\footnotesize
\lstinputlisting[inputencoding=utf8/latin1,frame=tb]{Morellet.txt}
}
\newpage
\subsection{Une \og spirale\fg}
    \begin{figure}[h!]
      \centering
\begin{minipage}{0.4\linewidth}
      \[\includegraphics[scale=0.8]{ex-tice74.1}\]
{\tiny Source : \url{http://www.ac-grenoble.fr/tice74/spip.php?article1219}}
\end{minipage}
\hfill
\begin{minipage}{0.55\linewidth}
  \begin{lstlisting}[frame=tb]
beginfig(1);
  draw Drapeau;
  draw ReleverStylo;
  draw Aller(0,0);
  draw Orienter(90);
  draw PoserStylo;
  draw MettreVar("i",1);
  draw RepeterJ1("\opOp{$\opVar{i}\bm{=}%
    \opSimple{200}$}");
  draw Avancer("\opVar{i}");
  draw AjouterVar("i",1);
  draw Tournerd(121);
  draw FinBlocRepeter1(10);
endfig;
  \end{lstlisting}
\end{minipage}
      \caption{Figure géométrique - Code Scratch}
      \label{fig:10}
    \end{figure}
\[\includegraphics[scale=1]{ex-tice74-scratch.1}\]
\newpage
\subsection{Triangle de Sierpinski}
\begin{figure}[h]
  \centering
  \includegraphics[scale=0.5]{Ex-Serpinski.1}\par
  \includegraphics{Ex-Serpinski-scratch.1}
  \caption{Triangle de Sierpinski - Code Scratch et \MP}
  \label{fig:11}
\end{figure}
%\begin{lstlisting}[frame=tb]
\begin{filecontents*}{Sierpinski.txt}
beginfig(1);%https://sites.google.com/site/stjomaths/scratch
  draw Drapeau;
  draw Aller(-200,-150);
  draw Orienter(0);
  draw Effacer;
  draw PoserStylo;
  draw Demander("\opSimple{rang ?}");
  draw MettreVar("rang","\opCap{réponse}");
  draw Demander("\opSimple{dimension du motif ?}");
  draw MettreVar("rang","\opCap{réponse}");
  draw Bloc("Sierpinski \opBloc{rang} \opBloc{triangles}");
  _coinprec:=(8.5cm,0);
  draw NouveauBloc("Sierpinski \opBloc{rang} \opBloc{triangles}");
  draw Si1("\opOp{non $\opBloc{rang}\bm{=}0$}");
  draw Repeter2(3);
  draw Bloc("Sierpinski \opOp{$\opBloc{rang}\bm{-}\opSimple{1}$}%
 \opOp{$\opBloc{triangles}\,\bm{/}\,\opSimple{2}$}");
  draw Avancer("\opBloc{triangles}");
  draw Tournerd(120);
  draw FinBlocRepeter2(10);
  draw FinBlocSi1;
endfig;
\end{filecontents*}
%\end{lstlisting}
{\footnotesize
\lstinputlisting[inputencoding=utf8/latin1,frame=tb]{Sierpinski.txt}
}
\newpage
\section{Historique}
\begin{description}
\item[07/03/2017] {\bfseries Version 0.62} - Ajout d'une commande {\sffamily LignePointilles} et mise à jour de la documentation.
\item[17/02/2017] {\bfseries Version 0.61} - Grâce à Thomas Dehon, ajout des commandes correspondantes à la sélection de \og la scène\fg. Mise à jour de la documentation.
\item[16/02/2017] {\bfseries Version 0.59} - Correction des commandes {\sffamily Dire}, {\sffamily DireT}, {\sffamily Penser}, {\sffamily PenserT}. Mise à jour de la documentation (informations sur l'installation du package).
\item[15/02/2017] {\bfseries Version 0.57} - Correction de problèmes mineurs d'affichage. Correction de la documentation.
\item[14/02/2017] {\bfseries Version 0.55} - Mise à jour de la documentation.
  \item[13/02/2017] {\bfseries Version 0.53} - Ajout des chanfreins sur les blocs. Correction de \og doublons\fg\ de commandes. Mise à jour de la documentation.
  \item[05/02/2017] {\bfseries Version 0.51} - Sur les conseils de Maxime Chupin et Thierry Pasquier, travail sur les couleurs (mise en accord avec celles de Scratch et personnalisation possible). Passage des majuscules aux minuscules pour les blocs.
  \item[21/01/2017] {\bfseries Version 0.5} - Publication sur \url{www.melusine.eu.org/syracuse/}
  \item[19/01/2017] {\bfseries Version 0.32} - Ajout d'éléments de présentation ($\blacktriangledown$).
  \item[18/01/2017] {\bfseries Version 0.31} - Ajout du groupe {\sffamily Son}.
  \item[15/01/2017] {\bfseries Version 0.3} - Modification du code. Conception de la documentation.
  \item[08/01/2017] {\bfseries Version 0.2} - Ajout des commandes des groupes {\sffamily Données} et {\sffamily Capteurs}.
  \item[06/01/2017] {\bfseries Version 0.15} - Ajout des commandes du groupe {\sffamily Ajouter blocs}.
  \item[05/01/2017] {\bfseries Version 0.1} - Sont disponibles les commandes des groupes {\sffamily Mouvement}, {\sffamily Apparence}, {\sffamily Stylo}, {\sffamily Évènements}, {\sffamily Contrôle}.
\end{description}
\end{document}
