<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">% !TeX encoding = UTF-8
% !TeX TS-program = pdflatex
% Ceci est la documentation du package "scratch3"
% Fichier compilÃ© avec pdflatex
\documentclass[french,a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[margin=2cm]{geometry}
\usepackage[bottom]{footmisc}
\usepackage{libertine,boites,tikz,enumitem,MnSymbol,babel,xspace,listings,scratch3}
\usepackage[scaled=0.8]{luximono}
\frenchbsetup{og=Â«,fg=Â»}
\def\SCRATCH{\texttt{scratch}\xspace}
\def\SSCRATCH{\texttt{\scrname}\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\&lt;{$\langle$\begingroup\itshape}%
		\make@car@active\&gt;{\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\&gt;{\leavevmode\kern\z@\string&gt;}%
		\make@car@active\&lt;{\leavevmode\kern\z@\string&lt;}%
		\@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`\&lt;13 \catcode`\&gt;13
	\gdef\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
		\bgroup
			\verb@eol@error \let\do\@makeother \dospecials
			\verbatim@font\@noligs
			\catcode`\&lt;13 \catcode`\&gt;13 \def&lt;{\begingroup$\langle$\itshape}\def&gt;{\/$\rangle$\endgroup}%
			\@ifstar\@sverb\@verb}
\endgroup
\def\longfrscrdate@i#1/#2/#3\@nil{\number#3\relax\ifnum\number#3=1 \noexpand\ier\fi\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[\scrname]{#1}}
			{\detokenize{{}}}
			{\detokenize\expandafter\expandafter\expandafter{\useKV[\scrname]{#1}}}}\unskip)%
		\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`\&gt;13 \begingroup\lccode`\~`\&gt; \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{unbonpetit@netc.fr}\par
	\endgroup
	\vskip2cm
	\leftskip=.2\linewidth \rightskip=.2\linewidth \small
	Cette extension permet de dessiner des empilements de blocs similaires Ã&nbsp; ceux que l'on trouve dans le logiciel de programmation \emph{visuelle} Â« \SCRATCH v3\footnote{Le logiciel que l'on peut utiliser en ligne Ã&nbsp; \texttt{https://scratch.mit.edu/}} Â».
\end{titlepage}
\parindent0pt
\section{Avant propos}
La prÃ©sente extension intitulÃ©e \SSCRATCH, est une Ã©volution de l'extension \SCRATCH qui imitait la version 2 du logiciel. Depuis janvier~2019, le logiciel est passÃ© Ã&nbsp; la version~3 et l'extension \SCRATCH est donc devenue obsolÃ¨te et non maintenue.\medbreak

Cette version de \SSCRATCH ayant un numÃ©ro de version infÃ©rieur Ã&nbsp; 1, elle est susceptible d'Ãªtre immature, c'est-Ã&nbsp;-dire de contenir des bugs, des incohÃ©rences ou des effets non dÃ©sirÃ©s. Si cela se produit, je remercie les utilisateurs de bien vouloir me le faire savoir par email.\medbreak

Les utilisateurs les plus attentifs auront sans doute remarquÃ© que seuls les blocs de type Â«styloÂ» sont disponibles parmi ceux qui sont dorÃ©navant considÃ©rÃ©s comme Â«extensionÂ». Il s'agit, pour l'instant, d'un choix dÃ©libÃ©rÃ©...

\paragraph{Attention} Il est fortement dÃ©conseillÃ© de charger les packages \SCRATCH et \SSCRATCH en raison de plusieurs dÃ©finitions communes qu'ils partagent et qui conduiraient inÃ©vitablement Ã&nbsp; des dysfonctionnements. L'erreur qui survient ---~et le refus de charger le deuxiÃ¨me~--- lorsqu'on tente de charger ces deux packages ne doivent pas Ãªtre dÃ©sactivÃ©s par une modification de leurs codes.\medbreak

L'extension \SSCRATCH requiert les extensions \texttt{simplekv} et \texttt{ti\textit kz} qui sont automatiquement chargÃ©es si cela s'avÃ¨re nÃ©cessaire.\medbreak

FidÃ¨le Ã&nbsp; mes convictions, la documentation de cette extension n'est disponible qu'en franÃ§ais.

\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-Ã&nbsp;-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 Ã&nbsp; tout prix imposer. Je ne compte bien Ã©videmment pas me plier Ã&nbsp; ce nouveau dogme ridicule et ne l'utiliserai ni ne l'enseignerai; je considÃ¨re que les Ã©lÃ¨ves mÃ©ritent mieux que \SCRATCH --~Python, java ou lua par exemple~-- comme entrÃ©e dans le monde de la programmation.} 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 Ã&nbsp; 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} Ã&nbsp; 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&lt;suffixe&gt;| 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 Ã&nbsp; la macro \verb|\blockmove{&lt;texte&gt;}|. 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} Â» qui est dÃ©finie dans le document au moment oÃ¹ l'environnement est appelÃ© : pratiquement, cela signifie que la macro \verb|\sffamily| est exÃ©cutÃ©e avant que le texte des blocs ne soit composÃ©. La clÃ© Â«\texttt{pre text}Â» (voir page~\pageref{pre text}), modifiable par l'utilisateur, contient par dÃ©faut le code exÃ©cutÃ© avant que du texte ne soit affichÃ©, c'est-Ã&nbsp;-dire \verb|\sffamily|. Dans cette documentation, la police sans serif est Â«\textsf{biolinum}Â».

La plupart des dimensions des blocs sont proportionnelles Ã&nbsp; 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 Ã&nbsp; 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 variables que l'utilisateur spÃ©cifie lui-mÃªme (comme des nombres ou du texte) :
\begin{center}
	\begin{scratch}
		\blockmove{tourner de \turnleft{} de \ovalnum{45} degrÃ©s}
		\blocklook{penser Ã&nbsp; \ovalnum{Hmm..} pendant \ovalnum{2} secondes}
	\end{scratch}
\end{center}
Les variables peuvent Ãªtre prÃ©dÃ©finies dans \SCRATCH ou crÃ©Ã©es par l'utilisateur et dans ce cas, les ovales sont de couleur identique Ã&nbsp; la couleur du thÃ¨me auquel appartient la variable:
\begin{center}
	\begin{scratch}
		\blocklook{penser Ã&nbsp; \ovalsensing{rÃ©ponse}}
		\blockmove{aller Ã&nbsp; x: \ovaloperator{\ovalmove{ abscisse x} + \ovalnum{1}} y: \ovalmove{ordonnÃ©e y}}
	\end{scratch}
\end{center}
Ces variables peuvent Ã©galement Ãªtre spÃ©cifiques aux blocs concernÃ©s, sÃ©lectionnÃ©es parmi plusieurs possibilitÃ©s, auquel cas l'ovale est de couleur plus sombre que le bloc et se termine avec une flÃ¨che de sÃ©lection :
\begin{center}
	\begin{scratch}
		\blocksound{jouer le son \ovalsound*{Meow}}
		\blockcontrol{crÃ©er un clone de \ovalcontrol*{moi mÃªme}}
	\end{scratch}
\end{center}
Au niveau des macros utilisÃ©es :
\begin{itemize}
	\item la macro \verb|\ovalnum{&lt;nombre&gt;}| dessine un ovale Ã&nbsp; fond blanc;
	\item la macro \verb|\oval&lt;suffixe&gt;| trace un ovale de la couleur de  \verb|&lt;suffixe&gt;|;
	\item en version Ã©toilÃ©e, \verb|\oval&lt;suffixe&gt;*| trace un ovale de couleur plus sombre avec une 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 de toutes sortes : \begin{scratch}
		\blockmove{tourner de \turnleft{} de \ovalnum{45} degrÃ©s}
		\blocklook{penser Ã&nbsp; \ovalnum{Hmm..} pendant \ovalnum{2} secondes}
		\blocklook{penser Ã&nbsp; \ovalsensing{rÃ©ponse}}
		\blockmove{aller Ã&nbsp; x: \ovaloperator{\ovalmove{ abscisse x} + \ovalnum{1}} y: \ovalmove{ordonnÃ©e y}}
		\blocksound{jouer le son \ovalsound*{Meow}}
		\blockcontrol{crÃ©er un clone de \ovalcontrol*{moi mÃªme}}
\end{scratch}/

Toutes les macros de la forme \verb|\oval&lt;suffixe&gt;| sont utilisables \emph{en dehors} de l'environnement \SCRATCH:

\exemple/Voici une variable simple Â«\ovalmove{direction}Â»,
une variable sÃ©lectionnÃ©e Â«\ovalsound*{Meow}Â»./

Il faut signaler que les blocs de suffixes \suffixe{operator}, \suffixe{variable} , \suffixe{list} ou \suffixe{moreblocks} ne peuvent avoir d'ovales de sÃ©lection. N'ayant pas de sens pour \SCRATCH, une erreur sera Ã©mise si une macro Ã©toilÃ©e \verb|\oval&lt;suffixe&gt;*| est utilisÃ©e, et visuellement, cela se traduira par une couleur de remplissage du bloc en rouge.
\medbreak
Un ovale rempli de couleur et accessible avec la macro \verb|\pencolor{&lt;couleur&gt;}| permet de sÃ©lectionner la couleur du stylo:

\exemple/\begin{scratch}
	\blockpen{stylo en position d'Ã©criture}
	\blockpen{mettre la couleur du style Ã&nbsp; \pencolor{red!75!black}}
	\blockmove{avancer de \ovalnum{25}}
\end{scratch}/

\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}
Un menu dÃ©roulant contenant des valeurs prÃ©dÃ©finies est symbolisÃ© par un rectangle dont la couleur reprend celle du bloc dans lequel il se trouve. Pour ce faire, la macro \verb|\selectmenu{&lt;texte&gt;}| doit Ãªtre exÃ©cutÃ©e :

\exemple/\begin{scratch}
	\blockinit{Quand je reÃ§ois \selectmenu{message 1}}
	\blocksound{ajouter \ovalnum{10} Ã&nbsp; l'effet \selectmenu{hauteur}}
	\blocklook{mettre l'effet \selectmenu{couleur} Ã&nbsp; \ovalnum{0}}
	\blockvariable{mettre \selectmenu{ma_variable} Ã&nbsp; \ovalnum{10}}
\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 Ã&nbsp; se retrouver dans un bloc de test. Pour dessiner de tels objets boolÃ©ens, les macros \verb|\bool&lt;suffixe&gt;{&lt;texte&gt;}| sont utilisÃ©es oÃ¹ les \verb|&lt;suffixes&gt;| reprÃ©sentent les couleurs correspondant Ã&nbsp; 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{&lt;texte du test&gt;}
	{&lt;instructions si test vrai&gt;}|
et
\code|\blockifelse{&lt;texte du test&gt;}
	{&lt;instructions si test vrai&gt;}
	{&lt;instructions si test faux&gt;}|


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

La macros \verb|\pencolor| et celles de la forme \verb|\bool&lt;suffixe&gt;| sont utilisables \emph{en dehors} d'un environnement \SCRATCH :

\exemple/Une couleur : \pencolor{cyan}.\par
Un boolÃ©en : \boollist{liste \selectmenu{malist} contient \ovalnum{foobar}}.\par
Un autre : \booloperator{\booloperator{\ovalvariable{varx} &gt; \ovalnum{1}}
et \booloperator{\ovalvariable{varx} &lt; \ovalnum{5}}}./

La macro \verb|\boolempty[&lt;dimension&gt;]| permet de tracer un losange vide. L'argument optionnel est une \verb|&lt;dimension&gt;| qui vaut \verb|2em| par dÃ©faut.

\exemple/\begin{scratch}
	\blockifelse{si \boolempty[3em] alors}
		{\blocklook{dire \ovalnum{le test est vrai}}}
		{\blocklook{dire \ovalnum{le test est faux}}}
\end{scratch}/

\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{&lt;texte&gt;}|

\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|&lt;texte&gt;| du bloc et le second la suite d'instructions Ã&nbsp; 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 Ã&nbsp; \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 Ã&nbsp; 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 Ã&nbsp; x: \ovalnum0 y: \ovalnum0}
	\blockmove{s'orienter Ã&nbsp; \ovalnum{90} 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}/

Ã€ l'intÃ©rieur d'un \verb|\namemoreblocks|, on peut mettre \verb|\ovalmoreblocks| pour spÃ©cifier un argument de type nombre ou texte ou bien \verb|\boolmoreblocks| pour un argument de type boolÃ©en.

\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[&lt;coeff&gt;]|. L'espace verticale insÃ©rÃ©e est Ã©gale Ã&nbsp; la hauteur normale d'un bloc multipliÃ©e par le \verb|&lt;coeff&gt;|, 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 Ã&nbsp; la moitiÃ© d'un bloc}
	\blockspace[0.5]
	\blockmove{la suite}
\end{scratch}/

\section{Personnalisation}
Plusieurs \verb|&lt;paramÃ¨tres&gt;| peuvent Ãªtre rÃ©glÃ©s par l'utilisateur selon la syntaxe \verb|&lt;clÃ©&gt;=&lt;valeur&gt;|. Cas paramÃ¨tres peuvent Ãªtre spÃ©cifiÃ©s dans :

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

Il existe la macro \verb|\resetscratch| qui remet Ã&nbsp; leur valeur par dÃ©faut tous les \verb|&lt;paramÃ¨tres&gt;| de \SCRATCH, pour annuler les effets d'une macro \verb|\setscratch|.\bigbreak

Voici les \verb|&lt;paramÃ¨tres&gt;| 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{pre text}{code}\label{pre text}
C'est le \verb|code| qui est exÃ©cutÃ© avent que du texte ne soit affichÃ© par \SSCRATCH.

\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 Ã&nbsp; laquelle est reprÃ©sentÃ© le dessin. La valeur est ramenÃ©e si nÃ©cessaire dans l'intervalle [0.2 ; 5].

Les blocs ovales ou losanges, qui peuvent se trouver Ã&nbsp; l'extÃ©rieur de l'environnement scrtach, sont affectÃ©s par la valeur de \texttt{scale} :

\exemple/\setscratch{scale=1}Ã‰chelle 1 : \ovalvariable{var} et \booloperator{\ovalmove{abscisse x} &lt; \ovalnum{7}}\par
Ã‰chelle 0.75 :\setscratch{scale=.75} : \ovalvariable{var} et \booloperator{\ovalmove{abscisse x} &lt; \ovalnum{7}}\par
Ã‰chelle 1.25 :\setscratch{scale=1.25} : \ovalvariable{var} et \booloperator{\ovalmove{abscisse x} &lt; \ovalnum{7}}/

\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{print}{boolÃ©en}
Lorsque ce boolÃ©en est vrai, les dessins se font en noir et blanc de faÃ§on Ã&nbsp; pouvoir Ãªtre dirigÃ©s vers une impression en noir et blanc.

\exemple/\begin{scratch}
	\blockinit{Quand \greenflag est cliquÃ©}
	\blockpen{effacer tout}
	\blocksound{jouer le son \ovalsound*{Meow}}
	\blockmove{ajouter \ovalnum{5} Ã&nbsp; \ovalvariable{abscisse}}
\end{scratch} puis
\begin{scratch}[print]
	\blockinit{Quand \greenflag est cliquÃ©}
	\blockpen{effacer tout}
	\blocksound{jouer le son \ovalsound*{Meow}}
	\blockmove{ajouter \ovalnum{5} Ã&nbsp; \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}
	\blocksound{jouer le son \ovalsound*{Meow}}
	\blockmove{ajouter \ovalnum{5} Ã&nbsp; \ovalvariable{abscisse}}
\end{scratch} puis
\begin{scratch}[print,fill blocks]
	\blockinit{Quand \greenflag est cliquÃ©}
	\blockpen{effacer tout}
	\blocksound{jouer le son \ovalsound*{Meow}}
	\blockmove{ajouter \ovalnum{5} Ã&nbsp; \ovalvariable{abscisse}}
\end{scratch} puis
\begin{scratch}[print,fill blocks,fill gray=0.66]
	\blockinit{Quand \greenflag est cliquÃ©}
	\blockpen{effacer tout}
	\blocksound{jouer le son \ovalsound*{Meow}}
	\blockmove{ajouter \ovalnum{5} Ã&nbsp; \ovalvariable{abscisse}}
\end{scratch}/

\cleval{contrast}{entier}
Lorsque l'option \verb|print| est vraie, cet entier, compris entre 0 et 100 inclus, qualifie la diffÃ©rence de teinte entre les lignes de relief et la teinte de gris de ces blocs, spÃ©cifiÃ©e par la clÃ© \texttt{fill gray}. L'entier 0 sÃ©lectionne la couleur spÃ©cifiÃ©e par \texttt{fill gray} tandis que 100 trace les lignes en noir. La valeur est ramenÃ©e si nÃ©cessaire dans l'intervalle [0 ; 100].

\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}
	\blocksound{jouer le son \ovalsound*{Meow}}
	\blockmove{ajouter \ovalnum{5} Ã&nbsp; \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}
	\blocksound{jouer le son \ovalsound*{Meow}}
	\blockmove{ajouter \ovalnum{5} Ã&nbsp; \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 Ã&nbsp; 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} Ã&nbsp; l'aide de
\begin{center}
	\verb|\setscratch{num blocks=&lt;boolÃ©en&gt;}|
\end{center}

\exemple/\begin{scratch}[num blocks]
	\blockinit{Quand \greenflag est cliquÃ©}
	\blockpen{effacer tout}
	\blocksound{jouer le son \ovalsound*{Meow}}
	\blockmove{ajouter \ovalnum{5} Ã&nbsp; \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}
	\blocksound{jouer le son \ovalsound*{Meow}}
	\blockmove{ajouter \ovalnum{5} Ã&nbsp; \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}
	\blocksound{jouer le son \ovalsound*{Meow}}
	\blockmove{ajouter \ovalnum{5} Ã&nbsp; \ovalvariable{abscisse}}
\end{scratch}/

\cleval{baseline}{alignement}
Cette clÃ© contient la consigne d'alignement du dessin tout entier, c'est-Ã&nbsp;-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}
	\blocksound{jouer le son \ovalsound*{Meow}}
	\blockmove{ajouter \ovalnum{5} Ã&nbsp; \ovalvariable{abscisse}}
\end{scratch}
bloc 3 : \begin{scratch}[baseline=3]
	\blockinit{Quand \greenflag est cliquÃ©}
	\blockpen{effacer tout}
	\blocksound{jouer le son \ovalsound*{Meow}}
	\blockmove{ajouter \ovalnum{5} Ã&nbsp; \ovalvariable{abscisse}}
\end{scratch}
centrÃ©
\begin{scratch}[baseline=c]
	\blockinit{Quand \greenflag est cliquÃ©}
	\blockpen{effacer tout}
	\blocksound{jouer le son \ovalsound*{Meow}}
	\blockmove{ajouter \ovalnum{5} Ã&nbsp; \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 Ã&nbsp; l'Ã©gard de ti\textit kz. Toujours est-il que cette extension fonctionne, avec une lenteur certaine que j'attribue autant Ã&nbsp; ma programmation hasardeuse qu'Ã&nbsp; 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 Ã&nbsp; m'en faire part \emph{via} email Ã&nbsp; \texttt{unbonpetit@netc.fr}

\section{Historique}
\begin{version}{0.1}{19/02/2019}
	&gt;PremiÃ¨re version.
\end{version}
\begin{version}{0.11}{10/03/2019}
	&gt;Correction d'un bug dans \verb|\scr_blockloop| : la couleur \verb|\scr_current_blockcolor| y est dÃ©sormais dÃ©finie;
	&gt;Correction d'un bug dans \verb|\boolmoreblocks| : la couleur est correcte et \verb|rounded corners| dÃ©sormais est nul pour le tracÃ© d'un losange.
\end{version}
\begin{version}{0.12}{18/05/2019}
	&gt;Correction d'un bug dans \verb|\ovalnum|;
	&gt;Correction d'un bug dans \verb|\scr_ovalbox|.
\end{version}
\begin{version}{0.13}{01/07/2019}
	&gt;Mise en place de \verb|\relax| pour Ã©viter le bug de \verb|\lastkern| avec Xe\LaTeX.
\end{version}
\begin{version}{0.14}{01/10/2019}
	&gt;Gestion de l'Ã©chelle (via clÃ© "\texttt{scale}") amÃ©liorÃ©e.
	&gt;Hors de l'environnement, les ovales et les losanges sont affectÃ©s par la clÃ© "\texttt{scale}" si elle est spÃ©cifiÃ©e via \verb|\setscratch|.
	&gt;Erreur de tracÃ© corrigÃ©e dans \verb|\scr_blockloop|.
	&gt;Nouveau losange vide : \verb|\boolempty[&lt;dimension&gt;]|.
\end{version}
\begin{version}{0.15}{05/03/2020}
	&gt;Bug corrigÃ© dans les blocs normaux: l'Ã©chelle est dÃ©sormais rÃ©initialisÃ©e si besoin.
\end{version}
\begin{version}{0.16}{20/03/2020}
	&gt;Le bug corrigÃ© dans la v0.15 est fautif, \verb|scr_scale| est dÃ©sormais initialisÃ©e dans \verb|\initmoreblocks|.
\end{version}
\begin{version}{0.17}{27/04/2020}
	&gt;Quelques petites modifications pour ne plus appeler aucune macro privÃ©e de simplekv et sa version 0.2.
\end{version}
\begin{version}{0.18}{03/09/2020}
	&gt;initialisation de \verb|\scr_yoffset| et \verb|\scr_xoffset| dans \verb|\scr_namemoreblocks|.
	&gt;initialisation de \verb|\scr_linewidth| dans \verb|\greenflag|.
\end{version}
\begin{version}{0.19}{06/02/2022}
	&gt;Ã©chelle initialisÃ©e dans les blocs normaux.
	&gt;espace de 0.3333em en dÃ©but de texte \verb|\selectmenu|.
	&gt;bug fix dans \verb|\scr_ovalbox| : 0.1 de sÃ©paration.
	&gt;\verb-\scr_blockstop- vaut 0 aprÃ¨s \verb-\blockspace-.
	&gt;encodage UTF-8
\end{version}
\end{document}</pre></body></html>