% !TeX encoding = ISO-8859-1
% Ceci est la documentation du package "scratch"
%
% Fichier compil� avec pdflatex
\documentclass[french,a4paper,10pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[margin=2cm]{geometry}
\usepackage[bottom]{footmisc}
\usepackage{libertine,boites,tikz,enumitem,MnSymbol,babel,xspace,listings,scratch}
\usepackage[scaled=0.8]{luximono}
\frenchbsetup{og=�,fg=�}
\def\SCRATCH{\texttt{scratch}\xspace}
\makeatletter
\def\code{\expandafter\code@i\string}
\def\code@i#1{%
       \begingroup
               \par\nobreak\medskip\parindent0pt
               \leftskip.1\linewidth
               \catcode`\^^I 13 \begingroup\lccode`\~`\^^I \lowercase{\endgroup\def~{\leavevmode\space\space\space\space}}%
               \let\do\@makeother \dospecials
               \ttfamily\small\@noligs
               \make@car@active\<{$\langle$\begingroup\itshape}%
               \make@car@active\>{\endgroup$\rangle$}%
               \obeylines\obeyspaces
               \def\code@ii##1#1{##1\par\medbreak\endgroup}%
               \code@ii
}
\long\def\grab@toks#1\relax{\gdef\right@content{#1}}

\newcommand\disable@lig[1]{%
       \catcode`#1\active
       \begingroup
               \lccode`\~`#1\relax
               \lowercase{\endgroup\def~{\leavevmode\kern\z@\string#1}}%
}

\newcommand\make@car@active[1]{%
       \catcode`#1\active
       \begingroup
               \lccode`\~`#1\relax
               \lowercase{\endgroup\def~}%
}

\newcommand\exemple{%
       \begingroup
       \parskip\z@
       \exemple@}

\newcommand\exemple@{%
       \medbreak\noindent
       \begingroup
               \let\do\@makeother\dospecials
               \make@car@active\ { {}}%
               \make@car@active\^^M{\par\leavevmode}%
               \make@car@active\^^I{\space\space}%
               \make@car@active\,{\leavevmode\kern\z@\string,}%
               \make@car@active\-{\leavevmode\kern\z@\string-}%
               \make@car@active\>{\leavevmode\kern\z@\string>}%
               \make@car@active\<{\leavevmode\kern\z@\string<}%
               \@makeother\;\@makeother\!\@makeother\?\@makeother\:% neutralise frenchb
               \exemple@@
}

\newcommand\exemple@@[1]{%
       \def\@tempa##1#1{\exemple@@@{##1}}%
       \@tempa
}

\newcommand\exemple@@@[1]{%
       \xdef\the@code{#1}%
       \endgroup
               \begingroup
                       \fboxrule0.4pt \fboxsep=5pt
                       \let\breakboxparindent\z@
                       \def\bkvz@top{\hrule\@height\fboxrule}%
                       \def\bkvz@bottom{\hrule\@height\fboxrule}%
                       \let\bkvz@before@breakbox\relax
                       \def\bkvz@set@linewidth{\advance\linewidth\dimexpr-2\fboxrule-2\fboxsep\relax}%
                       \def\bkvz@left{\vrule\@width\fboxrule\kern\fboxsep}%
                       \def\bkvz@right{\kern\fboxsep\vrule\@width\fboxrule}%
                       \breakbox
                               \kern.5ex\relax
                               \begingroup
                                       \ttfamily\small\the@code\par
                               \endgroup
                               \kern3pt
                               \hrule height0.1pt width\linewidth depth0.1pt
                               \vskip5pt
                               \newlinechar`\^^M\everyeof{\noexpand}\scantokens{#1}\par
                       \endbreakbox
               \endgroup
       \medbreak
       \endgroup
}
\begingroup
       \catcode`\<13 \catcode`\>13
       \gdef\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
               \bgroup
                       \verb@eol@error \let\do\@makeother \dospecials
                       \verbatim@font\@noligs
                       \catcode`\<13 \catcode`\>13 \def<{\begingroup$\langle$\itshape}\def>{\/$\rangle$\endgroup}%
                       \@ifstar\@sverb\@verb}
\endgroup
\def\longfrscrdate@i#1/#2/#3\@nil{\number#3\relax\space \ifcase#2 \or janvier\or f�vrier\or mars\or avril\or mai\or juin\or juillet\or aout\or septembre\or octobre\or novembre\or d�cembre\fi\space#1}
\edef\longfrscrdate{\expandafter\longfrscrdate@i\SCRdate\@nil}
\makeatother
\begingroup
       \catcode`\_11
       \gdef\cleval#1#2{%
               \bigbreak\noindent
               \hbox to .25\linewidth{%
                       \color{teal}\bfseries\ttfamily
                       \detokenize{#1}=$\langle$\detokenize{#2}$\rangle$\hss}\kern2.5em
               (\textit{D�faut} : {\color{teal}\ttfamily
               \skv_eearg\skv_ifempty{\useKV[scratch]{#1}}
                       {\detokenize{{}}}
                       {\detokenize\expandafter\expandafter\expandafter{\useKV[scratch]{#1}}}})%
               \par\nobreak
       }
\endgroup
\def\suffixe#1{\begingroup\sffamily\bfseries\color{SCR#1}#1\endgroup}
\newenvironment{version}[2]
       {\paragraph{\hbox to 4em {v\hskip1pt #1\hfill}#2}\hskip0pt \par
       \catcode`\>13 \begingroup\lccode`\~`\> \lowercase{\endgroup\let~}\item
       \begin{itemize}}{\end{itemize}}
\begin{document}
\parindent=0pt
\thispagestyle{empty}
\begin{titlepage}
       \begingroup
               \centering
               \null\vskip.25\vsize
               {\large\bfseries L'extension pour \LaTeX\medbreak
               \Huge \begin{scratch}[line width=1.5pt]\blockmove\SCRname\end{scratch}\par}
               \bigbreak
               v \SCRver
               \smallbreak
               \longfrscrdate
               \vskip1.5cm
               Christian \bsc{Tellechea}\par
               \texttt{[email protected]}\par
       \endgroup
       \vskip2cm
       \leftskip=.2\linewidth \rightskip=.2\linewidth \small
       Cette extension permet de dessiner des empilements de blocs similaires � ceux que l'on trouve dans le logiciel de programmation \emph{visuelle} � \SCRATCH\footnote{Le logiciel que l'on peut utiliser en ligne � \texttt{https://scratch.mit.edu/}} �.
\end{titlepage}
\parindent0pt
\section{Avant propos}
La pr�sente extension \SCRATCH requiert les extensions \texttt{simplekv} et \texttt{ti\textit kz}. Celles-ci sont automatiquement charg�es par \SCRATCH.

Fid�le � mes convictions, la documentation de cette extension n'est disponible qu'en fran�ais.
\medbreak
{\color{red}\large\textbf{Attention} : cette extension est obsol�te, est d�sormais gel�e et \emph{n'est plus maintenue}. Par cons�quent, cette version \SCRver{} sera la derni�re. En effet, \SCRATCH v2 n'est plus utilis� au profit de \SCRATCH v3. La nouvelle extension �\texttt{scratch3}� rend possible le trac� de blocs similaires � ceux de \SCRATCH v3.}

\section{L'environnement \SCRATCH}
Pour dessiner un programme comme le fait \SCRATCH, il faut ouvrir un environnement �\SCRATCH� et �crire dans cet environnement les macros correspondant aux \emph{blocs} que l'on veut y mettre :

\code|\begin{scratch}
       macros pour dessiner des blocs
\end{scratch}|

Comme le savent ceux qui enseignent l'algorithmique et la programmation avec le tr�s-�-la-mode\footnote{Je ne d�teste rien de plus comme langage de programmation que ce \emph{truc} vaguement graphique, ultra limit� et contre-productif dans l'apprentissage du codage qu'est \SCRATCH et que l'�ducation nationale veut � tout prix imposer. Je ne compte bien �videmment pas me plier � ce nouveau dogme ridicule et ne l'utiliserai ni ne l'enseignerai; je consid�re que les �l�ves m�ritent mieux que \SCRATCH --~ADA par exemple~-- comme entr�e dans le monde de la programmation. Ceci dit, coder cette extension a �t� un petit amusement.} logiciel � \SCRATCH �, les programmes sont construits avec des briques, appel�s �blocs�, qui peuvent s'emboiter les uns sur les autres. Ces blocs sont de plusieurs couleurs, chacune correspondant � un type d'instruction que l'on retrouve dans les menus de \SCRATCH.

J'ai pris le parti d'�crire des macros ayant comme argument le texte qui figure dans le bloc. Ce faisant, on a plus de libert� que dans \SCRATCH o� les blocs ont des textes pr�d�finis, mais cette libert� permet d'utiliser cette extension quelle que soit la langue dans laquelle on �crit.

Enfin, j'ai cherch� le bon compromis entre complexit� du code et qualit� des dessins obtenus avec cette extension: ils \emph{ressemblent} � ceux du logiciel \SCRATCH, mais le but de cette extension n'est \emph{pas} la ressemblance absolue au pixel pr�s!

\section{Les blocs normaux}
Ces blocs sont les plus courants et poss�dent une encoche d'emboitement, femelle en haut et m�le en bas. Les macros permettant de dessiner ces blocs ont des noms de la forme \verb|\block<suffixe>| et ont un seul argument obligatoire qui est le texte que l'on souhaite mettre dans le bloc. Par exemple, un bloc bleu (correspondant au menu �mouvement�) a un suffixe \suffixe{move}, et est dessin� gr�ce � la macro \verb|\blockmove{<texte>}|. Ainsi, dans l'environnement \SCRATCH, �crire \verb|\blockmove{Bonjour le monde}| donne
\begin{center}\begin{scratch}\blockmove{Bonjour le monde}\end{scratch}\end{center}

La police d'�criture dans chaque bloc est la police � \textsf{sans serif} � en gras qui est d�finie dans le document au moment o� l'environnement est appel� : pratiquement, cela signifie que les macros \verb|\sffamily| et \verb|\bfseries| sont ex�cut�es avant que le texte des blocs ne soit compos�. Dans cette documentation, la police sans serif est �\textsf{biolinum}�.

La plupart des dimensions des blocs sont proportionnelles � la taille de la police en cours. On peut donc jouer sur la taille de la police (via les classiques macros \verb|\small|, \verb|\large|, \verb|\footnotesize|, etc) pour modifier la taille des blocs\footnote{Il y a aussi la cl� �\texttt{scale}� pour mettre le dessin � l'�chelle que l'on souhaite, voir page~\pageref{cle-scale}} .

Voici un inventaire des tous les blocs disponibles, empil�s les uns sous les autres :

\exemple/Voici un algorithme bizarre : \begin{scratch}
       \blockmove{bloc de mouvement}
       \blocklook{bloc d'apparence}
       \blocksound{bloc de son}
       \blockpen{bloc de stylo}
       \blockvariable{bloc de variable}
       \blocklist{bloc de liste}
       \blockevent{bloc d'�v�nement}
       \blockcontrol{bloc de contr�le}
       \blocksensing{bloc de capteur}
\end{scratch}/

Il faut donc retenir cette logique : les suffixes \suffixe{move}, \suffixe{look}, \suffixe{sound}, \suffixe{pen}, \suffixe{variable}, \suffixe{list}, \suffixe{event}, \suffixe{control} et \suffixe{sensing} correspondent aux couleurs des blocs. Il existe aussi le suffixe \suffixe{operator} qui n'a pas �t� montr� pr�c�demment puisqu'aucun bloc n'existe pour la fonction �op�rateurs�.

\section{Les ovales}
Les � ovales � sont, selon le code graphique de \SCRATCH, cens�s contenir des nombres. Lorsque ces nombres sont explicitement �crits en chiffres, ces ovales ont un fond blanc : \begin{center}\begin{scratch}\blockmove{ajouter \ovalnum{10} � x}\end{scratch}\end{center}
Les valeurs num�riques sont parfois issues de valeurs pr�d�finies auquel cas, une fl�che de s�lection doit apparaitre apr�s le nombre pr�d�fini choisi : \begin{center}\begin{scratch}\blockmove{s'orienter � \ovalnum{180\selectarrownum}}\end{scratch}\end{center}

Au niveau des macros utilis�es dans l'exemple plus bas :
\begin{itemize}
       \item la macro \verb|\ovalnum{<nombre>}| dessine un nombre dans un ovale � fond blanc;
       \item la macro \verb|\selectarrownum| trace la fl�che de s�lection;
       \item les macros \verb|\turnleft| et \verb|\turnright| dessinent des fl�ches de rotation dans les blocs \verb|\blockmove|.
\end{itemize}

\exemple/Ovales sur fond blanc : \begin{scratch}
       \blockmove{ajouter \ovalnum{10} � x}
       \blockmove{s'orienter � \ovalnum{180\selectarrownum}}
       \blockmove{tourner de \turnleft{} de \ovalnum{45} degr�s}
       \blockcontrol{attendre \ovalnum{1} seconde}
       \blockpen{mettre l'intensit� du stylo � \ovalnum{50}}
\end{scratch}/

Lorsque les \verb|<nombres>| sont contenus dans des variables, les ovales prennent alors la couleur de la fonction correspondant � ces variables. Les macros ont des noms de la forme \verb|\oval<suffixe>| et ont pour suffixe \suffixe{move}, \suffixe{look}, \suffixe{sound}, \suffixe{variable}, \suffixe{list}, \suffixe{sensing} et \suffixe{operator}.

Voici quelques exemples :
\exemple/Ovales divers : \begin{scratch}
       \blockmove{s'orienter � \ovalmove{direction}}
       \blocksound{ajouter \ovaloperator{\ovalnum{-0.5} * \ovalsound{volume}} au volume}
       \blockmove{glisser en \ovalsound{tempo} secondes � x: \ovalsensing{souris x}
                  y: \ovaloperator{\ovalnum{4} * \ovalsensing{souris y}}}
\end{scratch}

Toutes les macros ayant pour pr�fixe \verb|\oval| sont utilisables \emph{en dehors} de l'environnement
scratch, la preuve : voici \ovalvariable{une variable} et \ovaloperator{un op�rateur}./

\section{Les blocs de d�but}
Ces blocs sont de la couleur \suffixe{event} pour la plupart (macro \verb|\blockinit|), mais il existe aussi un bloc de d�but de couleur \suffixe{control} (macro \verb|\blockinitclone|). Le drapeau vert est dessin� avec la macro \verb|\greenflag|.

\exemple/Voici un d�but :
\begin{scratch}
       \blockinit{quand \greenflag est cliqu�}
       \blockmove{suite de l'algorithme...}
\end{scratch}
et un autre :
\begin{scratch}
       \blockinitclone{quand je commence comme un clone}
       \blocklook{enfiler le costume de clown !}
\end{scratch}/

\section{Les rectangles}
Du texte sp�cifi� par l'utilisateur se trouve dans un rectangle sur fond blanc, en graisse normale et en couleur noir. La macro \verb|\txtbox{<du texte>}| permet, dans l'environnement \SCRATCH d'ins�rer ces rectangles � de texte �:

\exemple/\begin{scratch}
       \blocklook{dire \txtbox{Hello} pendant \ovalnum{2} secondes}
       \blocksensing{demander \txtbox{Quel est votre nom ?} et attendre}
\end{scratch}/

Un menu d�roulant ayant des valeurs pr�d�finies est �galement symbolis� par un rectangle dont la couleur reprend la fonction du bloc qui le contient. Pour ce faire, la macro \verb|\selectmenu{<texte>}| doit �tre ex�cut�e :

\exemple/\begin{scratch}
       \blockinit{Quand je re�ois \selectmenu{message 1}}
       \blockcontrol{cr�er un clone de \selectmenu{moi m�me}}
       \blockmove{aller � \selectmenu{pointeur de souris}}
       \blocklook{ajouter � l'effet \selectmenu{couleur} \ovalnum{25}}
\end{scratch}/

Un carr� rempli de couleur et accessible avec la macro \verb|\squarecolor{<couleur>}| ach�ve cet inventaire sur les rectangles :

\exemple/\begin{scratch}
       \blockpen{stylo en position d'�criture}
       \blockpen{mettre la couleur du style � \squarecolor{red!75!black}}
       \blockmove{avancer de \ovalnum{25}}
\end{scratch}/

\section{Les losanges et les blocs de test}
Dans la symbolique graphique de \SCRATCH, les losanges contiennent des valeurs bool�ennes ayant vocation � se retrouver dans un bloc de test. Pour dessiner de tels objets bool�ens, les macros \verb|\bool<suffixe>{<texte>}| sont utilis�es o� les \verb|<suffixes>| repr�sentent les couleurs correspondant � la fonction du bool�en trac� : \suffixe{list}, \suffixe{sensing} ou \suffixe{operator}.

Les blocs de test sont de deux types,selon qu'ils poss�dent ou pas une branche � else�.
\code|\blockif{<texte du test>}
       {<instructions si test vrai>}|
et
\code|\blockifelse{<texte du test>}
       {<instructions si test vrai>}
       {<instructions si test faux>}|


\exemple/Conditions :\begin{scratch}
       \blockif{si \booloperator{\ovalmove{abscisse x} < \txtbox{7}} alors}
               {\blockmove{aller � \selectmenu{position al�atoire}}
                \blocklook{basculer sur costume \selectmenu{costume 4}}
               }
       \blockmove{aller � \selectmenu{pointeur souris}}
\end{scratch}
et
\begin{scratch}
       \blockifelse{si \boolsensing{couleur \squarecolor{blue!65} touch�e ?} alors}
               {\blockmove{avancer de \ovalnum{2}}
               \blocksound{jouer le son \selectmenu{miaou}}
               }
               {\blockvariable{mettre \ovalvariable{total} � \ovaloperator{\ovalvariable{total} + \ovalnum{1}}}
               \blocksound{arr�ter tous les sons}
               }
       \blockmove{aller � \selectmenu{pointeur souris}}
\end{scratch}/

Les macros \verb|\squarecolor| et celles de la forme \verb|\bool<suffixe>| sont utilisables \emph{en dehors} d'un environnement \SCRATCH :

\exemple/Une couleur : \squarecolor{cyan}.\par
Un bool�en : \boollist{liste \selectmenu{malist} contient \txtbox{foobar}}.\par
Un autre : \booloperator{\booloperator{\ovalvariable{varx} > \txtbox{1}}
et \booloperator{\ovalvariable{varx} < \txtbox{5}}}./

\section{Les blocs de fin}
Ces blocs sont susceptibles de clore un algorithme et n'ont donc pas d'encoche m�le dans leur partie basse. Ils ne peuvent �tre que du type \suffixe{control} et sont dessin�s avec la macro \verb|\blockstop{<texte>}|

\exemple/\begin{scratch}\blockstop{supprimer ce clone}\end{scratch}
ou
\begin{scratch}\blockstop{stop \selectmenu{ce script}}\end{scratch}/

\section{Les blocs de r�p�tition}
Ces blocs sont de deux types, selon que la r�p�tition est pr�vue pour s'arr�ter ou pas (boucle infinie). Ils seront dessin�s par les macros \verb|\blockrepeat| et \verb|\blocinfloop| ayant chacune \emph{deux} arguments : le premier �tant le \verb|<texte>| du bloc et le second la suite d'instructions � r�p�ter.

\exemple/\begin{scratch}
       \blockpen{stylo en position d'�criture}
       \blockrepeat{r�p�ter \ovalnum{4} fois}
               {
               \blockmove{avancer de \ovalnum{10}}
               \blockmove{tourner \turnright{} de \ovalnum{90} degr�s}
               }
\end{scratch}
et
\begin{scratch}
       \blockpen{stylo en position d'�criture}
       \blockinfloop{r�p�ter ind�finiment}
               {
               \blockmove{s'orienter � \ovaloperator{nombre al�atoire entre \ovalnum{0} et \ovalnum{359}}}
               \blockmove{avancer de \ovaloperator{nombre al�atoire entre \ovalnum{1} et \ovalnum{10}}}
               \blockif{si \boolsensing{\selectmenu{bord} touch�?}}
                       {
                       \blockmove{aller � x: \ovalnum{0} y: \ovalnum{0}}
                       }
               }
\end{scratch}/

\section{Les blocs de d�finition}
Les � proc�dures �, ayant le suffixe \suffixe{moreblocks}, permettent d'�tendre les maigres possibilit�s donn�es au programmeur en \SCRATCH.

\exemple/\begin{scratch}
       \initmoreblocks{d�finir \namemoreblocks{trace_carr� \ovalmoreblocks{cot�_carr�}}}
       \blockrepeat{r�p�ter \ovalnum4 fois}
               {\blockmove{avancer de \ovalmoreblocks{cot�_carr�}}
               \blockmove{tourner \turnleft{} de \ovalnum{90} degr�s}
               }
\end{scratch}
puis
\begin{scratch}
       \blockinit{Quand \greenflag est cliqu�}
       \blockpen{effacer tout}
       \blockpen{relever le stylo}
       \blockmove{aller � x: \ovalnum0 y: \ovalnum0}
       \blockmove{s'orienter � \ovalnum{90\selectarrownum} degr�s}
       \blockpen{stylo en position d'�criture}
       \blockrepeat{r�p�ter \ovalnum{10} fois}
               {
               \blockmoreblocks{trace carr� \ovalnum{50}}
               \blockmove{avancer de \ovalnum{10}}
               \blockmove{tourner \turnleft{} de \ovalnum{36} degr�s}
               }
\end{scratch}/

\section{Bloc invisible}
Bien que ce genre de bloc n'existe pas avec \SCRATCH, cette fonctionnalit� peut s'av�rer utile. On ins�re un espace vide avec \verb|\blockspace[<coeff>]|. L'espace verticale ins�r�e est �gale � la hauteur normale d'un bloc multipli�e par le \verb|<coeff>|, valeur optionnelle qui vaut 1 par d�faut.

\exemple/\begin{scratch}
       \blockmove{ci-dessous, une espace d'un bloc}
       \blockspace
       \blockmove{ci dessous, une espace �gale � la moiti� d'un bloc}
       \blockspace[0.5]
       \blockmove{la suite}
\end{scratch}/

\section{Personnalisation}
Plusieurs \verb|<param�tres>| peuvent �tre r�gl�s par l'utilisateur selon la syntaxe \verb|<cl�>=<valeur>|. Cas param�tres peuvent �tre sp�cifi�s dans :

\begin{itemize}
       \item l'argument optionnel de l'environnement \verb|\begin{scratch}[<param�tres>]| auquel cas les \verb|<param�tres>| ne s'appliquent qu'� cet environnement;
       \item l'argument de la macro \verb|\setscratch{<param�tres>}| pour sp�cifier des \verb|<param�tres>| pour les environnements \SCRATCH � venir;
       \item l'argument de \verb|\setdefaultscratch{<param�tres>}| pour sp�cifier des \verb|<param�tres>| \emph{par d�faut}.
\end{itemize}

Il existe la macro \verb|\resetscratch| qui remet � leur valeur par d�faut tous les \verb|<param�tres>| de \SCRATCH, pour annuler les effets d'une macro \verb|\setscratch|.\bigbreak

Voici les \verb|<param�tres>| disponibles :

\cleval{else word}{caract�res}
Repr�sente est le mot qui est ins�r� dans la branche � else � d'un bloc de test.

\cleval{x sep}{dimension}
Repr�sente l'espace horizontale ins�r�e entre les bords droit et gauche du texte du bloc et les bords droits et gauche du bloc. La valeur est ramen�e si n�cessaire dans l'intervalle [3pt ; 1em].

\cleval{y sepsup}{dimension}
Repr�sente l'espace verticale ins�r�e entre le bas de l'encoche femelle et le bord sup�rieur du texte du bloc. La valeur est ramen�e si n�cessaire dans l'intervalle [3pt ; 3ex].

\cleval{y sepinf}{dimension}
Repr�sente l'espace verticale ins�r�e entre le bas du bloc et le bord inf�rieur du texte du bloc. La valeur est ramen�e si n�cessaire dans l'intervalle [3pt ; 3ex].

\cleval{line width}{dimension}
Repr�sente l'�paisseur des lignes de relief des blocs et le double des lignes de relief des losanges bool�ens. La valeur est ramen�e si n�cessaire dans l'intervalle [0pt ; 5pt].

\cleval{loop width}{dimension}
Repr�sente est la largeur de la barre verticale des blocs de r�p�tition ou de test. La valeur est ramen�e si n�cessaire dans l'intervalle [3pt ; 3em].

\cleval{loop height}{dimension}
Repr�sente est l'�paisseur des barres horizontales � else � et inf�rieure des blocs de r�p�tition ou de test. La valeur est ramen�e si n�cessaire dans l'intervalle [3pt ; 3ex].

\cleval{corner}{dimension}
Repr�sente la dimension des chanfreins des blocs. La valeur est ramen�e si n�cessaire dans l'intervalle [0.33333ex ; 1ex].

\cleval{notch}{dimension}
Repr�sente la largeur des encoches. La valeur est ramen�e si n�cessaire dans l'intervalle [0.33333em ; 3em].

\cleval{scale}{coefficient}\label{cle-scale}
Repr�sente l'�chelle � laquelle est repr�sent� le dessin. La valeur est ramen�e si n�cessaire dans l'intervalle [0.2 ; 5].

\cleval{init arcangle}{angle}
Repr�sente l'angle avec l'horizontale de l'arc de cercle trac� dans la partie haute des blocs de d�part. La valeur est ramen�e si n�cessaire dans l'intervalle [20 ; 40].

\cleval{init arclength}{dimension}
Repr�sente la longueur horizontale de l'arc de cercle trac� dans la partie haute des blocs de d�part. La valeur est ramen�e si n�cessaire dans l'intervalle [3em ; 8em].

\cleval{moreblock arcangle}{angle}
Repr�sente l'angle avec l'horizontale de l'arc de cercle trac� dans la partie haute des blocs de de type � moreblock�. La valeur est ramen�e si n�cessaire dans l'intervalle [10 ; 20].

\cleval{contrast}{entier}
Cet entier, compris entre 0 et 100 inclus, qualifie la diff�rence de teintes entre les lignes de relief trac�es autour des blocs. L'entier 0 signifie �aucun contraste� (teintes identiques) tandis que que 100 signifie �contraste maximal� auquel cas les lignes claires, qui se situent sur la partie haute des blocs, sont blanches et les lignes fonc�es sont noires. La valeur est ramen�e si n�cessaire dans l'intervalle [0 ; 100].

\cleval{print}{bool�en}
Lorsque ce bool�en est vrai, les dessins se font en noir et blanc de fa�on � pouvoir �tre dirig�s vers une impression en noir et blanc.

\exemple/\begin{scratch}
       \blockinit{Quand \greenflag est cliqu�}
       \blockpen{effacer tout}
       \blockpen{relever le stylo}
       \blockmove{ajouter \ovalnum{5} � \ovalvariable{abscisse}}
\end{scratch} puis
\begin{scratch}[print]
       \blockinit{Quand \greenflag est cliqu�}
       \blockpen{effacer tout}
       \blockpen{relever le stylo}
       \blockmove{ajouter \ovalnum{5} � \ovalvariable{abscisse}}
\end{scratch}/

\cleval{fill blocks}{bool�en}
Ce bool�en n'est pris en compte que lorsque le bool�en \verb|print| est vrai. Si \verb|fill blocks| est vrai, tous les dessins (sauf les ovales contenant des nombres) seront remplis avec un gris choisi avec la cl� suivante.

\cleval{fill gray}{taux de gris}
Lorsque \verb|fill blocks| est vrai, ce taux de blanc dans le gris (nombre compris entre 0 pour noir et 1 pour blanc) est utilis� pour d�finir une couleur de remplissage des dessins. La valeur est ramen�e si n�cessaire dans l'intervalle [0 ; 1].

\exemple/\begin{scratch}
       \blockinit{Quand \greenflag est cliqu�}
       \blockpen{effacer tout}
       \blockpen{relever le stylo}
       \blockmove{ajouter \ovalnum{5} � \ovalvariable{abscisse}}
\end{scratch} puis
\begin{scratch}[print,fill blocks]
       \blockinit{Quand \greenflag est cliqu�}
       \blockpen{effacer tout}
       \blockpen{relever le stylo}
       \blockmove{ajouter \ovalnum{5} � \ovalvariable{abscisse}}
\end{scratch} puis
\begin{scratch}[print,fill blocks,fill gray=0.66]
       \blockinit{Quand \greenflag est cliqu�}
       \blockpen{effacer tout}
       \blockpen{relever le stylo}
       \blockmove{ajouter \ovalnum{5} � \ovalvariable{abscisse}}
\end{scratch}/

\cleval{text color}{couleur}
Lorsque \verb|fill blocks| est vrai, cette couleur sera utilis�e pour le texte des blocs.

\cleval{flag gray}{taux de gris}
Lorsque \verb|print| est vrai, ce taux de gris est utilis� pour la couleur du drapeau trac� avec \verb|\greenflag| ainsi que pour la fl�che se trouvant au bas des blocs de r�p�tition. La valeur est ramen�e si n�cessaire dans l'intervalle [0 ; 1].

\exemple/\begin{scratch}[print,fill blocks,fill gray=0.66]
       \blockinit{Quand \greenflag est cliqu�}
       \blockpen{effacer tout}
       \blockpen{relever le stylo}
       \blockmove{ajouter \ovalnum{5} � \ovalvariable{abscisse}}
\end{scratch} puis
\begin{scratch}[print,fill blocks,fill gray=0.33,text color=white,flag gray=0.66]
       \blockinit{Quand \greenflag est cliqu�}
       \blockpen{effacer tout}
       \blockpen{relever le stylo}
       \blockmove{ajouter \ovalnum{5} � \ovalvariable{abscisse}}
\end{scratch}/

\cleval{line gray}{taux de gris}
Lorsque \verb|print| est vrai, ce taux de gris est utilis� pour la couleur des lignes de relief. La valeur est ramen�e si n�cessaire dans l'intervalle [0 ; 1].

\cleval{num blocks}{bool�en}
Lorsque ce bool�en est vrai, les blocs sont num�rot�s.

\cleval{num sep}{dimension}
Cette cl� contient l'espacement entre les num�ros de blocs et leur fronti�re gauche. La valeur est ramen�e si n�cessaire dans l'intervalle [0pt ; 1.5em].

\cleval{num start}{entier}
Cette cl� contient le premier num�ro du bloc.

La macro \verb|\numblock| est charg�e d'imprimer les num�ros de ligne. Elle admet un argument (le num�ro de ligne) et permet, lorsqu'elle est red�finie, de personnaliser la num�rotation : choix de la couleur, de la police, de sa taille et des effets applicables � son argument. Par d�faut, cette macro est d�finie par
\begin{center}
       \verb|\newcommand*\numblock[1]{\color{black}\footnotesize\bfseries#1}|
\end{center}

Dans l'environnement \SCRATCH, entre des instructions \SCRATCH, on peut activer ou d�sactiver la num�rotation \emph{pour le dessin en cours} � l'aide de
\begin{center}
       \verb|\setscratch{num blocks=<bool�en>}|
\end{center}

\exemple/\begin{scratch}[num blocks]
       \blockinit{Quand \greenflag est cliqu�}
       \blockpen{effacer tout}
       \blockpen{relever le stylo}
       \blockmove{ajouter \ovalnum{5} � \ovalvariable{abscisse}}
\end{scratch} puis
\renewcommand*\numblock[1]{\color{blue!80}\itshape#1}
\begin{scratch}[num blocks,num start=3]
       \blockinit{Quand \greenflag est cliqu�}
       \blockpen{effacer tout}
       \blockpen{relever le stylo}
       \blockmove{ajouter \ovalnum{5} � \ovalvariable{abscisse}}
\end{scratch}
puis
\renewcommand*\numblock[1]{\fboxsep=0.5pt\fbox{\bfseries#1}}
\begin{scratch}[num blocks=false]
       \blockinit{Quand \greenflag est cliqu�}
       \blockpen{effacer tout}
       \setscratch{num blocks=true}
       \blockpen{relever le stylo}
       \blockmove{ajouter \ovalnum{5} � \ovalvariable{abscisse}}
\end{scratch}/

\cleval{baseline}{alignement}
Cette cl� contient la consigne d'alignement du dessin tout entier, c'est-�-dire :
\begin{itemize}
       \item la lettre �\verb|c|� auquel cas, le dessin est centr� sur la ligne de base
       \item un entier qui sp�cifie un num�ro de bloc existant : la num�rotation est coh�rente avec l'entier initial contenu dans la cl� \verb|num start|. Dans ce cas, la ligne de base choisie est celle du texte contenu dans le bloc portant le num�ro choisi.
\end{itemize}

\exemple/D�faut : \begin{scratch}
       \blockinit{Quand \greenflag est cliqu�}
       \blockpen{effacer tout}
       \blockpen{relever le stylo}
       \blockmove{ajouter \ovalnum{5} � \ovalvariable{abscisse}}
\end{scratch}
bloc 3 : \begin{scratch}[baseline=3]
       \blockinit{Quand \greenflag est cliqu�}
       \blockpen{effacer tout}
       \blockpen{relever le stylo}
       \blockmove{ajouter \ovalnum{5} � \ovalvariable{abscisse}}
\end{scratch}
centr�
\begin{scratch}[baseline=c]
       \blockinit{Quand \greenflag est cliqu�}
       \blockpen{effacer tout}
       \blockpen{relever le stylo}
       \blockmove{ajouter \ovalnum{5} � \ovalvariable{abscisse}}
\end{scratch}/

\section{Mot de la fin}
Le code de cette extension d�montre mon immense ignorance de ti\textit kz/pgf et les m�thodes de programmation qui lui sont propres que, d�cid�ment, je ne comprendrai jamais! C'est sans doute le trop grand �loignement avec la logique de \TeX{} et la documentation de ti\textit kz/pgf, aussi indigeste qu'illisible, qui explique cette incompatibilit� d'humeur et mon d�sint�r�t � l'�gard de ti\textit kz. Toujours est-il que cette extension fonctionne, avec une lenteur certaine que j'attribue � ma programmation hasardeuse ainsi qu'� la lenteur intrins�que de ti\textit kz.

Toute remarque, remont�e de bug ---~je n'ose pas dire am�lioration du code~---, demande d'impl�mentation de fonctionnalit� est bien �videmment bienvenue; j'invite les utilisateurs � m'en faire part \emph{via} email � \texttt{[email protected]}

\section{Historique}
\begin{version}{0.1}{16/05/2017}
       >Premi�re version.
\end{version}

\begin{version}{0.2}{28/05/2017}
       >Pour une impression en noir et blanc, ajout de l'option �\texttt{print}�, suite � une demande de P.~\bsc{Celdran}. De cette option d�coulent les options �\texttt{fill blocks}�, �\texttt{fill gray}�, �\texttt{text color}�, �\texttt{flag gray}� et �\texttt{line gray}�.
       >Ajout �galement de l'option �\texttt{contrast}� qui qualifie la diff�rence de nuance entre les lignes de contraste des parties hautes et des parties basses.
\end{version}

\begin{version}{0.3}{03/08/2017}
       >Correction d'une erreur dans le trac� des lignes de contraste des "boolbox".
       >Correction d'un bug dans \verb|\resetscratch|.
       >Correction d'un bug dans \verb|\txtbox|.
       >Chargement de l'extension \texttt{simplekv} pour les cl�s/valeurs.
       >Ajout de la cl� �scale�.
\end{version}

\begin{version}{0.31}{15/09/2017}
       >Correction d'un bug signal� par G. \textsc{Mandallaz} dans \verb|\SCR_ovalbox| qui s'ex�cute maintenant dans un groupe : l'assignation de \verb|\SCR_current_fillcolor| est donc locale.
       >Correction d'une erreur dans le trac� des lignes de contraste des \verb|\SCR_ovalbox|.
\end{version}

\begin{version}{0.32}{20/09/2017}
       >Correction de 2 bugs signal�s par G. \textsc{Mandallaz} : la couleur des \verb|\ovallist| n'�tait pas correcte et la forme des \verb|\selectmenu| n'�tait pas rectangulaire lorsqu'ils �taient appel�s dans un boite ovale.
\end{version}

\begin{version}{0.33}{30/12/2017}
       >Correction d'un bug signal� par I. \textsc{Eble} : l'affichage des losanges, boites de texte, ovales n'est pas correct dans les blocs lorsque \verb|scale| est diff�rente de 1.
\end{version}

\begin{version}{0.4}{08/04/2018}
       >Possibilit� de num�roter les blocs, requ�te de Fabrice \textsc{Bavoil}.
       >Augmentation automatique de la taille horizontale d'un bloc si le texte qu'il contient est trop court, bug signal� par Fabrice \textsc{Bavoil}.
       >Possibilit� de choisir la ligne de base du dessin \SCRATCH, requ�te de Fabrice \textsc{Bavoil}.
       >Gr�ce � une cl� secr�te, les � losanges � n'ont plus une infime fraction de trait qui se chevauche avec les \verb|\txtbox| ou \verb|\selectmenu| int�rieurs qui se trouvent en d�but ou fin de texte. Les ultra-perfectionnistes sont enfin combl�s !
       >Param�tres born�s (pour la plupart) et ramen�s dans le domaine de fonctionnement --~ou du raisonnable~-- si n�cessaire.
       >Suppression du \verb|\normalsize| qui emp�chait la prise en compte de la taille de la police en cours.
       >Nouvelle cl� �notch� pour sp�cifier la longueur du trait horizontal des encoches.
       >Nettoyage du code.
\end{version}

\begin{version}{0.41}{20/03/2019}
       >Derni�re version, le package est gel� et n'est plus maintenu en raison de l'abandon de \SCRATCH v2 au profit de \SCRATCH v3.
\end{version}
\end{document}