2d061143c53955e56e56de21356aa808e10d8cac
[mp-scratch.git] / doc / mp-scratch.tex
1 \documentclass[12pt]{article}
2 \usepackage[utf8]{inputenc}
3 \usepackage[T1]{fontenc}
4 \usepackage[a4paper,margin=2cm,nohead,includefoot]{geometry}
5 \usepackage{fourier}
6 \usepackage[scaled=0.875]{helvet}
7 \pagestyle{empty}
8 \usepackage[frenchb]{babel}
9 \input{Christ5}
10 \usepackage{graphicx}
11 \graphicspath{{figures/}}
12 \DeclareGraphicsRule{*}{mps}{*}{}
13 \usepackage{mflogo}
14 \usepackage{url}
15 \usepackage{multicol}
16 \usepackage{listingsutf8}
17 \usepackage{filecontents}
18 \lstset{language=MetaPost,inputencoding=utf8}
19 \title{\includegraphics[scale=0.05]{Scratch_cat.png}\kern0.05\linewidth Scratch et \MP\kern0.05\linewidth\includegraphics{Carre.1}}
20 \author{C.Poulain}
21 \date{Janvier 2017}
22 \begin{document}
23 \maketitle
24 \begin{abstract}
25 Utiliser \MP\ pour produire des algorithmes \og papier\fg\ avec les conventions de Scratch.
26 \end{abstract}
27 \vspace{2em}
28 \setcounter{tocdepth}{1}
29 \tableofcontents
30 \vspace{2em}
31 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
32 \\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.
33 \begin{figure}[h]
34 \centering
35 \includegraphics[scale=0.85]{Scratch1.png}\kern0.05\linewidth\includegraphics{Algo1.1}
36 \caption{Algorithme de création d'un carré - Versions Scratch et \MP\protect\footnotemark}
37 \label{fig:1}
38 \end{figure}
39 \footnotetext{Ce premier algorithme me permet de remercier Maximum 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.}
40 \section{Installation}
41 Le package {\sffamily mp-scratch} est indépendant d'autres packages personnels. On trouvera l'archive à l'adresse
42 \begin{center}
43 \url{melusine.eu.org/}
44 \end{center}
45 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.}
46 \section{Utilisation}
47 \begin{minipage}{0.4\linewidth}
48 \includegraphics{Algo1.1}
49 \end{minipage}
50 \hfill
51 \begin{minipage}{0.5\linewidth}
52 \small
53 \begin{lstlisting}[firstnumber=1,frame=tb]
54 input mp-scratch;
55
56 beginfig(1);
57 draw Drapeau;
58 draw Repeter1(4);
59 draw Avancer(50);
60 draw Tournerd(90);
61 draw FinBlocRepeter1(10);
62 endfig;
63 end
64 \end{lstlisting}
65 \end{minipage}
66 \par\vspace{1em}\par Reprenons l'exemple de l'algorithme du carré pour faire les premières constatations suivantes :
67 \begin{Enumerate}
68 \item la syntaxe est très proche du vocabulaire utilisé par Scratch;
69 \item les couleurs\footnote{Peut-être, sont-elles un peu ternes. Cela reste, bien évidemment, paramétrable.} sont proches de celles utilisées par Scratch;
70 \item le bloc {\sffamily Répéter} est un peu 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.
71 \par\vspace{1em}\par\begin{minipage}{0.4\linewidth}
72 \includegraphics{Algo2.1}
73 \end{minipage}
74 \hfill
75 \begin{minipage}{0.5\linewidth}
76 \small
77 \begin{lstlisting}[firstnumber=1,frame=tb]
78 input mp-scratch;
79
80 beginfig(1);
81 draw Drapeau;
82 draw Repeter2(10);
83 draw Repeter1(4);
84 draw Avancer(50);
85 draw Tournerd(90);
86 draw FinBlocRepeter1(10);
87 draw Avancer(60);
88 draw FinBlocRepeter2(10);
89 endfig;
90 end
91 \end{lstlisting}
92 \end{minipage}
93 \item Très peu de nouvelles commandes à apprendre\ldots
94 \end{Enumerate}
95 \subsection{Commandes Scratch}
96 \begin{description}
97 \item[Groupe {\sffamily Mouvement}]\hfil\newline
98 \begin{itemize}
99 \item[\textbullet]\lstinline!draw Avancer(10);!
100 \par\hfill\includegraphics{CommandeMouvement.1}
101 \item[\textbullet]\lstinline!draw Tournerd(90);!
102 \par\hfill\includegraphics{CommandeMouvement.2}
103 \item[\textbullet]\lstinline!draw Tournerg(90)!
104 \par\hfill\includegraphics{CommandeMouvement.3}
105 \item[\textbullet]\lstinline!draw Orienter(90);!
106 \par\hfill\includegraphics{CommandeMouvement.4}
107 \item[\textbullet]\lstinline!draw Orienterdirection("pointeur de souris");!
108 \par\hfill\includegraphics{CommandeMouvement.5}
109 \item[\textbullet]\lstinline!draw Aller(50,100);!
110 \par\hfill\includegraphics{CommandeMouvement.6}
111 \item[\textbullet]\lstinline!draw Allera("pointeur de souris");!
112 \par\hfill\includegraphics{CommandeMouvement.7}
113 \item[\textbullet]\lstinline!draw Glisser(2,50,100);!
114 \par\hfill\includegraphics{CommandeMouvement.8}
115 \item[\textbullet]\lstinline!draw Ajouter(10,"x");!
116 \par\hfill\includegraphics{CommandeMouvement.9}
117 \item[\textbullet]\lstinline!draw Mettre(10,"x");!
118 \par\hfill\includegraphics{CommandeMouvement.10}
119 \item[\textbullet]\lstinline!draw Ajouter(50,"y");!
120 \par\hfill\includegraphics{CommandeMouvement.11}
121 \item[\textbullet]\lstinline!draw Mettre(10,"y");!
122 \par\hfill\includegraphics{CommandeMouvement.12}
123 \item[\textbullet]\lstinline!draw Rebondir;!
124 \par\hfill\includegraphics{CommandeMouvement.13}
125 \item[\textbullet]\lstinline!draw FixerSensRotation("position \`a gauche ou \`a droite"';!
126 \par\hfill\includegraphics{CommandeMouvement.14}
127 \end{itemize}
128 \par\vspace*{2em}\par 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\
129 \[\includegraphics{CommandeMouvement.18}\kern0.1\linewidth\includegraphics{CommandeMouvement.19}\kern0.1\linewidth\includegraphics{CommandeMouvement.20}\]
130 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 montre les exemples ci-dessous :
131 \begin{itemize}
132 \item[\textbullet]\lstinline!draw Avancer("\opOp{$\opMouv{abscisse x}\bm{+}\opSimple{10}$}");!
133 \par\hfill\includegraphics{CommandeMouvement.15}
134 \item[\textbullet]\lstinline!draw Mettre("\opMouv{abscisse x}","y");!
135 \par\hfill\includegraphics{CommandeMouvement.16}
136 \item[\textbullet]\lstinline!draw Ajouter("\opMouv{direction}","y");!
137 \par\hfill\includegraphics{CommandeMouvement.17}
138 \end{itemize}
139 \item[Groupe {\sffamily Apparence}]\hfil\newline
140 \begin{itemize}
141 \item[\textbullet]\lstinline!draw DireT("Hello",2);!
142 \par\hfill\includegraphics{CommandeApparence.1}
143 \item[\textbullet]\lstinline!draw Dire("Hello");!
144 \par\hfill\includegraphics{CommandeApparence.2}
145 \item[\textbullet]\lstinline!draw PenserT("Hmm...",2);!
146 \par\hfill\includegraphics{CommandeApparence.3}
147 \item[\textbullet]\lstinline!draw Penser("Hmm...");!
148 \par\hfill\includegraphics{CommandeApparence.4}
149 \item[\textbullet]\lstinline!draw Montrer;!
150 \par\hfill\includegraphics{CommandeApparence.5}
151 \item[\textbullet]\lstinline!draw Cacher;!
152 \par\hfill\includegraphics{CommandeApparence.6}
153 \item[\textbullet]\lstinline!draw Basculer("\opAp{costume2}");!
154 \par\hfill\includegraphics{CommandeApparence.7}
155 \item[\textbullet]\lstinline!draw CostumeSuivant;!
156 \par\hfill\includegraphics{CommandeApparence.8}
157 \item[\textbullet]\lstinline!draw BasculerAR("\opAp{arriere-plan2}");!
158 \par\hfill\includegraphics{CommandeApparence.9}
159 \item[\textbullet]\lstinline!draw AjouterEffet("\opAp{couleur}",10);!
160 \par\hfill\includegraphics{CommandeApparence.10}
161 \item[\textbullet]\lstinline!draw MettreEffet("\opAp{couleur}",10);!
162 \par\hfill\includegraphics{CommandeApparence.11}
163 \item[\textbullet]\lstinline!draw AnnulerEffet;!
164 \par\hfill\includegraphics{CommandeApparence.12}
165 \item[\textbullet]\lstinline!draw AjouterTaille(10);!
166 \par\hfill\includegraphics{CommandeApparence.13}
167 \item[\textbullet]\lstinline!draw MettreA("\opOp{$\opSimple{10}\bm{+}\opSimple{5}$}");!
168 \par\hfill\includegraphics{CommandeApparence.14}
169 \item[\textbullet]\lstinline!draw AllerPPlan;!
170 \par\hfill\includegraphics{CommandeApparence.15}
171 \item[\textbullet]\lstinline!draw DeplacerAP("\opOp{$\opMouv{abscisse x}\bm{+}\opSimple{10}$}");!
172 \par\hfill\includegraphics{CommandeApparence.16}
173 \end{itemize}
174 \par\vspace*{2em}\par Les \og opérateurs\fg\
175 \[\includegraphics{CommandeApparence.17}\kern0.1\linewidth\includegraphics{CommandeApparence.18}\kern0.1\linewidth\includegraphics{CommandeApparence.19}\]
176 s'obtiennent avec la commande \LaTeX\ \lstinline!\opAp{}!.
177 \item[Groupe {\sffamily Son}]\hfil\newline
178 \begin{itemize}
179 \item[\textbullet]\lstinline!draw Jouer("miaou");!
180 \par\hfill\includegraphics{CommandeSon.1}
181 \item[\textbullet]\lstinline!draw JouerT("miaou");!
182 \par\hfill\includegraphics{CommandeSon.2}
183 \item[\textbullet]\lstinline!draw ArreterSon;!
184 \par\hfill\includegraphics{CommandeSon.3}
185 \item[\textbullet]\lstinline!draw Tambour(2,0.25);!
186 \par\hfill\includegraphics{CommandeSon.4}
187 \item[\textbullet]\lstinline!draw Pause(0.25);!
188 \par\hfill\includegraphics{CommandeSon.5}
189 \item[\textbullet]\lstinline!draw JouerNote(50,0.25);!
190 \par\hfill\includegraphics{CommandeSon.6}
191 \item[\textbullet]\lstinline!draw ChoisirInstrument(17);!
192 \par\hfill\includegraphics{CommandeSon.7}
193 \item[\textbullet]\lstinline!draw AjouterVol(-10);!
194 \par\hfill\includegraphics{CommandeSon.8}
195 \item[\textbullet]\lstinline!draw MettreVol(15);!
196 \par\hfill\includegraphics{CommandeSon.9}
197 \item[\textbullet]\lstinline!draw AjouterTempo(20);!
198 \par\hfill\includegraphics{CommandeSon.10}
199 \item[\textbullet]\lstinline!draw MettreTempo(15);!
200 \par\hfill\includegraphics{CommandeSon.11}
201 \end{itemize}
202 Les \og opérateurs\fg\ s'obtiennent par la commande \LaTeX\ \lstinline!\opSon{}!.
203 \[\includegraphics{CommandeSon.12}\kern0.1\linewidth\includegraphics{CommandeSon.13}\]
204 \item[Groupe {\sffamily Stylo}]\hfil\newline
205 \begin{itemize}
206 \item[\textbullet]\lstinline!draw Effacer!
207 \par\hfill\includegraphics{CommandeStylo.1}
208 \item[\textbullet]\lstinline!draw Estampiller!
209 \par\hfill\includegraphics{CommandeStylo.2}
210 \item[\textbullet]\lstinline!draw PoserStylo!
211 \par\hfill\includegraphics{CommandeStylo.3}
212 \item[\textbullet]\lstinline!draw ReleverStylo!
213 \par\hfill\includegraphics{CommandeStylo.4}
214 \item[\textbullet]\lstinline!draw MettreCouleur("Magenta",1,0,1);!\footnote{La couleur est définie par son tripler {\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}.}
215 \par\hfill\includegraphics{CommandeStylo.5}
216 \item[\textbullet]\lstinline!draw AjouterCS("\opOp{$\opSimple{15}\bm{+}\opSimple{10}$}");!
217 \par\hfill\includegraphics{CommandeStylo.6}
218 \item[\textbullet]\lstinline!draw MettreCS(25);!
219 \par\hfill\includegraphics{CommandeStylo.7}
220 \item[\textbullet]\lstinline!draw AjouterIS("\opOp{$\opSimple{25}\bm{-}\opSimple{10}$}");!
221 \par\hfill\includegraphics{CommandeStylo.8}
222 \item[\textbullet]\lstinline!draw MettreIS(15);!
223 \par\hfill\includegraphics{CommandeStylo.9}
224 \item[\textbullet]\lstinline!draw AjouterTS(12);!
225 \par\hfill\includegraphics{CommandeStylo.10}
226 \item[\textbullet]\lstinline!draw MettreTS("\opOp{$\opSimple{15}\bm{\times}\opSimple{10}$}");!
227 \par\hfill\includegraphics{CommandeStylo.11}
228 \end{itemize}
229 \item[Groupe {\sffamily Données}]\hfil\newline
230 \begin{itemize}
231 \item[\textbullet]\lstinline!draw MettreVar("pi",0);!
232 \par\hfill\includegraphics{CommandeVariable.1}
233 \item[\textbullet]\lstinline!draw AjouterVar("pi","\opOp{$\opSimple{15}\bm{+}\opSimple{10}$}");!
234 \par\hfill\includegraphics{CommandeVariable.2}
235 \item[\textbullet]\lstinline!draw MontrerVar("pi");!
236 \par\hfill\includegraphics{CommandeVariable.3}
237 \item[\textbullet]\lstinline!draw CacherVar("pi");!
238 \par\hfill\includegraphics{CommandeVariable.4}
239 \item[\textbullet]\lstinline!draw AjouterList("\opSimple{\LaTeX}","Listepi");!
240 \par\hfill\includegraphics{CommandeVariable.5}
241 \item[\textbullet]\lstinline!draw SupprimerList("\opSimple{\LaTeX}","Listepi");!
242 \par\hfill\includegraphics{CommandeVariable.6}
243 \item[\textbullet]\lstinline!draw InsererList("\opSimple{\MP}",1,"Listepi");!
244 \par\hfill\includegraphics{CommandeVariable.7}
245 \item[\textbullet]\lstinline!draw RemplacerList(3,"Listepi","\opOp{$\opSimple{4}\bm{+}\opSimple{5}$}");!
246 \par\hfill\includegraphics{CommandeVariable.8}
247 \item[\textbullet]\lstinline!draw MontrerList("Listepi");!
248 \par\hfill\includegraphics{CommandeVariable.9}
249 \item[\textbullet]\lstinline!draw CacherList("Listepi");!
250 \par\hfill\includegraphics{CommandeVariable.10}
251 \end{itemize}
252 \par\vspace*{2em}\par Les \og opérateurs\fg
253 \begin{center}
254 \begin{minipage}{0.8\linewidth}
255 \includegraphics{CommandeVariable.11}\hfill\includegraphics{CommandeVariable.12}\hfill \includegraphics{CommandeVariable.13}\par
256 \includegraphics{CommandeVariable.14}\hfill \includegraphics{CommandeVariable.15}
257 \end{minipage}
258 \end{center}
259 s'obtiennent par les commandes \LaTeX\ \lstinline!\opVar{}!, \lstinline!\opList{}! et \lstinline!\opSousList!.
260 \item[Groupe {\sffamily \'Evènement}]\hfil\newline
261 \begin{itemize}
262 \item[\textbullet]\lstinline!draw Drapeau!
263 \par\hfill\includegraphics{CommandeEvenements.1}
264 \item[\textbullet]\lstinline!draw Presse("espace");!
265 \par\hfill\includegraphics{CommandeEvenements.2}
266 \item[\textbullet]\lstinline!draw LutinPresse;!
267 \par\hfill\includegraphics{CommandeEvenements.3}
268 \item[\textbullet]\lstinline!draw BasculeAR("arriere-plan1");!
269 \par\hfill\includegraphics{CommandeEvenements.4}
270 \item[\textbullet]\lstinline!draw VolumeSup("Volume sonore",10);!
271 \par\hfill\includegraphics{CommandeEvenements.5}
272 \item[\textbullet]\lstinline!draw RecevoirMessage("message1");!
273 \par\hfill\includegraphics{CommandeEvenements.6}
274 \item[\textbullet]\lstinline!draw EnvoyerMessage("message1");!
275 \par\hfill\includegraphics{CommandeEvenements.7}
276 \item[\textbullet]\lstinline!draw EnvoyerMessageA("message1");!
277 \par\hfill\includegraphics{CommandeEvenements.8}
278 \end{itemize}
279 \item[Groupe {\sffamily Contrôle}]\hfil\newline
280 \begin{itemize}
281 \item[\textbullet]\lstinline!draw Attendre("\opOp{$\opSimple{10}\bm{+}\opSimple{40}$}");!
282 \par\hfill\includegraphics{CommandeControle.1}
283 \item[\textbullet]
284 \begin{lstlisting}[frame=tb]
285 draw Repeter1("\opOp{$\opSimple{10}\bm{+}\opSimple{40}$}");
286 draw LigneVide(10);
287 draw FinBlocRepeter1(10);
288 \end{lstlisting}
289 \par\hfill\includegraphics{CommandeControle.2}
290 \item[\textbullet]
291 \begin{lstlisting}[frame=tb]
292 draw RepeterI1;
293 draw LigneVide(10);
294 draw FinBlocRepeter1(10);
295 \end{lstlisting}
296 \par\hfill\includegraphics{CommandeControle.3}
297 \item[\textbullet]
298 \begin{lstlisting}[frame=tb]
299 draw Si1("\opOp{$\opSimple{10}\bm{+}\opMouv{Abscisse x}%
300 \bm{=}\opSimple{20}$}");
301 draw LigneVide(10);
302 draw FinBlocSi1;
303 \end{lstlisting}
304 \par\hfill\includegraphics{CommandeControle.4}
305 \item[\textbullet]
306 \begin{lstlisting}[frame=tb]
307 draw Si1("\opOp{$\opSimple{10}\bm{+}\opMouv{Abscisse x}%
308 \bm{=}\opSimple{20}$}");
309 draw LigneVide(10);
310 draw Sinon1;
311 draw LigneVide(10);
312 draw FinBlocSi1;
313 \end{lstlisting}
314 \par\hfill\includegraphics{CommandeControle.5}
315 \item[\textbullet]{\footnotesize\lstinline!draw AttendreJ("\opOp{$\opSimple{10}\bm{+}\opMouv{Abscisse x}\bm{=}\opSimple{20}$}");!}
316 \par\hfill\includegraphics{CommandeControle.6}
317 \item[\textbullet]
318 \begin{lstlisting}[frame=tb]
319 draw RepeterJ1("\opOp{$\opSimple{10}\bm{+}\opMouv{Abscisse x}%
320 \bm{=}\opSimple{20}$}");
321 draw LigneVide(10);
322 draw FinBlocRepeter1(10);
323 \end{lstlisting}
324 \par\hfill\includegraphics{CommandeControle.7}
325 \item[\textbullet]\lstinline!draw Stop("ce script");!
326 \par\hfill\includegraphics{CommandeControle.8}
327 \item[\textbullet]\lstinline!draw CommencerClone;!
328 \par\hfill\includegraphics{CommandeControle.9}
329 \item[\textbullet]\lstinline!draw CreerClone("Lutin1");!
330 \par\hfill\includegraphics{CommandeControle.10}
331 \item[\textbullet]\lstinline!draw SupprimerClone;!
332 \par\hfill\includegraphics{CommandeControle.11}
333 \end{itemize}
334 \item[Groupe {\sffamily Capteurs}]\hfil\newline
335 \begin{itemize}
336 \item[\textbullet]\begin{filecontents*}{capteur1.txt}
337 draw Demander("Quel est votre prénom ?");
338 \end{filecontents*}
339 \lstinputlisting[inputencoding=utf8/latin1]{capteur1.txt}
340 \par\hfill\includegraphics{CommandeCapteurs.1}
341 \item[\textbullet]\lstinline!draw ActiverVideo("active");!
342 \par\hfill\includegraphics{CommandeCapteurs.2}
343 \item[\textbullet]\lstinline!draw TransparenceVideo("\opOp{$\opSimple{17}\bm{+}\opSimple{25}$}");!
344 \par\hfill\includegraphics{CommandeCapteurs.3}
345 \item[\textbullet]\lstinline!draw ReinitChrono;!
346 \par\hfill\includegraphics{CommandeCapteurs.4}
347 \end{itemize}
348 \par\vspace*{2em}\par Les \og opérateurs\fg\ s'obtiennent par les commandes \LaTeX\ \lstinline!\opCap{}! et \lstinline!\opCapCap!.
349 \begin{center}
350 \begin{minipage}{0.8\linewidth}
351 \includegraphics{CommandeCapteurs.5}\par
352 \includegraphics{CommandeCapteurs.6}\hfill \includegraphics{CommandeCapteurs.7}\par
353 \includegraphics{CommandeCapteurs.19}\par
354 \includegraphics{CommandeCapteurs.20}\hfill\includegraphics{CommandeCapteurs.8}
355 \par\includegraphics{CommandeCapteurs.9}\hfill \includegraphics{CommandeCapteurs.10}\hfill\includegraphics{CommandeCapteurs.11}
356 \par\includegraphics{CommandeCapteurs.12}\hfill \includegraphics{CommandeCapteurs.13}\par
357 \includegraphics{CommandeCapteurs.14}\hfill\includegraphics{CommandeCapteurs.15}
358 \par\includegraphics{CommandeCapteurs.16}\hfill
359 \includegraphics{CommandeCapteurs.17}\hfill\includegraphics{CommandeCapteurs.18}
360 \end{minipage}
361 \end{center}
362 Néanmoins, il faut parfois un codage conséquent. Par exemple, voici un capteur et son code.
363 \par\begin{minipage}{0.2\linewidth}
364 \includegraphics{CommandeCapteurs.7}
365 \end{minipage}
366 \hfill
367 \begin{minipage}{0.75\linewidth}
368 \small
369 \begin{lstlisting}[frame=tb]
370 \opCap{couleur %
371 \definecolor{Magenta}{rgb}{1,0,1}%
372 \colorbox{Magenta}{\textcolor{white}{\phantom{t}}}%
373 touche%
374 \definecolor{LGray}{gray}{0.85}%
375 \colorbox{LGray}{\textcolor{white}{\phantom{t}}} ?%
376 }
377 \end{lstlisting}
378 \end{minipage}
379 \\Un peu barbare, non ? Mais, cela ne nécessitera qu'un simple copier-coller pour les autres utilisations\ldots%}
380 \item[Groupe {\sffamily Opérateurs}]\hfil\newline
381 Les éléments de ce groupe s'obtiennent par les commandes \LaTeX\ \lstinline!\opOp{}! et \lstinline!\opSousOp{}!.
382 \begin{center}
383 \begin{minipage}{0.8\linewidth}
384 \includegraphics{CommandeOperateurs.1}\hfill\includegraphics{CommandeOperateurs.2}\hfill\includegraphics{CommandeOperateurs.3}\hfill
385 \includegraphics{CommandeOperateurs.4}\par
386 \includegraphics{CommandeOperateurs.5}\par
387 \includegraphics{CommandeOperateurs.6}\hfill \includegraphics{CommandeOperateurs.7}\hfill\includegraphics{CommandeOperateurs.8}
388 \par\includegraphics{CommandeOperateurs.9}\hfill \includegraphics{CommandeOperateurs.10}\hfill\includegraphics{CommandeOperateurs.11}
389 \par\includegraphics{CommandeOperateurs.12}\hfill \includegraphics{CommandeOperateurs.13}\par
390 \includegraphics{CommandeOperateurs.14}
391 \par\includegraphics{CommandeOperateurs.15}\hfill\includegraphics{CommandeOperateurs.16}\hfill\includegraphics{CommandeOperateurs.17}
392 \end{minipage}
393 \end{center}
394 \item[Groupe {\sffamily Ajouter blocs}]\hfil\newline
395 \begin{itemize}
396 \item[\textbullet]\lstinline!draw NouveauBloc("Pentagone");!
397 \par\hfill\includegraphics{CommandeBloc.1}
398 \item[\textbullet]\lstinline!draw NouveauBloc("Pentagone \opBloc{cote}");!
399 \par\hfill\includegraphics{CommandeBloc.3}
400 \item[\textbullet]\lstinline!draw Bloc("Pentagone");!
401 \par\hfill\includegraphics{CommandeBloc.2}
402 \end{itemize}
403 \end{description}
404 Terminons cette liste de commandes par un algorithme associé à la suite de Syracuse :)
405 \[\includegraphics[scale=0.8]{Syracuse.1}\]
406 \begin{filecontents*}{Syracuse.txt}
407 beginfig(1);
408 draw Drapeau;
409 draw SupprimerList("\opSimple{tout}","Suite");
410 draw Demander("\opSimple{Quel est le nombre choisi ?}");
411 draw AjouterList("\opCap{réponse}","Suite");
412 draw MettreVar("pas",1);
413 draw RepeterI1;
414 draw Si2("\opOp{\opList{élément \opVar{pas} de \opSousList{Suite}} modulo \opSimple{2}%
415 \,$\bm{=}$\,\opSimple{0}}");
416 draw MettreVar("résultat","\opOp{\opList{élément \opVar{pas} de \opSousList{Suite}}%
417 \,$\bm{/}$\,\opSimple{2}}");
418 draw Sinon2;
419 draw MettreVar("résultat","\opOp{\opSimple{3}\,$\bm{\times}$\,\opList{élément \opVar{pas}%
420 de \opSousList{Suite}}\,$\bm{+}$\,\opSimple{1}}");
421 draw FinBlocSi2;
422 draw Si3("\opList{\opSousList{Suite} contient \opVar{résultat} ?}");
423 draw Stop("tout");
424 draw Sinon3;
425 draw AjouterList("\opVar{résultat}","Suite");
426 draw AjouterVar("pas",1);
427 draw FinBlocSi3;
428 draw FinBlocRepeter1(10);
429 endfig;
430
431 end
432 \end{filecontents*}
433 {\footnotesize
434 \lstinputlisting[inputencoding=utf8/latin1,frame=tb]{Syracuse.txt}
435 }
436 \newpage
437 \section{Quelques exemples}
438 \subsection{Sujet de Brevet des collèges}
439 \vspace{-2em}
440 % \begin{figure}[h]
441 % \centering
442 % \includegraphics{Scratch2-2}
443 %\caption{Figure du Sujet 0 de mathématiques du Brevet des Collèges}
444 %\label{fig:4}
445 %\end{figure}
446 \begin{figure}[h]
447 \centering
448 \includegraphics{Scratch2-2}\par
449 \includegraphics[scale=0.85]{Scratch2-3}\kern0.05\linewidth\includegraphics{Algo3.1}
450 \caption{Figure du Sujet 0 - versions Scratch et \MP}
451 \label{fig:3}
452 \end{figure}
453 %\begin{minipage}{0.5\linewidth}
454 {\small
455 \begin{lstlisting}[firstnumber=1,frame=tb]
456 beginfig(1);
457 draw Drapeau;
458 draw Effacer;
459 draw MettreTS(1);
460 draw Repeter2(6);
461 draw PoserStylo;
462 draw Repeter1(4);
463 draw Avancer(50);
464 draw Tournerd(90);
465 draw FinBlocRepeter1(10);
466 draw ReleverStylo;
467 draw AjouterTS(1);
468 draw Avancer(60);
469 draw FinBlocRepeter2(10);
470 endfig;
471 \end{lstlisting}
472 }
473 \newpage
474 \subsection{\OE uvre d'art}
475 \begin{figure}[h]
476 \centering
477 \includegraphics[width=0.7\linewidth]{Morellet}
478 \label{fig:5}
479 \caption{François Morellet - Oeuvre Pi piquant, 1=1°, 38 décimales}
480 \end{figure}
481 \[\includegraphics[width=0.75\linewidth]{Ex-Morellet.1}\]
482 \begin{filecontents*}{Morellet.txt}
483 beginfig(1)%François Morellet - Oeuvre Pi piquant, 1=1°, 38 décimales
484 draw Drapeau;
485 draw Effacer;
486 draw Aller(-50,0);
487 draw Orienter(180);
488 draw PoserStylo;
489 draw Tournerg("\opList{élément \opSimple{1} de \opSousList{Pi}}");
490 draw Avancer(150);
491 draw MettreVar("varpi","\opSimple{2}");
492 draw RepeterJ1("\opOp{\opVar{varpi}\,$\bm{>}$\,38}");
493 draw Si2("$\opOp{\opVar{varpi}\mbox{ modulo }\opSimple{2}\,=\,\opSimple{0}}$");
494 draw Tournerg("$\opOp{\opSimple{180}}\bm{-}\opList{élément \opVar{varpi} de \opSousList{pi}}$");
495 draw Sinon2;
496 draw Tournerd("$\opOp{\opSimple{180}}-\opList{élément \opVar{varpi} de \opSousList{pi}}$");
497 draw FinBlocSi2;
498 draw Avancer(150);
499 draw AjouterVar("varpi","\opSimple{1}");
500 draw FinBlocRepeter1(10);
501 draw ReleverStylo;
502 endfig;
503 \end{filecontents*}
504 {\footnotesize
505 \lstinputlisting[inputencoding=utf8/latin1,frame=tb]{Morellet.txt}
506 }
507 \newpage
508 \subsection{Une \og spirale\fg}
509 \begin{figure}[h!]
510 \centering
511 \begin{minipage}{0.4\linewidth}
512 \[\includegraphics[scale=0.8]{ex-tice74.1}\]
513 {\tiny Source : \url{http://www.ac-grenoble.fr/tice74/spip.php?article1219}}
514 \end{minipage}
515 \hfill
516 \begin{minipage}{0.55\linewidth}
517 \begin{lstlisting}[frame=tb]
518 beginfig(1);
519 draw Drapeau;
520 draw ReleverStylo;
521 draw Aller(0,0);
522 draw Orienter(90);
523 draw PoserStylo;
524 draw MettreVar("i",1);
525 draw RepeterJ1("\opOp{$\opVar{i}\bm{=}%
526 \opSimple{200}$}");
527 draw Avancer("\opVar{i}");
528 draw AjouterVar("i",1);
529 draw Tournerd(121);
530 draw FinBlocRepeter1(10);
531 endfig;
532 \end{lstlisting}
533 \end{minipage}
534 \caption{Figure géométrique - Code Scratch}
535 \label{fig:10}
536 \end{figure}
537 \[\includegraphics[scale=1]{ex-tice74-scratch.1}\]
538 \newpage
539 \subsection{Triangle de Sierpinski}
540 \begin{figure}[h]
541 \centering
542 \includegraphics[scale=0.5]{Ex-Serpinski.1}\par
543 \includegraphics{Ex-Serpinski-scratch.1}
544 \caption{Triangle de Sierpinski - Code Scratch et \MP}
545 \label{fig:11}
546 \end{figure}
547 %\begin{lstlisting}[frame=tb]
548 \begin{filecontents*}{Sierpinski.txt}
549 beginfig(1);%https://sites.google.com/site/stjomaths/scratch
550 draw Drapeau;
551 draw Aller(-200,-150);
552 draw Orienter(0);
553 draw Effacer;
554 draw PoserStylo;
555 draw Demander("\opSimple{rang ?}");
556 draw MettreVar("rang","\opCap{réponse}");
557 draw Demander("\opSimple{dimension du motif ?}");
558 draw MettreVar("rang","\opCap{réponse}");
559 draw Bloc("Sierpinski \opBloc{rang} \opBloc{triangles}");
560 _coinprec:=(10cm,0);
561 draw NouveauBloc("Sierpinski \opBloc{rang} \opBloc{triangles}");
562 draw Si1("\opOp{non $\opBloc{rang}\bm{=}0$}");
563 draw Repeter2(3);
564 draw Bloc("Sierpinski \opOp{$\opBloc{rang}\bm{-}\opSimple{1}$}%
565 \opOp{$\opBloc{triangles}\,\bm{/}\,\opSimple{2}$}");
566 draw Avancer("\opBloc{triangles}");
567 draw Tournerd(120);
568 draw FinBlocRepeter2(10);
569 draw FinBlocSi1;
570 endfig;
571 \end{filecontents*}
572 %\end{lstlisting}
573 {\footnotesize
574 \lstinputlisting[inputencoding=utf8/latin1,frame=tb]{Sierpinski.txt}
575 }
576 \newpage
577 \section{Historique}
578 \begin{description}
579 \item[21/01/2017] {\bfseries Version 0.5} - Publication sur \url{www.melusine.eu.org/syracuse/}
580 \item[19/01/2017] {\bfseries Version 0.32} - Ajout d'éléments de présentation ($\blacktriangledown$).
581 \item[18/01/2017] {\bfseries Version 0.31} - Ajout du groupe {\sffamily Son}.
582 \item[15/01/2017] {\bfseries Version 0.3} - Modification du code. Conception de la documentation.
583 \item[08/01/2017] {\bfseries Version 0.2} - Ajout des commandes des groupes {\sffamily Données} et {\sffamily Capteurs}.
584 \item[06/01/2017] {\bfseries Version 0.15} - Ajout des commandes du groupe {\sffamily Ajouter blocs}.
585 \item[05/01/2017] {\bfseries Version 0.1} - Sont disponibles les commandes des groupes {\sffamily Mouvement}, {\sffamily Apparence}, {\sffamily Stylo}, {\sffamily Evènements}, {\sffamily Contrôle}.
586 \end{description}
587 \end{document}

Licence Creative Commons Les fichiers de Syracuse sont mis à disposition (sauf mention contraire) selon les termes de la
Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.