\documentclass[a4paper,11pt]{article}
\usepackage{array}
\usepackage{multirow}
\usepackage{lastpage}
\usepackage{verbatim}
\usepackage[francais]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{amsfonts,amsmath,amssymb,mathrsfs,amsthm} 
\usepackage{fancyhdr}
\usepackage{lmodern}
\usepackage{ScratchX}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%----------------------------------- SI ALORS TOUTE BLANCHE-----------------------------------------------------------
\newcommand{\whitesailors}[2]{%loop with as many blocks as we want
	%	Créer un compteur à chaque passage dans cette boucle.	%	l'incrémenter du nombre de fois où ce décalage s'opère
	%	décaler en abscisse : ajouter 0,4 à x	%	mettre le compteur NbreComptr à NbreComptr+1
\ifthenelse{\value{NbrCptrLoupeDuplicate}=0}%aucun compteurs loupe créés
		{
		\ifthenelse{\value{CompteurMax}=0}
		{\loope{\theNbrCptrLoupe}{#2}}
		{
			\ifthenelse{\value{NbrCptrLoupe}<\value{CompteurMax}}%\or\value{NbrCptrLoupe}=\value{CompteurMax}}
				{\looope{\theNbrCptrLoupe}{#2}}
				{\loope{\theNbrCptrLoupe}{#2}}%pour ne pas recréer des compteurs déjà créés
		}
		}
		{\looope{\theNbrCptrLoupe}{#2}}

\ifthenelse{\value{NbrCptrAlorsDuplicate}=0}%aucun compteurs aloors créés
		{\sialoors{#1}}
		{\sialooors{#1}}%pour ne pas recréer des compteurs déjà créés
\settowidth{\malongueuR}{\pgfinterruptpicture #1 \endpgfinterruptpicture}

	\FPeval{X}{\x+(0.4)*\thedecalageX}	
	\FPeval{Y}{\y+(neg 0.66)*(\thedecalageY)}
	
	%\StrLen{#1}[\valeur]% pour ajuster la longueur de la boîte en fonction de la longueur du texte
	\FPeval{b}{neg 0.1+Y}\FPeval{c}{0.36+Y}\FPeval{d}{0.1+X}
	\FPeval{e}{0.46+Y}\FPeval{f}{0.4+X}\FPeval{g}{0.5+X}\FPeval{h}{0.7+X}\FPeval{i}{0.8+X}\FPeval{j}{0.7+(X)}
	\FPeval{ii}{1.2+X}\FPeval{iii}{1.1+X}\FPeval{iiii}{0.9+X}\FPeval{gg}{0.6+X}
	\FPeval{l}{neg 0.2+(Y)}\FPeval{m}{neg 0.3+(Y)}\FPeval{o}{0.1+(Y)}
	%top
	%bottom#1
	\FPeval{mm}{neg 0.1+(neg 0.66)*(#2)+(Y)}
	\FPeval{mmm}{neg 0.2+(neg 0.66)*(#2)+(Y)}\FPeval{mmmm}{neg 0.3+(neg 0.66)*(#2)+(Y)}\FPeval{M}{neg 0.75+(neg 0.66)*(#2)+(Y)}\FPeval{MM}{neg 0.85+(neg 0.66)*(#2)+(Y)}\FPeval{MN}{neg 0.95+(neg 0.66)*(#2)+(Y)}\FPeval{MMM}{neg 0.55+(neg 0.66)*(#2)+(Y)}\FPeval{MMMM}{MMM-0.02}\FPeval{JJ}{j+0.02}%adjusting the height of the bottom
	\coordinate (A) at ($(\d,\e) ! \malongueuR ! (\f,\e)$);
	\coordinate (AA) at ($(\X,\c) ! \malongueuR+0.2cm ! (\g,\c)$);
	\coordinate (BB) at ($(\X,\M) ! \malongueuR+0.2cm ! (\f,\M)$);
	\coordinate (B) at ($(\g,\mmm) ! \malongueuR-0.4cm ! (\i,\mmm)$);	

\multido{\i=1+1}{\value{NbrCptrLoupe}}{%Fait défiler tous les compteurs jusqu'au nombre de compteurs : si compteur différent de -1 :
	%		si différent de 0, leur enlever 1. / si égal à 0 : enlever 1 à décalageX et mettre le compteur correspondant à -1.
	\ifthenelse{\value{loupe\i}>-1}{
			\ifthenelse{\value{loupe\i}=0}
			{\addtocounter{decalageX}{-1}\addtocounter{decalageY}{1}\setcounter{loupe\i}{-1}}
			{\addtocounter{loupe\i}{-1}}
			}{}
	}
\addtocounter{decalageX}{1}
\addtocounter{decalageY}{1}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\pagestyle{fancy}
\fancyhead{}
		\fancyhead[LE,LO]{\em \LaTeX}
		\fancyhead[CE,CO]{\Large \textsc{Le paquet \texttt{ScratchX.sty}}}
		\fancyhead[RE,RO]{\em 2016--2017}
		\fancyfoot[CE,CO]{\thepage /\pageref{LastPage}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%----------------------------------------------------------------------------------------------------------------------------------%
%----------------------------------------------------------------------------------------------------------------------------------%
\section*{
\centering{
	\begin{Scratch}
	\beginbox{Guide d'utilisation du paquet \cb[ope]{ScratchX.sty\ }}
	\end{Scratch}
		}
}
\begin{center}
\begin{Scratch}
\scbox{Thibault Ralet}{ctrl}
\scbox{mars \rb{2017}}{data}
\end{Scratch}
\end{center}

\noindent\rule{\linewidth}{.5pt}


\parbox{1ex}{\Scratchy[0.1][0.1]}\\

\hspace{1cm}\parbox{1ex}{\Scratchy[0.2][0.2]}\\

\hspace{2cm}\parbox{1ex}{\Scratchy[0.5][1]}\\

\hspace{5cm}\parbox{1ex}{\Scratchy[0.75][1.5]}\\

%----------------------------------------------------------------------------------------------------------------------------------%
%----------------------------------------------------------------------------------------------------------------------------------%
\section{Introduction}
Le paquet \texttt{ScratchX.sty} permet d'écrire n'importe quel programme Scratch en \LaTeX.

Le paquet \texttt{ScratchX.sty} doit être mis dans le même dossier que celui dans lequel le fichier \texttt{.tex} est créé, ou dans le dossier dédié aux packages de l'éditeur de fichiers .tex.

Le paquet\texttt{ScratchX.sty} doit être appelé dans le préambule du fichier \texttt{.tex} par :

\begin{verbatim} \usepackage{ScratchX} \end{verbatim}

Le paquet \texttt{ScratchX.sty} utilise les paquets suivants :
\begin{verbatim}
\usepackage[nomessages]{fp}
\usepackage{calc}
\usepackage{xstring}
\usepackage[alpine]{ifsym}%pour avoir VarFlag comme
%drapeau de départ de Scratch
\usepackage{ifthen}
\usepackage{multido}
\usepackage{xargs}
\end{verbatim}

Dans le document \texttt{.tex} créé, il faut charger :
\begin{verbatim}
\usepackage{tikz}
\usetikzlibrary{calc}
\end{verbatim}
et aussi :
\begin{verbatim}
\usepackage{amssymb}
\end{verbatim}

La compilation peut s'effectuer en XeLaTeX ou en pdfLaTeX.

\newpage
%----------------------------------------------------------------------------------------------------------------------------------%
%----------------------------------------------------------------------------------------------------------------------------------%
\section{Description générale}

On écrit un programme (ou simplement une commande) Scratch à l'aide de l'environnement :

\begin{verbatim}
\begin{Scratch}
%commandes LaTeX pour créer les commandes Scratch
\end{Scratch}
\end{verbatim}

La commande \texttt{\textbackslash begin\{Scratch\}} admet en option l'échelle (1 par défaut).

Ainsi,\texttt{\textbackslash begin\{Scratch\}[2]} double la taille du programme, alors que  \texttt{\textbackslash begin\{Scratch\}[0.7]} réduit de 70\% la taille du programme créé.

\begin{center}
\begin{tabular}{cc}

\begin{Scratch}[1]
\scbox{taille par défaut}{app}
\end{Scratch}
&
\begin{Scratch}[2]
\scbox{plus gros}{app}
\end{Scratch}\\
&
\begin{Scratch}[0.7]
\scbox{plus petit}{app}
\end{Scratch}
\end{tabular}
\end{center}

%----------------------------------------------------------------------------------------------------------------------------------%
\subsection*{Les couleurs}
Les dix couleurs spécifiques à Scratch sont définies ainsi :
\begin{center}
\begin{tabular}{c@{:\quad}cp{1cm}c@{:\quad }c}\hline
mvt&\textcolor{mvt}{Mouvement}&&evt&\textcolor{evt}{Evénements}\\
app&\textcolor{app}{Apparence}&&ctrl&\textcolor{ctrl}{Contrôle}\\
son&\textcolor{son}{Sons}&&capt&\textcolor{capt}{Capteurs}\\
stylo&\textcolor{stylo}{Stylo}&&ope&\textcolor{ope}{Opérateurs}\\
data&\textcolor{data}{Données}&&bloc&\textcolor{bloc}{Ajouter blocs}\\\hline
\end{tabular}
\end{center}

\newpage
%----------------------------------------------------------------------------------------------------------------------------------%
%----------------------------------------------------------------------------------------------------------------------------------%
\section{Liste des commandes}

%----------------------------------------------------------------------------------------------------------------------------------%
\subsection{Commandes Scratch simples}
On les obtient avec \texttt{\textbackslash scbox\{<texte>\}\{<couleur>\}}.

En tapant :
\begin{verbatim}
\begin{Scratch}
\scbox{rebondir si le bord est atteint}{mvt}
\scbox{cacher}{app}
\scbox{arrêter tous les sons}{son}
\scbox{stylo en position d'écriture}{stylo}
\scbox{réinitialiser le chronomètre}{capt}
\end{Scratch}
\end{verbatim}

on obtient :\\

\begin{Scratch}
\scbox{rebondir si le bord est atteint}{mvt}
\scbox{cacher}{app}
\scbox{arrêter tous les sons}{son}
\scbox{stylo en position d'écriture}{stylo}
\scbox{réinitialiser le chronomètre}{capt}
\end{Scratch}

%----------------------------------------------------------------------------------------------------------------------------------%
\subsection{Commandes Scratch spéciales}

\subsubsection{\'Evénement}%%%%%%%%%%%%%%%%%%%%%%%%
On les obtient avec \texttt{\textbackslash beginbox\{<texte>\}}.

\texttt{\textbackslash beginbox\{\}} produit \parbox{1ex}{\begin{Scratch}\beginbox{}\end{Scratch}}

\texttt{\textbackslash beginbox\{clone\}} produit \parbox{1ex}{\begin{Scratch}\beginbox{clone}\end{Scratch}}

\texttt{\textbackslash beginbox\{quand ce lutin est cliqué\}} produit

\hfill\parbox{6cm}{\begin{Scratch}\beginbox{quand ce lutin est cliqué}\end{Scratch}}

\subsubsection{Tourner}%%%%%%%%%%%%%%%%%%%%%%%%
On les obtient avec \texttt{\textbackslash turnbox\{<orientation>\}\{<angle>\}}.\\

\texttt{\textbackslash turnbox\{\}\{-145\}} produit \raisebox{-3mm}{\begin{Scratch}\turnbox{}{-145}\end{Scratch}}

\texttt{\textbackslash turnbox\{gauche\}\{30\}} produit \raisebox{-3mm}{\begin{Scratch}\turnbox{gauche}{30}\end{Scratch}}

On peut également écrire \texttt{\textbackslash turnbox\{g\}\{30\}} ou \texttt{\textbackslash turnbox\{G\}\{30\}}

\subsubsection{Boucles}%%%%%%%%%%%%%%%%%%%%%%%%
On les obtient avec

\texttt{\textbackslash boucle\{<texte>\}\{<nombre de blocs à l'intérieur>\}\{<type>\}},

où <type> est un entier égal à 1 (\emph{répéter $x$ fois} ou \emph{répéter jusqu'à}) ou -1 (\emph{répéter indéfiniment}).\\

\parbox{0.53\linewidth}{\texttt{\textbackslash boucle\{répéter \$x\$ fois\}\{2\}\{1\}}
\par
\texttt{\textbackslash scbox\{deux blocs\}\{red\}}
\par
\texttt{\textbackslash scbox\{dans la boucle\}\{gray\}}
}
\parbox{0.12\linewidth}{produit}
\parbox{0.2\linewidth}{\raisebox{-3mm}{
\begin{Scratch}[0.9]
\boucle{répéter $x$ fois}{2}{1}
\scbox{deux blocs}{red}
\scbox{dans la boucle}{gray}
\end{Scratch}}}

\begin{center}
\begin{tabular}{lcr}
\texttt{\textbackslash boucle\{répéter indéfiniment\}\{3\}\{-1\}}&&\multirow{3}{*}{\begin{Scratch}[0.9]
\boucle{répéter indéfiniment}{3}{-1}
\scbox{cette fois-ci}{pink}
\scbox{trois blocs}{blue}
\scbox{dans la boucle}{purple}
\end{Scratch}}\\
\texttt{\textbackslash scbox\{cette fois-ci\}\{pink\}}&&\\
\texttt{\textbackslash scbox\{trois blocs\}\{blue\}}&&\\
\texttt{\textbackslash scbox\{dans la boucle\}\{purple\}}&&\\
&&\\
&&\\
\end{tabular}\end{center}

\emph{Attention, lorsque l'on souhaite placer des boucles dans des boucles, il faut repenser le nombre de blocs de la boucle principale ! En effet, une boucle compte pour deux blocs (sans les blocs contenus à l'intérieur).}

\subsubsection{Si \dots\ Alors}%%%%%%%%%%%%%%%%%%%%%%%%

\emph{Attention, on obtient cette commande Scratch avec la même syntaxe que précédemment, à savoir :}

\texttt{\textbackslash boucle\{<texte>\}\{<nombre de blocs à l'intérieur>\}\{2\}}.\\

\parbox{0.53\linewidth}{\texttt{\textbackslash boucle\{si 4 > 5 alors\}\{1\}\{2\}}
\par
\texttt{\textbackslash scbox\{rien ne va plus !\}\{app\}}
}
\parbox{0.12\linewidth}{produit}
\parbox{0.2\linewidth}{\raisebox{-3mm}{
\begin{Scratch}[0.9]
\boucle{si 4 > 5 alors}{1}{2}
\scbox{rien ne va plus !}{app}
\end{Scratch}}}

Remarque : pour connaître comment bien écrire le test du si, voir \emph{les petites boîtes} à la section 3.3.

\subsubsection{Si \dots\ Alors \dots\ Sinon}%%%%%%%%%%%%%%%%%%%%%%%%
On les obtient avec

\texttt{\textbackslash sailors\{<texte>\}\{<nombre de blocs à l'intérieur>\}}

et

\texttt{\textbackslash simenon\{<nombre de blocs à l'intérieur>\}}.\\

En tapant :
\begin{verbatim}
\begin{Scratch}
\sailors{si cet exemple est parlant alors}{1}
\scbox{tout va bien}{app}
\simenon{2}
\scbox{ne pas paniquer}{stylo}
\scbox{voir la section \emph{Exemples}}{capt}
\end{Scratch}
\end{verbatim}

on obtient :\\

\begin{Scratch}
\sailors{si cet exemple est parlant alors}{1}
\scbox{tout va bien}{app}
\simenon{2}
\scbox{ne pas paniquer}{stylo}
\scbox{voir la section \emph{Exemples}}{capt}
\end{Scratch}

\subsubsection{Ajouter blocs}%%%%%%%%%%%%%%%%%%%%%%%%

On les obtient avec \texttt{\textbackslash blocbox\{<texte>\}}.\\

\texttt{\textbackslash blocbox\{triangle\}} produit \raisebox{-3mm}{\begin{Scratch}\blocbox{triangle}\end{Scratch}}

\subsubsection{Contrôle spécial}%%%%%%%%%%%%%%%%%%%%%%%%
Cela concerne \raisebox{-3mm}{\begin{Scratch}\kbox{stop \rb{tout}}\end{Scratch}}\hspace{-1cm} et \raisebox{-2mm}{\begin{Scratch}\kbox{supprimer ce clone}\end{Scratch}}\hspace{-1cm}.

Ces commandes s'obtiennent avec \texttt{\textbackslash kbox\{<texte>\}}.

%----------------------------------------------------------------------------------------------------------------------------------%
\subsection{À l'intérieur des commandes Scratch : les petites boîtes}
Comment obtenir certaines commandes plus évoluées, comme par exemple : \raisebox{-3mm}{\begin{Scratch}\kbox{stop \rb{tout}}\end{Scratch}}\hspace{-1cm} ?

Comment écrire \raisebox{-3mm}{\begin{Scratch}\scbox{attendre jusqu'à \hb[capt]{couleur \sqb{orange} touche \sqb{green} ?}}{ctrl}\end{Scratch}}\hspace{-1cm} ?

ou \raisebox{-3mm}{\begin{Scratch}\scbox{aller à \rb{pointeur de souris}}{mvt}\end{Scratch}}\hspace{-1cm} ? ou encore

\raisebox{-3mm}{\begin{Scratch}
\scbox{ajouter \cb[ope]{nombre aléatoire entre \cb[w]{1} et \cb[w]{10}} au volume}{son}\end{Scratch}}\hspace{-1cm} ?

\subsubsection{Les petites boîtes rectangulaires}%%%%%%%%%%%%%%%%%%%%%%%%
\begin{itemize}
\item Dans les \texttt{\textbackslash scbox} :

on les obtient avec

\texttt{\textbackslash rb[<couleur>]\{<texte>\}}\\

\item dans les \texttt{\textbackslash beginbox} :

on les obtient avec

\texttt{\textbackslash rbb[<couleur>]\{<texte>\}}\\
\end{itemize}

Dans les deux cas, <couleur> a par défaut la couleur de la boîte dans laquelle il est inscrit. Pour obtenir une boîte rectangulaire blanche, il suffit de mettre <couleur> à white ou w.\\

En tapant :
\begin{verbatim}
\begin{Scratch}
\scbox{jouer le son \rb{miaou}}{son}
\scbox{penser à \rb[white]{Hmm\dots}}{app}
\scbox{demander \rb[w]{What's your name?} et attendre}{capt}
\end{Scratch}
\end{verbatim}

on obtient :\\

\begin{Scratch}
\scbox{jouer le son \rb{miaou}}{son}
\scbox{penser à \rb[white]{Hmm\dots}}{app}
\scbox{demander \rb[w]{What's your name?} et attendre}{capt}
\end{Scratch}

\subsubsection{Les petites boîtes circulaires}%%%%%%%%%%%%%%%%%%%%%%%%

Elles sont en creux ou en relief.

On les obtient avec

\texttt{\textbackslash cb[<couleur>]\{<texte>\}}\\

Par défaut, <couleur> est de la couleur de la boîte dans laquelle la boîte circulaire est insérée. Si <couleur> est white ou w, la boite circulaire est en creux.\\

En tapant :
\begin{verbatim}
\begin{Scratch}
\scbox{mettre la transparence vidéo à \cb{réponse} \%}{capt}
\scbox{aller à x:\cb[w]{x} y:\cb[white]{y}}{mvt}
\scbox{ajouter \cb[data]{variable} au tempo}{son}
\end{Scratch}
\end{verbatim}

on obtient :\\

\begin{Scratch}
\scbox{mettre la transparence vidéo à \cb{réponse} \%}{capt}
\scbox{aller à x:\cb[w]{x} y: \cb[white]{y}}{mvt}
\scbox{ajouter \cb[data]{variable} au tempo}{son}
\end{Scratch}


\subsubsection{Les petites boîtes hexagonales}%%%%%%%%%%%%%%%%%%%%%%%%
Elles ne concernent que les commandes \emph{Capteurs} et \emph{Opérateurs}.

On les obtient avec

\texttt{\textbackslash hb[<couleur>]\{<texte>\}}\\

Par défaut, <couleur> est ope.

En tapant :
\begin{verbatim}
\begin{Scratch}
\boucle{si \hb{\cb[data]{variable}=\rb[w]{10}} alors}{1}{1}
\scbox{attendre jusqu'à \hb[capt]{souris pressée?}}{ctrl}
\end{Scratch}
\end{verbatim}

on obtient :\\

\begin{Scratch}
\boucle{si \hb{\cb[data]{variable}=\rb[w]{10}} alors}{1}{1}
\scbox{attendre jusqu'à \hb[capt]{souris pressée?}}{ctrl}
\end{Scratch}


\subsubsection{Les petites boîtes carrées}%%%%%%%%%%%%%%%%%%%%%%%%
Elles ne concernent que les carrés de couleur.

On les obtient avec

\texttt{\textbackslash sqb\{<couleur>\}}\\

En tapant :
\begin{verbatim}
\begin{Scratch}
\scbox{mettre la couleur du stylo à \sqb{brown}}{stylo}
\end{Scratch}
\end{verbatim}

on obtient : \raisebox{-3mm}{\begin{Scratch}
\scbox{mettre la couleur du stylo à \sqb{brown}}{stylo}
\end{Scratch}}

%----------------------------------------------------------------------------------------------------------------------------------%
\subsection{Des commandes plus riches}

\begin{Scratch}%%%%%%%%%%%%%%%%%%%%%%%% 1
\beginbox{clone}
\boucle{répéter jusqu'à \hb[capt]{couleur \sqb{black}
 touche \sqb{yellow} ? }}{1}{1}
\scbox{aller à x: \cb[ope]{\cb[data]{x}+\cb[w]{10}} y: \cb[data]{y}}{mvt}
\boucle{si \hb{\cb[data]{y}<\cb[capt]{réponse}} alors}{3}{1}
\scbox{mettre \rb{y} à \cb[son]{volume}}{data}
\scbox{dire \rb[w]{Hello!} pendant \cb[capt]{distance de
\rb{pointeur de souris} } secondes}{app}
\kbox{stop \rb{tout}}
\turnbox{2}{-146}
\end{Scratch}

Obtenu avec :

\begin{verbatim}
\begin{Scratch}
\beginbox{clone}
\boucle{répéter jusqu'à \hb[capt]{couleur \sqb{black}
touche \sqb{yellow} ? }}{1}{1}
\scbox{aller à x: \cb[ope]{\cb[data]{x}+\cb[w]{10}} y: \cb[data]{y}}{mvt}
\boucle{si \hb{\cb[data]{y}<\cb[capt]{réponse}} alors}{3}{1}
\scbox{mettre \rb{y} à \cb[son]{volume}}{data}
\scbox{dire \rb[w]{Hello!} pendant \cb[capt]{distance de
\rb{pointeur de souris}} secondes}{app}
\kbox{stop \rb{tout}}
\turnbox{2}{-146}
\end{Scratch}
\end{verbatim}

%----------------------------------------------------------------------------------------------------------------------------------%
\subsection{Autre type de commandes}

\subsubsection{Dans les boucles}%%%%%%%%%%%%%%%%%%%%%%

La commande \texttt{\textbackslash blank} ne s'emploie (artificiellement) que lorsque dans le programme Scratch, deux boucles se terminent l'une après l'autre.\\

En tapant :
\begin{verbatim}
\begin{Scratch}
\boucle{répéter \cb[w]{3} fois}{4}{1}
\scbox{avancer de \cb[w]{10}}{mvt}
\boucle{répéter \cb[w]{5} fois}{1}{1}
\scbox{ajouter \cb[w]{10} à x}{mvt}
\scbox{ce bloc ne va pas}{data}
\end{Scratch}
\end{verbatim}

on obtient :\\

\begin{Scratch}
\boucle{répéter \cb[w]{3} fois}{4}{1}
\scbox{avancer de \cb[w]{10}}{mvt}
\boucle{répéter \cb[w]{5} fois}{1}{1}
\scbox{ajouter \cb[w]{10} à x}{mvt}
\scbox{ce bloc ne va pas}{data}
\end{Scratch}

\vspace{0.5cm}

Alors qu'en tapant :
\begin{verbatim}
\begin{Scratch}
\boucle{répéter \cb[w]{3} fois}{4}{1}
\scbox{avancer de \cb[w]{10}}{mvt}
\boucle{répéter \cb[w]{5} fois}{1}{1}
\scbox{ajouter \cb[w]{10} à x}{mvt}
\blank
\scbox{ce bloc est bien placé}{data}
\end{Scratch}
\end{verbatim}

on obtient :\\

\begin{Scratch}
\boucle{répéter \cb[w]{3} fois}{4}{1}
\scbox{avancer de \cb[w]{10}}{mvt}
\boucle{répéter \cb[w]{5} fois}{1}{1}
\scbox{ajouter \cb[w]{10} à x}{mvt}
\blank
\scbox{ce bloc est bien placé}{data}
\end{Scratch}

\vspace{0.5cm}

Noter que si l'on tape :
\begin{verbatim}
\begin{Scratch}
\boucle{répéter \cb[w]{3} fois}{5}{1}
\scbox{avancer de \cb[w]{10}}{mvt}
\boucle{répéter \cb[w]{5} fois}{1}{1}
\scbox{ajouter \cb[w]{10} à x}{mvt}
\scbox{ce bloc est placé autrement}{data}
\end{Scratch}
\end{verbatim}

on obtient :\\

\begin{Scratch}
\boucle{répéter \cb[w]{3} fois}{5}{1}
\scbox{avancer de \cb[w]{10}}{mvt}
\boucle{répéter \cb[w]{5} fois}{1}{1}
\scbox{ajouter \cb[w]{10} à x}{mvt}
\scbox{ce bloc est placé autrement}{data}
\end{Scratch}


\subsubsection{Dessiner le chat}

Le chat de la couverture est obtenu en appelant la commande :

\texttt{\small\textbackslash Scratchy[<échelle>][<largeur des lignes>]}

Par défaut, l'échelle est 0.25 et la largeur des lignes est fixée à 0.25 pt.\\

Voici le code écrit pour la couverture :
\begin{verbatim}
\parbox{1ex}{\Scratchy[0.1][0.1]}\\

\hspace{1cm}\parbox{1ex}{\Scratchy[0.2][0.2]}\\

\hspace{2cm}\parbox{1ex}{\Scratchy[0.5][1]}\\

\hspace{5cm}\parbox{1ex}{\Scratchy[0.75][1.5]}\\
\end{verbatim}

\newpage
%----------------------------------------------------------------------------------------------------------------------------------%
%----------------------------------------------------------------------------------------------------------------------------------%
\section{Problèmes connus et solutions}
\begin{enumerate}
\item
On n'a pas le petit triangle dans la commande \emph{s'orienter à} (mouvement). Il faut le placer à la main.
\begin{verbatim}
\scbox{s'orienter à \cb[w]{90 \scriptsize$\blacktriangledown$}}{mvt}
\end{verbatim}
\raisebox{-3mm}{\begin{Scratch}\scbox{s'orienter à \cb[w]{90 \scriptsize$\blacktriangledown$}}{mvt}\end{Scratch}}\\

\item La hauteur des boîtes est fixée. Ainsi, on ne peut pas imbriquer beaucoup de sous-commandes dans des commandes Scratch.\\

\item Lorsque l'on insère une seule commande Scratch dans du texte, elle n'est pas centrée verticalement. On peut la réajuster avec un \texttt{\textbackslash raisebox\{-3mm\}}.\\

\item Il y a un également un décalage horizontal. À la fin d'un environnement Scratch, il faut souvent ajouter un  \texttt{\textbackslash hspace\{-1cm\}}.\\

\item Le temps de compilation est parfois assez long.
\end{enumerate}

%----------------------------------------------------------------------------------------------------------------------------------%
%----------------------------------------------------------------------------------------------------------------------------------%
\section{Résumé des commandes}

\begin{tabular}{m{5cm}l}%%%%%%%%%%
\texttt{\small\textbackslash beginbox\{\}}

&\begin{Scratch}[0.75]
\beginbox{}
\end{Scratch}
\\%%%%%%%%%%
\texttt{\small\textbackslash beginbox\{<texte>\}}

\tiny(quand ce lutin est cliqué)
&\begin{Scratch}[0.75]
\beginbox{quand ce lutin est cliqué}
\end{Scratch}\\%%%%%%%%%%
\texttt{\small\textbackslash beginbox\{clone\}}

&\begin{Scratch}[0.75]
\beginbox{clone}
\end{Scratch}
\\%%%%%%%%%%
\texttt{\small\textbackslash blocbox\{<texte>\}}

&\begin{Scratch}[0.75]
\blocbox{fonction}
\end{Scratch}
\\%%%%%%%%%%
\texttt{\small\textbackslash turnbox\{\}\{90\}}

&\begin{Scratch}[0.75]
\turnbox{}{90}
\end{Scratch}\\%%%%%%%%%%
\texttt{\small\textbackslash turnbox\{g\}\{-270\}}

\tiny(ou <gauche> ou <G> ou <g>)
&\begin{Scratch}[0.75]
\turnbox{g}{-270}
\end{Scratch}
\\%%%%%%%%%%
\texttt{\small\textbackslash scbox\{<texte>\}\{<couleur>\}}

&\begin{Scratch}[0.75]
\scbox{texte et couleur que l'on veut}{purple}
\end{Scratch}\\%%%%%%%%%%
\texttt{\small\textbackslash boucle\{répéter\}\{2\}\{1\}}
\tiny(\{<texte>\}\{<nbr blocs>\}\{<type>\})
\vspace{3cm}
&\begin{Scratch}[0.75]
\boucle{répéter}{2}{1}
\end{Scratch}\vspace{-1.5cm}
\\%%%%%%%%%%
\texttt{\small\textbackslash boucle\{répéter indéfiniment\}\{1\}\{-1\}}

\tiny(\{<texte>\}\{<nbr blocs>\}\{<type>\})
\vspace{2cm}
&\begin{Scratch}[0.75]
\boucle{répéter indéfiniment}{1}{-1}
\end{Scratch}\vspace{-1.2cm}
\\%%%%%%%%%%
\texttt{\small\textbackslash boucle\{si \dots alors\}\{1\}\{2\}}

\tiny(\{<texte>\}\{<nbr blocs>\}\{<type>\})
\vspace{2cm}
&\begin{Scratch}[0.75]
\boucle{si \dots alors}{1}{2}
\end{Scratch}\vspace{-1.2cm}
\\%%%%%%%%%%

\texttt{\small\textbackslash sailors\{si\dots alors\dots\}\{2\}}

\tiny(\{<texte>\}\{<nbr blocs>\})
\vspace{2cm}
&\begin{Scratch}[0.75]
\sailors{si\dots alors\dots}{2}
\end{Scratch}\vspace{-1cm}
\\%%%%%%%%%%
\texttt{\small\textbackslash simenon\{<nbre blocs>\}}

\tiny(ici, \textbackslash simenon\{1\})
\vspace{2.2cm}
&\begin{Scratch}[0.75]
\whitesailors{il faut que ce }{1}
\simenon{1}
\end{Scratch}\vspace{-1.2cm}
\\%%%%%%%%%%
\texttt{\small\textbackslash kbox\{<texte>\}}

&\begin{Scratch}[0.75]
\kbox{supprimer ce clone}
\end{Scratch}
\\%%%%%%%%%%
\end{tabular}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{tabular}{m{5cm}l}
\texttt{\small\textbackslash rb\{<texte>\}}

\tiny (\texttt{\textbackslash rb\{variable\}})
&\begin{Scratch}[0.75]
\scbox{\phantom{tex} \rb{variable} \phantom{tex}}{data}
\end{Scratch}
\\
\texttt{\small\textbackslash rb[w]\{<texte>\}}

\tiny(ou \texttt{\textbackslash rb[white]\{<texte>\}})
&\begin{Scratch}[0.75]
\scbox{\phantom{tex} \rb[w]{texte} }{data}
\end{Scratch}
\\
\texttt{\small\textbackslash rbb\{<texte>\}}

\tiny(uniquement pour \texttt{\textbackslash beginbox})

\texttt{\textbackslash beginbox\{quand je reçois \textbackslash rbb\{message1\}\}}
&\begin{Scratch}[0.75]
\beginbox{quand je reçois \rbb{message1}}
\end{Scratch}
\\

\texttt{\small\textbackslash cb\{<texte>\}}

\tiny(transparent)
&\begin{Scratch}[0.75]
\scbox{\phantom{rex} \cb{réponse}}{ctrl}
\end{Scratch}
\\
\texttt{\small\textbackslash cb[w]\{<texte>\}}

\tiny(ou \textbackslash cb[white]\{<texte>\})
&\begin{Scratch}[0.75]
\scbox{\phantom{rex} \cb[w]{réponse}}{ctrl}
\end{Scratch}
\\
\texttt{\small\textbackslash cb[<couleur>]\{<texte>\}}

\texttt{\tiny\textbackslash cb[ope]\{réponse\}}
&\begin{Scratch}[0.75]
\scbox{\phantom{rex} \cb[ope]{réponse}}{ctrl}
\end{Scratch}
\\
\texttt{\small\textbackslash hb\{<texte>\}}

&\begin{Scratch}[0.75]
\scbox{\phantom{rex} \hb{réponse}}{ctrl}
\end{Scratch}
\\

\texttt{\small\textbackslash hb[capt]\{<texte>\}}

&\begin{Scratch}[0.75]
\scbox{\phantom{rex} \hb[capt]{réponse}}{ctrl}
\end{Scratch}
\\
\texttt{\small\textbackslash sqb\{<couleur>\}}

&\begin{Scratch}[0.75]
\scbox{mettre la couleur du stylo à \sqb{red}}{stylo}
\end{Scratch}
\\

\end{tabular}

%----------------------------------------------------------------------------------------------------------------------------------%
%----------------------------------------------------------------------------------------------------------------------------------%
\newpage
\section{Exemples de programme}

\begin{verbatim}
\begin{Scratch}
\boucle{répéter \cb[w]{3} fois}{5}{1}
\scbox{avancer de \cb[w]{10}}{mvt}
\boucle{répéter \cb[w]{5} fois}{1}{1}
\scbox{ajouter \cb[w]{10} à x}{mvt}
\scbox{ce bloc est placé autrement}{data}
\scbox{un nouveau bloc}{son}
\end{Scratch}
\end{verbatim}

\begin{verbatim}
\begin{Scratch}
\beginbox{quand \rbb{espace} est pressé}
\boucle{répéter \cb[w]{3} fois}{8}{1}
	\scbox{aller à x: \cb[w]{0} y: \cb[data]{y}}{mvt}
	\boucle{répéter \cb[w]{2} fois}{3}{1}
		\scbox{mettre \rb{x} à \rb[w]{0}}{data}
		\scbox{ajouter à \rb{y} \cb[w]{10}}{data}
		\scbox{mettre la couleur du stylo à \sqb{red}}{stylo}
	\scbox{mon bloc}{bloc}
	\scbox{montrer}{app}
\scbox{effacer tout}{stylo}
\end{Scratch}
\end{verbatim}
\begin{center}
\begin{tabular}{cc}%\hline
\parbox[b]{5.5cm}{
\hspace{1cm}deuxième programme $\rightarrow$
\vspace{2em}
\par
premier programme
\par
\hspace{1.25em}$\downarrow$
\par
\begin{Scratch}
\boucle{répéter \cb[w]{3} fois}{5}{1}
\scbox{avancer de \cb[w]{10}}{mvt}
\boucle{répéter \cb[w]{5} fois}{1}{1}
\scbox{ajouter \cb[w]{10} à x}{mvt}
\scbox{ce bloc est placé \dots}{data}
\scbox{un nouveau bloc}{son}
\end{Scratch}
}
&
\begin{Scratch}
\beginbox{quand \rbb{espace} est pressé}
\boucle{répéter \cb[w]{3} fois}{8}{1}
	\scbox{aller à x: \cb[w]{0} y: \cb[data]{y}}{mvt}
	\boucle{répéter \cb[w]{2} fois}{3}{1}
		\scbox{mettre \rb{x} à \rb[w]{0}}{data}
		\scbox{ajouter à \rb{y} \cb[w]{10}}{data}
		\scbox{mettre la couleur du stylo à \sqb{red}}{stylo}
	\scbox{mon bloc}{bloc}
	\scbox{montrer}{app}
\scbox{effacer tout}{stylo}
\end{Scratch}
\end{tabular}
\end{center}
\newpage
%----------------------------------------------------------------------------------------------------------------------------------%
\subsection{Des boucles imbriquées}

%%%%%%%%%%%%%%%%%%%%%%%% 1
\begin{verbatim}
\begin{Scratch}
\beginbox{quand \rb{chronomètre} > \cb[w]{10}}

\sailors{si \hb[capt]{touche \rb{espace} pressée?} alors}{12}

	\sailors{si \hb[capt]{souris pressée?} alors}{1}
		\scbox{aller à x: \cb[w]{0} y: \cb[w]{0}}{mvt}

	\simenon{2}
		\scbox{donner la valeur \cb[w]{0} à x}{mvt}
		\scbox{ajouter \cb[w]{10} à y}{mvt}

	\sailors{si couleur \sqb{son} touchée?}{1}
		\scbox{aller à x: \cb[w]{0} y: \cb[w]{0}}{mvt}

	\simenon{1}
		\scbox{donner la valeur \cb[w]{0} à x}{mvt}
		
	\simenon{1}
		\scbox{donner la valeur \cb[w]{0} à y}{mvt}

\sailors{si \hb[capt]{souris pressée?} alors}{1}
	\scbox{ajouter \cb[w]{10} à y}{mvt}

\simenon{2}
	\scbox{donner la valeur \cb[w]{0} à x}{mvt}
	\scbox{cacher la variable \rb{variable}}{data}

\end{Scratch}
\end{verbatim}

\begin{center}
\begin{Scratch}[1]%%%%%%%%%%%%%%%%%%%%%%%% 1
\beginbox{quand \rb{chronomètre} > \cb[w]{10}}

\sailors{si \hb[capt]{touche \rb{espace} pressée?} alors}{12}

	\sailors{si \hb[capt]{souris pressée?} alors}{1}
		\scbox{aller à x: \cb[w]{0} y: \cb[w]{0}}{mvt}

	\simenon{2}
		\scbox{donner la valeur \cb[w]{0} à x}{mvt}
		\scbox{ajouter \cb[w]{10} à y}{mvt}

	\sailors{si couleur \sqb{son} touchée?}{1}
		\scbox{aller à x: \cb[w]{0} y: \cb[w]{0}}{mvt}

	\simenon{1}
		\scbox{donner la valeur \cb[w]{0} à x}{mvt}
		
	\simenon{1}
		\scbox{donner la valeur \cb[w]{0} à y}{mvt}

\sailors{si \hb[capt]{souris pressée?} alors}{1}
	\scbox{ajouter \cb[w]{10} à y}{mvt}

\simenon{2}
	\scbox{donner la valeur \cb[w]{0} à x}{mvt}
	\scbox{cacher la variable \rb{variable}}{data}

\end{Scratch}\end{center}
\newpage
%%%%%%%%%%%%%%%%%%%%%%%% 2
\begin{verbatim}
\begin{Scratch}
\beginbox{}

\sailors{si couleur \sqb{stylo} touchée?}{12}

	\sailors{si \hb[capt]{souris pressée?} alors}{6}
		\scbox{aller à x: \cb[w]{0} y: \cb[w]{0}}{mvt}
		
 		\sailors{si \hb[capt]{touche \rb{espace} pressée?} alors}{1}
			\scbox{aller à x: \cb[w]{0} y: \cb[w]{0}}{mvt}

		\simenon{1}
			\scbox{donner la valeur \cb[w]{0} à x}{mvt}
			
	\simenon{2}
		\scbox{donner la valeur \cb[w]{0} à x}{mvt}
		\scbox{ajouter \cb[w]{10} à y}{mvt}
		
	\simenon{1}
		\scbox{donner la valeur \cb[w]{0} à x}{mvt}

\end{Scratch}
\end{verbatim}
\begin{center}
\begin{Scratch}[1]%%%%%%%%%%%%%%%%%%%%%%%% 2
\beginbox{}

\sailors{si couleur \sqb{stylo} touchée?}{12}

	\sailors{si \hb[capt]{souris pressée?} alors}{6}
		\scbox{aller à x: \cb[w]{0} y: \cb[w]{0}}{mvt}
		
 		\sailors{si \hb[capt]{touche \rb{espace} pressée?} alors}{1}
			\scbox{aller à x: \cb[w]{0} y: \cb[w]{0}}{mvt}

		\simenon{1}
			\scbox{donner la valeur \cb[w]{0} à x}{mvt}
			
	\simenon{2}
		\scbox{donner la valeur \cb[w]{0} à x}{mvt}
		\scbox{ajouter \cb[w]{10} à y}{mvt}
		
	\simenon{1}
		\scbox{donner la valeur \cb[w]{0} à x}{mvt}

\end{Scratch}\end{center}

\newpage
%%%%%%%%%%%%%%%%%%%%%%%% 3
\begin{verbatim}
\begin{Scratch}
\beginbox{}
\boucle{répéter indéfiniment}{13}{-1}
	\turnbox{}{24}
	\boucle{répéter \cb[w]{4} fois}{2}{1}
		\scbox{stylo en position d'écriture}{stylo}
		\scbox{ajouter \cb[w]{20} au tempo}{son}
	\boucle{quand le lutin s'en va}{6}{1}
		\scbox{cacher la variable \rb{A}}{data}
		\scbox{costume suivant}{app}
		\scbox{arrêter tous les sons}{son}
		\turnbox{g}{24}
		\scbox{stylo en position d'écriture}{stylo}
		\scbox{ajouter \cb[w]{20} au tempo}{son}
	\blank
\end{Scratch}
\end{verbatim}
\begin{center}
\begin{Scratch}[1]%%%%%%%%%%%%%%%%%%%%%%%% 3
\beginbox{}
\boucle{répéter indéfiniment}{13}{-1}
	\turnbox{}{24}
	\boucle{répéter \cb[w]{4} fois}{2}{1}
		\scbox{stylo en position d'écriture}{stylo}
		\scbox{ajouter \cb[w]{20} au tempo}{son}
	\boucle{répéter \cb[w]{4} fois}{6}{1}
		\scbox{cacher la variable \rb{A}}{data}
		\scbox{costume suivant}{app}
		\scbox{arrêter tous les sons}{son}
		\turnbox{g}{24}
		\scbox{stylo en position d'écriture}{stylo}
		\scbox{ajouter \cb[w]{20} au tempo}{son}
	\blank
\end{Scratch}
\end{center}
\newpage
%%%%%%%%%%%%%%%%%%%%%%%% 4
\begin{verbatim}
\begin{Scratch}
\beginbox{quand on le veut}
\boucle{répéter un certain nombre de fois}{8}{1}
	\scbox{aller à x: \cb[w]{0} y: \cb[w]{0}}{mvt}
	\boucle{le dernier ??}{2}{1}
		\scbox{on peut faire}{gray}
		\scbox{ce que l'on veut}{black}
	\boucle{ne pas répéter}{1}{1}
	\scbox{faux bloc}{brown}
	\blank
\scbox{dernier bloc}{pink}
\end{Scratch}
\end{verbatim}

\begin{center}
\begin{Scratch}[1]%%%%%%%%%%%%%%%%%%%%%%%% 4
\beginbox{quand on le veut}
\boucle{répéter un certain nombre de fois}{8}{1}
	\scbox{aller à x: \cb[w]{0} y: \cb[w]{0}}{mvt}
	\boucle{se répéter que}{2}{1}
		\scbox{l'on peut faire}{gray}
		\scbox{ce que l'on veut}{black}
	\boucle{ne pas répéter}{1}{1}
	\scbox{faux bloc}{brown}
	\blank
\scbox{dernier bloc}{pink}
\end{Scratch}
\end{center}
\newpage
%%%%%%%%%%%%%%%%%%%%%%%% 5
\begin{verbatim}
\begin{Scratch}
\beginbox{}
\boucle{répéter \cb[w]{3} fois}{19}{1}
	\scbox{costume suivant}{app}
	\scbox{arrêter tous les sons}{son}
	\turnbox{1}{24}
	\scbox{stylo en position d'écriture}{stylo}
	\boucle{répéter \cb[data]{compteur} fois}{10}{1}
		\scbox{ajouter \cb[w]{20} au tempo}{son}
		\boucle{répéter \cb[ope]{\cb[data]{A}+1} fois}{6}{1}
			\scbox{réinitialiser le chronomètre}{capt}
			\boucle{répéter jusqu'à \hb[capt]{\rb{pointeur de souris} touché?}}{2}{1}
				\scbox{cacher la variable \rb{A}}{data}
				\scbox{avancer de 35}{mvt}
			\scbox{regroupe \rb[w]{hello}\rb[w]{world}}{ope}
		\scbox{nouveau bloc}{bloc}
	\turnbox{2}{-146}
	\scbox{estampiller}{stylo}
	\scbox{annuler les effets graphiques}{app}
\sailors{si ça marche}{1}
	\scbox{je suis content}{stylo}
\simenon{1}
	\scbox{je suis déçu}{app}
\end{Scratch}
\end{verbatim}

\begin{center}
\begin{Scratch}[1]%%%%%%%%%%%%%%%%%%%%%%%% 5
\beginbox{}
\boucle{répéter \cb[w]{3} fois}{19}{1}
	\scbox{costume suivant}{app}
	\scbox{arrêter tous les sons}{son}
	\turnbox{1}{24}
	\scbox{stylo en position d'écriture}{stylo}
	\boucle{répéter \cb[data]{compteur} fois}{10}{1}
		\scbox{ajouter \cb[w]{20} au tempo}{son}
		\boucle{répéter \cb[ope]{\cb[data]{A}+1} fois}{6}{1}
			\scbox{réinitialiser le chronomètre}{capt}
			\boucle{répéter jusqu'à \hb[capt]{\rb{pointeur de souris} touché?}}{2}{1}
				\scbox{cacher la variable \rb{A}}{data}
				\scbox{avancer de 35}{mvt}
			\scbox{regroupe \rb[w]{hello}\rb[w]{world}}{ope}
		\scbox{nouveau bloc}{bloc}
	\turnbox{2}{-146}
	\scbox{estampiller}{stylo}
	\scbox{annuler les effets gRaphiques}{app}
\sailors{si ça marche}{1}
	\scbox{je suis content}{stylo}
\simenon{1}
	\scbox{je suis déçu}{app}
\end{Scratch}
\end{center}

\newpage
%----------------------------------------------------------------------------------------------------------------------------------%
%----------------------------------------------------------------------------------------------------------------------------------%
\section{Conclusion}

%Voilà une toute première version qui attend des améliorations.

%La finalité étant d'en faire un package.\\

%C'est l'utilisation dans la durée de ce programme qui permettra de connaître ses faiblesses et surtout les points à améliorer.\\

Pour tout suggestion, remarque ou commentaire :

Thibault.Ralet\at ac-clermont.fr.

\end{document}
%%
%% This is file `ScratchX.sty',
%%
%% Copyright (C) Thibault Ralet - Thibault.Ralet@ac-clermont.fr
%%
%% 16 mars 2017 (version 0.1) - 27 juillet 2017 (version 1.1)
%% 
%% the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
%%
%% Unlimited copying and redistribution of this file are permitted as
%% long as this file is not modified.  Modifications, and distribution
%% of modified versions, are permitted, but only if the resulting file
%% is renamed.