1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588
|
% !TeX encoding = ISO-8859-1
% Ceci est la documentation du package "scratch3"
%
% 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,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\<{$\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 fvrier\or mars\or avril\or mai\or juin\or juillet\or aout\or septembre\or octobre\or novembre\or dcembre\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{Dfaut} : {\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`\>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{unbonpetit@netc.fr}\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 v3\footnote{Le logiciel que l'on peut utiliser en ligne \texttt{https://scratch.mit.edu/}} .
\end{titlepage}
\parindent0pt
\section{Avant propos}
La prsente extension intitule \SSCRATCH, est une volution de l'extension \SCRATCH qui imitait la version 2 du logiciel. Depuis janvier~2019, le logiciel est pass la version~3 et l'extension \SCRATCH est donc devenue obsolte et non maintenue.\medbreak
Cette version de \SSCRATCH tant la premire, elle est susceptible d'tre immature, c'est--dire de contenir des bugs, des incohrences ou des effets non dsirs. Si cela se produit, je remercie les utilisateurs de bien vouloir me le faire savoir par email ou \emph{via} le bugtracker de \texttt{gitlab} l'adresse \begin{center}
\texttt{\detokenize{https://framagit.org/unbonpetit/scratch3/issues}}
\end{center}
Les utilisateurs les plus atentifs auront sans oute remarqu que seuls les blocs de type stylo sont disponibles parmi ceux qui sont dornavant considrs comme extension. Il s'agit, pour l'instant, d'un choix dlibr...
\paragraph{Attention} Il est fortement dconseill de charger les packages \SCRATCH et \SSCRATCH en raison de plusieurs dfinitions communes qu'ils partagent et qui conduiraient invitablement des dysfonctionnements. L'erreur qui survient ---~et le refus de charger le deuxime~--- lorsqu'on tente de charger ces deux packages ne doivent pas tre dsactivs par une modification de leurs codes.\medbreak
L'extension \SSCRATCH requiert les extensions \texttt{simplekv} et \texttt{ti\textit kz} qui sont automatiquement charges si cela s'avre ncessaire.\medbreak
Fidle mes convictions, la documentation de cette extension n'est disponible qu'en franais.
\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 trs--la-mode\footnote{Je ne dteste 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 considre que les lves mritent mieux que \SCRATCH --~ADA, java ou lua par exemple~-- comme entre dans le monde de la programmation.} logiciel \SCRATCH , les programmes sont construits avec des briques, appels 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 prdfinis, 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 prs!
\section{Les blocs normaux}
Ces blocs sont les plus courants et possdent une encoche d'emboitement, femelle en haut et mle 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 grce 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} qui est dfinie dans le document au moment o l'environnement est appel : pratiquement, cela signifie que la macro \verb|\sffamily| est excute 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 dfaut le code excut avant que du texte ne soit affich, c'est--dire \verb|\sffamily|. 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, empils 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'vnement}
\blockcontrol{bloc de contrle}
\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 prcdemment puisqu'aucun bloc n'existe pour la fonction oprateurs.
\section{Les ovales}
Les ovales sont, selon le code graphique de \SCRATCH, censs contenir des variables que l'utilisateur spcifie lui-mme (comme des nombres ou du texte) :
\begin{center}
\begin{scratch}
\blockmove{tourner de \turnleft{} de \ovalnum{45} degrs}
\blocklook{penser \ovalnum{Hmm..} pendant \ovalnum{2} secondes}
\end{scratch}
\end{center}
Les variables peuvent tre prdfinies dans \SCRATCH ou cres par l'utilisateur et dans ce cas, les ovales sont de couleur identique la couleur du thme auquel appartient la variable:
\begin{center}
\begin{scratch}
\blocklook{penser \ovalsensing{rponse}}
\blockmove{aller x: \ovaloperator{\ovalmove{ abscisse x} + \ovalnum{1}} y: \ovalmove{ordonne y}}
\end{scratch}
\end{center}
Ces variables peuvent galement tre spcifiques aux blocs concerns, slectionnes parmi plusieurs possibilits, auquel cas l'ovale est de couleur plus sombre que le bloc et se termine avec une flche de slection :
\begin{center}
\begin{scratch}
\blocksound{jouer le son \ovalsound*{Meow}}
\blockcontrol{crer un clone de \ovalcontrol*{moi mme}}
\end{scratch}
\end{center}
Au niveau des macros utilises :
\begin{itemize}
\item la macro \verb|\ovalnum{<nombre>}| dessine un ovale fond blanc;
\item la macro \verb|\oval<suffixe>| trace un ovale de la couleur de \verb|<suffixe>|;
\item en version toile, \verb|\oval<suffixe>*| trace un ovale de couleur plus sombre avec une flche de slection;
\item les macros \verb|\turnleft| et \verb|\turnright| dessinent des flches de rotation dans les blocs \verb|\blockmove|.
\end{itemize}
\exemple/Ovales de toutes sortes : \begin{scratch}
\blockmove{tourner de \turnleft{} de \ovalnum{45} degrs}
\blocklook{penser \ovalnum{Hmm..} pendant \ovalnum{2} secondes}
\blocklook{penser \ovalsensing{rponse}}
\blockmove{aller x: \ovaloperator{\ovalmove{ abscisse x} + \ovalnum{1}} y: \ovalmove{ordonne y}}
\blocksound{jouer le son \ovalsound*{Meow}}
\blockcontrol{crer un clone de \ovalcontrol*{moi mme}}
\end{scratch}/
Toutes les macros de la forme \verb|\oval<suffixe>| sont utilisables \emph{en dehors} de l'environnement \SCRATCH:
\exemple/Voici une variable simple \ovalmove{direction},
une variable slectionne \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 slection. N'ayant pas de sens pour \SCRATCH, une erreur sera mise si une macro toile \verb|\oval<suffixe>*| est utilise, 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{<couleur>}| permet de slectionner la couleur du stylo:
\exemple/\begin{scratch}
\blockpen{stylo en position d'criture}
\blockpen{mettre la couleur du style \pencolor{red!75!black}}
\blockmove{avancer de \ovalnum{25}}
\end{scratch}/
\section{Les blocs de dbut}
Ces blocs sont de la couleur \suffixe{event} pour la plupart (macro \verb|\blockinit|), mais il existe aussi un bloc de dbut de couleur \suffixe{control} (macro \verb|\blockinitclone|). Le drapeau vert est dessin avec la macro \verb|\greenflag|.
\exemple/Voici un dbut :
\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 droulant contenant des valeurs prdfinies est symbolis par un rectangle dont la couleur reprend celle du bloc dans lequel il se trouve. Pour ce faire, la macro \verb|\selectmenu{<texte>}| doit tre excute :
\exemple/\begin{scratch}
\blockinit{Quand je reois \selectmenu{message 1}}
\blocksound{ajouter \ovalnum{10} l'effet \selectmenu{hauteur}}
\blocklook{mettre l'effet \selectmenu{couleur} \ovalnum{0}}
\blockvariable{mettre \selectmenu{ma_variable} \ovalnum{10}}
\end{scratch}/
\section{Les losanges et les blocs de test}
Dans la symbolique graphique de \SCRATCH, les losanges contiennent des valeurs boolennes ayant vocation se retrouver dans un bloc de test. Pour dessiner de tels objets boolens, les macros \verb|\bool<suffixe>{<texte>}| sont utilises o les \verb|<suffixes>| reprsentent les couleurs correspondant la fonction du boolen trac : \suffixe{list}, \suffixe{sensing} ou \suffixe{operator}.
Les blocs de test sont de deux types,selon qu'ils possdent 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} < \ovalnum{7}} alors}
{\blockmove{aller \selectmenu{position alatoire}}
\blocklook{basculer sur costume \selectmenu{costume 4}}
}
\blockmove{aller \selectmenu{pointeur souris}}
\end{scratch}
et
\begin{scratch}
\blockifelse{si \boolsensing{couleur \pencolor{blue!65} touche ?} alors}
{\blockmove{avancer de \ovalnum{2}}
\blocksound{jouer le son \selectmenu{miaou}}
}
{\blockvariable{mettre \ovalvariable{total} \ovaloperator{\ovalvariable{total} + \ovalnum{1}}}
\blocksound{arrter tous les sons}
}
\blockmove{aller \selectmenu{pointeur souris}}
\end{scratch}/
La macros \verb|\pencolor| et celles de la forme \verb|\bool<suffixe>| sont utilisables \emph{en dehors} d'un environnement \SCRATCH :
\exemple/Une couleur : \pencolor{cyan}.\par
Un boolen : \boollist{liste \selectmenu{malist} contient \ovalnum{foobar}}.\par
Un autre : \booloperator{\booloperator{\ovalvariable{varx} > \ovalnum{1}}
et \booloperator{\ovalvariable{varx} < \ovalnum{5}}}./
\section{Les blocs de fin}
Ces blocs sont susceptibles de clore un algorithme et n'ont donc pas d'encoche mle dans leur partie basse. Ils ne peuvent tre que du type \suffixe{control} et sont dessins 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 rptition}
Ces blocs sont de deux types, selon que la rptition est prvue pour s'arrter ou pas (boucle infinie). Ils seront dessins 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 rpter.
\exemple/\begin{scratch}
\blockpen{stylo en position d'criture}
\blockrepeat{rpter \ovalnum{4} fois}
{
\blockmove{avancer de \ovalnum{10}}
\blockmove{tourner \turnright{} de \ovalnum{90} degrs}
}
\end{scratch}
et
\begin{scratch}
\blockpen{stylo en position d'criture}
\blockinfloop{rpter indfiniment}
{
\blockmove{s'orienter \ovaloperator{nombre alatoire entre \ovalnum{0} et \ovalnum{359}}}
\blockmove{avancer de \ovaloperator{nombre alatoire 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 dfinition}
Les procdures , ayant le suffixe \suffixe{moreblocks}, permettent d'tendre les maigres possibilits donnes au programmeur en \SCRATCH.
\exemple/\begin{scratch}
\initmoreblocks{dfinir \namemoreblocks{trace_carr \ovalmoreblocks{cot_carr}}}
\blockrepeat{rpter \ovalnum4 fois}
{\blockmove{avancer de \ovalmoreblocks{cot_carr}}
\blockmove{tourner \turnleft{} de \ovalnum{90} degrs}
}
\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} degrs}
\blockpen{stylo en position d'criture}
\blockrepeat{rpter \ovalnum{10} fois}
{
\blockmoreblocks{trace carr \ovalnum{50}}
\blockmove{avancer de \ovalnum{10}}
\blockmove{tourner \turnleft{} de \ovalnum{36} degrs}
}
\end{scratch}/
\section{Bloc invisible}
Bien que ce genre de bloc n'existe pas avec \SCRATCH, cette fonctionnalit peut s'avrer utile. On insre un espace vide avec \verb|\blockspace[<coeff>]|. L'espace verticale insre est gale la hauteur normale d'un bloc multiplie par le \verb|<coeff>|, valeur optionnelle qui vaut 1 par dfaut.
\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|<paramtres>| peuvent tre rgls par l'utilisateur selon la syntaxe \verb|<cl>=<valeur>|. Cas paramtres peuvent tre spcifis dans :
\begin{itemize}
\item l'argument optionnel de l'environnement \verb|\begin{scratch}[<paramtres>]| auquel cas les \verb|<paramtres>| ne s'appliquent qu' cet environnement;
\item l'argument de la macro \verb|\setscratch{<paramtres>}| pour spcifier des \verb|<paramtres>| pour les environnements \SCRATCH venir;
\item l'argument de \verb|\setdefaultscratch{<paramtres>}| pour spcifier des \verb|<paramtres>| \emph{par dfaut}.
\end{itemize}
Il existe la macro \verb|\resetscratch| qui remet leur valeur par dfaut tous les \verb|<paramtres>| de \SCRATCH, pour annuler les effets d'une macro \verb|\setscratch|.\bigbreak
Voici les \verb|<paramtres>| disponibles :
\cleval{else word}{caractres}
Reprsente est le mot qui est insr dans la branche else d'un bloc de test.
\cleval{pre text}{code}\label{pre text}
C'est le \verb|code| qui est excut avent que du texte ne soit affich par \SSCRATCH.
\cleval{x sep}{dimension}
Reprsente l'espace horizontale insre entre les bords droit et gauche du texte du bloc et les bords droits et gauche du bloc. La valeur est ramene si ncessaire dans l'intervalle [3pt ; 1em].
\cleval{y sepsup}{dimension}
Reprsente l'espace verticale insre entre le bas de l'encoche femelle et le bord suprieur du texte du bloc. La valeur est ramene si ncessaire dans l'intervalle [3pt ; 3ex].
\cleval{y sepinf}{dimension}
Reprsente l'espace verticale insre entre le bas du bloc et le bord infrieur du texte du bloc. La valeur est ramene si ncessaire dans l'intervalle [3pt ; 3ex].
\cleval{line width}{dimension}
Reprsente l'paisseur des lignes de relief des blocs et le double des lignes de relief des losanges boolens. La valeur est ramene si ncessaire dans l'intervalle [0pt ; 5pt].
\cleval{loop width}{dimension}
Reprsente est la largeur de la barre verticale des blocs de rptition ou de test. La valeur est ramene si ncessaire dans l'intervalle [3pt ; 3em].
\cleval{loop height}{dimension}
Reprsente est l'paisseur des barres horizontales else et infrieure des blocs de rptition ou de test. La valeur est ramene si ncessaire dans l'intervalle [3pt ; 3ex].
\cleval{corner}{dimension}
Reprsente la dimension des chanfreins des blocs. La valeur est ramene si ncessaire dans l'intervalle [0.33333ex ; 1ex].
\cleval{notch}{dimension}
Reprsente la largeur des encoches. La valeur est ramene si ncessaire dans l'intervalle [0.33333em ; 3em].
\cleval{scale}{coefficient}\label{cle-scale}
Reprsente l'chelle laquelle est reprsent le dessin. La valeur est ramene si ncessaire dans l'intervalle [0.2 ; 5].
\cleval{init arcangle}{angle}
Reprsente l'angle avec l'horizontale de l'arc de cercle trac dans la partie haute des blocs de dpart. La valeur est ramene si ncessaire dans l'intervalle [20 ; 40].
\cleval{init arclength}{dimension}
Reprsente la longueur horizontale de l'arc de cercle trac dans la partie haute des blocs de dpart. La valeur est ramene si ncessaire dans l'intervalle [3em ; 8em].
\cleval{print}{boolen}
Lorsque ce boolen est vrai, les dessins se font en noir et blanc de faon pouvoir tre dirigs 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} \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} \ovalvariable{abscisse}}
\end{scratch}/
\cleval{fill blocks}{boolen}
Ce boolen n'est pris en compte que lorsque le boolen \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 dfinir une couleur de remplissage des dessins. La valeur est ramene si ncessaire 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} \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} \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} \ovalvariable{abscisse}}
\end{scratch}/
\cleval{contrast}{entier}
Lorsque l'option \verb|print| est vraie, cet entier, compris entre 0 et 100 inclus, qualifie la diffrence de teinte entre les lignes de relief et la teinte de gris de ces blocs, spcifie par la cl \texttt{fill gray}. L'entier 0 slectionne la couleur spcifie par \texttt{fill gray} tandis que 100 trace les lignes en noir. La valeur est ramene si ncessaire dans l'intervalle [0 ; 100].
\cleval{text color}{couleur}
Lorsque \verb|fill blocks| est vrai, cette couleur sera utilise 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 flche se trouvant au bas des blocs de rptition. La valeur est ramene si ncessaire 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} \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} \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 ramene si ncessaire dans l'intervalle [0 ; 1].
\cleval{num blocks}{boolen}
Lorsque ce boolen est vrai, les blocs sont numrots.
\cleval{num sep}{dimension}
Cette cl contient l'espacement entre les numros de blocs et leur frontire gauche. La valeur est ramene si ncessaire dans l'intervalle [0pt ; 1.5em].
\cleval{num start}{entier}
Cette cl contient le premier numro du bloc.
La macro \verb|\numblock| est charge d'imprimer les numros de ligne. Elle admet un argument (le numro de ligne) et permet, lorsqu'elle est redfinie, de personnaliser la numrotation : choix de la couleur, de la police, de sa taille et des effets applicables son argument. Par dfaut, cette macro est dfinie 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 dsactiver la numrotation \emph{pour le dessin en cours} l'aide de
\begin{center}
\verb|\setscratch{num blocks=<boolen>}|
\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} \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} \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} \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 spcifie un numro de bloc existant : la numrotation est cohrente 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 numro choisi.
\end{itemize}
\exemple/Dfaut : \begin{scratch}
\blockinit{Quand \greenflag est cliqu}
\blockpen{effacer tout}
\blocksound{jouer le son \ovalsound*{Meow}}
\blockmove{ajouter \ovalnum{5} \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} \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} \ovalvariable{abscisse}}
\end{scratch}/
\section{Mot de la fin}
Le code de cette extension dmontre mon immense ignorance de ti\textit kz/pgf et les mthodes de programmation qui lui sont propres que, dcidment, 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 dsintrt 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 intrinsque de ti\textit kz.
Toute remarque, remonte de bug ---~je n'ose pas dire amlioration du code~---, demande d'implmentation de fonctionnalit est bien videmment bienvenue; j'invite les utilisateurs m'en faire part \emph{via} email \texttt{unbonpetit@netc.fr}
\section{Historique}
\begin{version}{0.1}{19/02/2019}
>Premire version.
\end{version}
\end{document}
|