% !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}