]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/fr/learning/tweaks.itely
Merge remote-tracking branch 'origin/translation'
[lilypond.git] / Documentation / fr / learning / tweaks.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
2
3 @ignore
4     Translation of GIT committish: d46572826e777ed3e9fa4656535a6e9000f2ed9e
5
6     When revising a translation, copy the HEAD committish of the
7     version that you are working on.  For details, see the Contributors'
8     Guide, node Updating translation committishes..
9 @end ignore
10
11 @c \version "2.19.2"
12
13 @c Translators: Valentin Villenave, Nicolas Klutchnikoff, Damien Heurtebise
14 @c Translation checkers: Jean-Charles Malahieude, John Mandereau
15 @c Translation status: post-GDP
16
17 @node Retouche de partition
18 @chapter Retouche de partition
19 @translationof Tweaking output
20
21 Ce chapitre indique comment modifier le résultat obtenu.
22 LilyPond offre de nombreuses possibilités de réglages, permettant
23 théoriquement de modifier chaque élément de votre partition.
24
25 @menu
26 * Retouches élémentaires::
27 * Le manuel de référence des propriétés internes::
28 * Apparence des objets::
29 * Positionnement des objets::
30 * Espacement vertical::
31 * Collisions d'objets::
32 * Autres retouches::
33 @end menu
34
35
36 @node Retouches élémentaires
37 @section Retouches élémentaires
38 @translationof Tweaking basics
39
40 @menu
41 * Introduction aux retouches::
42 * Objets et interfaces::
43 * Conventions de nommage des objets et propriétés::
44 * Méthodes de retouche::
45 @end menu
46
47
48 @node Introduction aux retouches
49 @subsection Introduction aux retouches
50 @translationof Introduction to tweaks
51
52 LilyPond regroupe sous le terme de @qq{retouches} (@emph{tweaks} en
53 anglais) les différents moyens dont dispose l'utilisateur pour
54 intervenir sur l'interprétation du fichier d'entrée et pour modifier
55 l'apparence du fichier de sortie.  Certaines retouches sont très
56 simples à mettre en œuvre ; d'autres sont plus complexes.  Mais
57 à elles toutes, elles permettent d'obtenir tout ce qu'on veut en matière
58 de musique imprimée.
59
60 Dans ce chapitre, nous traitons des concepts de base nécessaires
61 pour comprendre l'art de la retouche.  Puis nous présentons de
62 nombreuses commandes déjà prêtes, qu'il suffit de recopier pour
63 obtenir un résultat identique dans vos partitions ; nous en profitons
64 pour expliquer comment ces commandes ont été construites, si bien que
65 vous pouvez apprendre par la même occasion à développer vos propres
66 retouches.
67
68 Avant de vous lancer dans ce chapitre, il peut être utile de revoir la
69 section @ref{Contextes et graveurs}, dans la mesure où les contextes,
70 graveurs et autres propriétés qui y sont décrits, sont indispensables
71 pour comprendre et construire les retouches.
72
73
74 @node Objets et interfaces
75 @subsection Objets et interfaces
76 @translationof Objects and interfaces
77
78 @cindex objet
79 @cindex grob
80 @cindex spanner
81 @cindex extenseur
82 @cindex interface
83 @cindex propriétés des objets
84 @cindex objet, propriétés
85 @cindex objet de rendu
86 @cindex rendu, objets de
87
88 Toute retouche implique que l'on modifie les opérations internes
89 et les structures du programme LilyPond.  Nous allons donc, pour
90 commencer, présenter certains termes qui servent à décrire ces
91 opérations internes et ces structures.
92
93 Le terme @qq{Objet} est un terme générique qui fait référence à
94 une multitude de structures internes mises en place par LilyPond
95 durant la compilation d'un fichier d'entrée.  Ainsi, quand une
96 commande du type @code{\new Staff} apparaît, un nouvel objet du type
97 @code{Staff} est créé.  Cet objet @code{Staff} contient alors toutes les
98 propriétés associées à cette portée, par exemple son nom et son armure,
99 ainsi que le détail des graveurs qui ont été désignés pour fonctionner
100 dans ce contexte de portée.  Certains objets peuvent contenir les
101 propriétés de tous les autres contextes, comme les objets @code{Voice},
102 les objets @code{Score}, les objets @code{Lyrics} ; d'autres se
103 rapportent à tous les éléments de notation, comme les barres de mesure,
104 les liaisons, les nuances, etc.  Chaque objet dispose de son propre
105 échantillon de valeurs pour le réglage des propriétés.
106
107 Certains types d'objet portent des noms spécifiques.  Les objets qui se
108 rapportent à des éléments de notation sur le fichier de sortie, comme
109 les notes, les hampes, les liaisons de phrasé ou de prolongation, les
110 doigtés, les clefs, etc. sont appelés @qq{Objets de rendu} ; ils sont
111 aussi connus sous le nom d'@qq{Objets graphiques} (en anglais :
112 @emph{Graphical objects} ou @emph{Grobs} pour faire court).  Ce sont
113 bien des objets au sens générique ci-dessus et, en tant que tels, ils
114 reçoivent des propriétés qui leur sont associées, comme leur position,
115 leur taille, leur couleur etc.
116
117 Certains objets de rendu, comme les liaisons de phrasé, les soufflets
118 de crescendo, les marques d'octaviation et beaucoup d'autres
119 @emph{grobs}, ont pour particularité de ne pas se situer à un seul et
120 unique endroit -- ils ont un point de départ, un point d'arrivée, et
121 éventuellement d'autres propriétés relatives à leur forme.  Ces objets
122 avec une forme étendue sont appelés des bandeaux (@emph{Spanners} en
123 anglais).
124
125 Il reste à expliquer ce que sont les @qq{interfaces}.  De nombreux
126 objets, qui peuvent être très différents les uns des autres, ont pour
127 point commun de devoir être compilés simultanément.  Par exemple, tous
128 les @emph{grobs} ont une couleur, une taille, une position, etc. et
129 toutes ces propriétés sont compilées simultanément durant
130 l'interprétation du fichier d'entrée par LilyPond.  Pour alléger ces
131 opérations internes, ces actions et propriétés communes sont regroupées
132 en un objet appelé @code{grob-interface}.  Il existe beaucoup d'autres
133 regroupements de propriétés communes dans le genre de celui-ci, chacun
134 portant un nom qui se termine par @code{interface}.  En tout, on en
135 compte plus d'une centaine.  Nous verrons plus loin en quoi c'est
136 intéressant et utile pour l'utilisateur.
137
138 Ainsi s'achève le tour des principaux termes relatifs aux objets
139 que nous serons amenés à utiliser dans ce chapitre.
140
141
142 @node Conventions de nommage des objets et propriétés
143 @subsection Conventions de nommage des objets et propriétés
144 @translationof Naming conventions of objects and properties
145
146 @cindex conventions de nommage des objets
147 @cindex conventions de nommage des propriétés
148 @cindex objets, conventions de nommage
149 @cindex propriétés, conventions de nommage
150
151 Nous avons eu un aperçu, dans @ref{Contextes et graveurs}, de
152 la façon de nommer les objets.  Voici maintenant une liste de
153 référence des types d'objets et de propriétés les plus courants,
154 avec leurs conventions de nommage et quelques exemples
155 de cas concrets.  La lettre @var{A} représente n'importe quel
156 caractère alphabétique majuscule, et les lettres @var{aaa}
157 un nombre indéterminé de caractères alphabétiques minuscules.
158 Les autres caractères sont à prendre tels qu'ils se présentent.
159
160 @multitable @columnfractions .33 .33 .33
161 @headitem Type d'objet/propriété
162   @tab Convention de nommage
163   @tab Exemples
164 @item Contextes
165   @tab Aaaa ou AaaaAaaaAaaa
166   @tab Staff, GrandStaff
167 @item Objets de rendu
168   @tab Aaaa ou AaaaAaaaAaaa
169   @tab Slur, NoteHead
170 @item Graveurs
171   @tab Aaaa_aaa_engraver
172   @tab Clef_engraver, Note_heads_engraver
173 @item Interfaces
174   @tab aaa-aaa-interface
175   @tab grob-interface, break-aligned-interface
176 @item Propriétés de contexte
177   @tab aaa ou aaaAaaaAaaa
178   @tab alignAboveContext, skipBars
179 @item Propriétés d'objet de rendu
180   @tab aaa ou aaa-aaa-aaa
181   @tab direction, beam-thickness
182 @end multitable
183
184 Comme nous le verrons bientôt, les propriétés des différents
185 types d'objet sont modifiées par des commandes différentes, si bien
186 qu'il est bon de savoir reconnaître le type d'un objet ou d'une
187 propriété en fonction de son nom.
188
189
190 @node Méthodes de retouche
191 @subsection Méthodes de retouche
192 @translationof Tweaking methods
193
194 @cindex retouches, méthodologie
195 @cindex méthodes de retouche
196
197 @menu
198 * La commande override::
199 * La commande revert::
200 * Le préfixe once::
201 * La commande overrideProperty::
202 * La commande tweak::
203 @end menu
204
205
206 @node La commande override
207 @unnumberedsubsubsec La commande @code{@bs{}override}
208 @translationof The override command
209
210 @cindex override, commande
211 @cindex override, syntaxe
212
213 @funindex \override
214 @funindex override
215
216 Dans @ref{Modification des propriétés d'un contexte} et dans
217 @ref{Ajout et suppression de graveurs}, nous avons déjà rencontré les
218 commandes @code{\set} et @code{\with}, qui servent à changer les
219 propriétés des @strong{contextes} et à supprimer ou ajouter des
220 @strong{graveurs}.  Voici maintenant d'autres commandes plus
221 importantes.
222
223 La commande pour changer les propriétés des @strong{objets de rendu}
224 est @code{\override}.  Du fait que cette commande modifie en profondeur
225 les propriétés internes de LilyPond, sa syntaxe n'est pas aussi simple
226 que pour les commandes vues précédemment.  Elle a besoin de savoir avec
227 précision quelle est la propriété à modifier, pour quel objet et dans
228 quel  contexte, et quelle doit être sa nouvelle valeur.  Voyons de quoi
229 il retourne.
230
231 La syntaxe générale de cette commande est :
232
233 @example
234 \override @var{Contexte}.@var{ObjetDeRendu}.@var{propriété-rendu} = #@var{valeur}
235 @end example
236
237 @noindent
238 Elle attribue à la propriété appelée @var{propriété-rendu}, associée à
239 l'objet @var{ObjetDeRendu}, appartenant lui-même au contexte
240 @var{Contexte}, une valeur @var{valeur}.
241
242 Le contexte @var{Contexte} peut être omis (c'est généralement
243 le cas) quand il n'y a pas d'ambiguïté et qu'il s'agit d'un contexte
244 de très bas niveau, comme @code{Voice}, @code{ChordNames} ou
245 @code{Lyrics}.  Dans les exemples qui suivent, le contexte sera très
246 souvent omis.  Nous verrons plus tard dans quelles circonstances il doit
247 impérativement être indiqué.
248
249 Les sections ci-dessous traitent largement des propriétés et de leurs
250 valeurs -- voir @ref{Types de propriétés} -- mais, pour illustrer la
251 mise en forme et l'utilisation de ces commandes, nous nous limiterons à
252 n'employer que quelques propriétés et valeurs simples, facilement
253 compréhensibles.
254
255 Lilypond reconnaît comme expression primaire les éléments musicaux
256 tels que les notes, durées et annotations (les @emph{markups}).
257 D'autres expressions de base comme les nombres, chaînes de
258 caractères et listes sont gérées en « mode Scheme », mode appelé
259 en faisant précéder une valeur par un @samp{#}.  Bien que
260 certaines valeurs puissent disposer d'une représentation tout à
261 fait valide dans le mode musical de LilyPond, les exemples de ce
262 manuel mentionnent un@samp{#} pour plus de clarté.  Pour de plus
263 amples informations quant au mode Scheme, consultez
264 @rextend{Syntaxe Scheme dans LilyPond}.
265
266 La commande @code{\override} est la plus fréquemment utilisée pour
267 faire des retouches, et pratiquement tout le reste de ce chapitre
268 aura pour but de montrer, à travers des exemples, comment
269 l'utiliser.  L'exemple ci-dessous change la couleur des têtes de
270 notes :
271
272 @cindex couleur,exemple d'utilisation de la propriété
273 @cindex NoteHead, exemple de dérogation
274
275 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
276 c4 d
277 \override NoteHead.color = #red
278 e4 f |
279 \override NoteHead.color = #green
280 g4 a b c |
281 @end lilypond
282
283
284 @node La commande revert
285 @unnumberedsubsubsec La commande @code{@bs{}revert}
286 @translationof The revert command
287
288 @cindex revert, commande
289
290 @funindex \revert
291 @funindex revert
292
293 Une fois qu'elle a été modifiée, la propriété conserve sa nouvelle
294 valeur jusqu'à ce qu'elle soit à nouveau modifiée ou qu'elle rencontre
295 la commande @code{\revert}.  La commande @code{\revert} obéit à
296 la syntaxe ci-dessous et ramène la valeur de la propriété à sa valeur
297 d'origine.  Attention : dans le cas où plusieurs @code{\override}
298 ont été employés, il ne s'agit pas de la valeur précédente mais bien de
299 la valeur par défaut.
300
301 @example
302 \revert @var{Contexte}.@var{ObjetDeRendu}.@var{propriété-de-rendu}
303 @end example
304
305 Tout comme pour la commande @code{\override}, la mention du
306 @var{Contexte} est souvent facultative.  Elle sera omise dans de
307 nombreux exemples ci-dessous.  Voici un exemple qui ramène la
308 couleur des deux dernières notes à leur valeur par défaut :
309
310 @cindex couleur,exemple d'utilisation de la propriété
311 @cindex NoteHead, exemple de dérogation
312
313 @lilypond[quote,verbatim,relative=1]
314 c4 d
315 \override NoteHead.color = #red
316 e4 f |
317 \override NoteHead.color = #green
318 g4 a
319 \revert NoteHead.color
320 b4 c |
321 @end lilypond
322
323
324 @node Le préfixe once
325 @unnumberedsubsubsec Le préfixe @code{@bs{}once}
326 @translationof The once prefix
327
328 @funindex \once
329 @funindex once
330
331 Les commandes @code{\override} et @code{\set} peuvent supporter
332 toutes les deux le préfixe @code{\once}.  Celui-ci a pour fonction de
333 n'appliquer la commande @code{\override} ou @code{\set} qu'à
334 l'instant musical en cours, avant que la propriété ne reprenne
335 sa valeur antérieure -- qui n'est pas forcément la valeur par défaut
336 lorsqu'un autre @code{\override} est toujours effectif.  Toujours à
337 partir du même exemple, il est possible de ne changer la couleur que
338 d'une seule note :
339
340 @cindex couleur,exemple d'utilisation de la propriété
341 @cindex NoteHead, exemple de dérogation
342
343 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
344 c4 d
345 \override NoteHead.color = #red
346 e4 f |
347 \once \override NoteHead.color = #green
348 g4 a
349 \revert NoteHead.color
350 b c |
351 @end lilypond
352
353 Le préfixe @code{\once} peut s'utiliser avec de nombreuses
354 commandes prédéfinies pour en limiter les effets à un seul instant
355 musical :
356
357 @lilypond[quote,verbatim,relative=1]
358 c4 d
359 \once \stemDown
360 e4 f |
361 g4 a
362 \once \hideNotes
363 b c |
364 @end lilypond
365
366 Les commandes prédéfinies de la forme @code{\@dots{}Neutral},
367 @code{\@dots{}Off} et @code{\un@dots{}} font appel, en interne, à
368 une instruction @code{\revert} plutôt que @code{\override} ; les
369 préfixer d'un @code{\once} est donc sans effet.
370
371
372 @node La commande overrideProperty
373 @unnumberedsubsubsec La commande @code{@bs{}overrideProperty}
374 @translationof The overrideProperty command
375
376 @cindex overrideProperty, commande
377
378 @funindex \overrideProperty
379 @funindex overrideProperty
380
381 Il existe une autre forme de commande @code{\override},
382 @code{\overrideProperty}, qui est parfois utile.  Nous la mentionnons
383 ici par souci d'exhaustivité ; pour le détail, voir
384 @rextend{Retouches complexes}.
385
386 @c Maybe explain in a later iteration  -td
387
388
389 @node La commande tweak
390 @unnumberedsubsubsec La commande @code{@bs{}tweak}
391 @translationof The tweak command
392
393 @cindex tweak, commande
394
395 @funindex \tweak
396 @funindex tweak
397
398 La dernière commande disponible pour les retouches est
399 @code{\tweak}.  Elle sert à changer les propriétés d'objets qui
400 surviennent simultanément dans la musique, comme par exemple les
401 notes d'un accord.  La commande @code{\override} modifierait toutes
402 les notes de l'accord, tandis que @code{\tweak} permet de ne modifier
403 que l'élément immédiatement suivant dans la chaîne de saisie.
404
405 Voici un exemple.  Supposons que nous voulions changer la taille de
406 la tête de note du milieu (le mi) dans un accord de do majeur.  Voyons
407 d'abord ce que donnerait @code{\once \override} :
408
409 @cindex font-size, exemple d'utilisation de la propriété
410 @cindex NoteHead, exemple de dérogation
411
412 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
413 <c e g>4
414 \once \override NoteHead.font-size = #-3
415 <c e g>4
416 <c e g>4
417 @end lilypond
418
419 Nous voyons que @code{\override} modifie @strong{toutes} les têtes
420 de notes de l'accord, car toutes les notes de l'accord surviennent au
421 même @strong{instant musical} et que la fonction de @code{\once}
422 est de faire porter la modification sur tous les objets du type spécifié
423 qui surviennent au même instant musical, comme le fait la commande
424 @code{\override} elle-même.
425
426 La commande @code{\tweak} opère différemment.  Elle agit
427 sur l'élément immédiatement suivant dans la chaîne de saisie.  Dans sa
428 forme la plus simple, elle ne fonctionne que sur les objets créés
429 directement à partir de l'élément suivant dans la chaîne de saisie,
430 c'est-à-dire essentiellement des têtes de notes et des articulations.
431
432 Pour reprendre notre exemple, la taille de la note du milieu d'un
433 accord peut être modifiée de cette manière :
434
435 @cindex font-size, exemple d'utilisation de la propriété
436 @cindex @code{\tweak}, exemple
437
438 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
439 <c e g>4
440 <c \tweak font-size #-3 e g>4
441 @end lilypond
442
443 Vous noterez que la syntaxe de @code{\tweak} est différente de
444 celle de la commande @code{\override}.  Ni le contexte,
445 ni l'objet n'ont besoin d'être spécifiés ; au contraire, cela
446 produirait une erreur si on le faisait.  Tous deux sont sous-entendus
447 par l'élément suivant dans la chaîne de saisie.  Il n'est pareillement
448 pas nécessaire d'insérer un signe égal.  La syntaxe générale
449 de la commande @code{\tweak} est donc, tout simplement :
450
451 @example
452 \tweak @var{propriété-de-rendu} #@var{valeur}
453 @end example
454
455 La commande @code{\tweak} est aussi utilisée quand on veut, dans
456 une série d'articulations, n'en modifier qu'une seule.  Ainsi :
457
458 @cindex couleur, exemple d'utilisation de la propriété
459 @cindex @code{\tweak}, exemple
460
461 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
462 a4^"Black"
463   -\tweak color #red ^"Red"
464   -\tweak color #green _"Green"
465 @end lilypond
466
467 @noindent
468 Attention : la commande @code{\tweak} doit être précédée d'une
469 marque d'articulation, comme si elle-même était une articulation.  Dans
470 la cas de multiples positionnements forcés (@code{^} ou @code{_}), celui
471 le plus à gauche aura préséance puisqu'il sera appliqué en dernier.
472
473 @cindex @code{\tweak} et altération
474 @cindex @code{\tweak} et objet de rendu spécifique
475
476 Les objets tels que hampes et altérations seront créés postérieurement à
477 l'événement qui survient.  L'utilisation de la commande @code{\tweak}
478 sur de tels objets indirectement créés peut se faire en nommant
479 explicitement l'objet de rendu, si tant est que LilyPond puisse remonter
480 jusqu'à l'événement originel :
481
482 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
483 <\tweak Accidental.color #red   cis4
484  \tweak Accidental.color #green es
485                                   g>
486 @end lilypond
487
488 Cette forme développée de la commande @code{\tweak} correspond à :
489 @example
490 \tweak @var{objet-de-rendu}.@var{propriété-de-rendu} @var{valeur}
491 @end example
492
493 @cindex nolets imbriqués
494 @cindex triolets imbriqués
495 @cindex crochet de nolet
496 @cindex nolet, crochet
497 @cindex triolet, crochet
498
499 @funindex TupletBracket
500
501 Quand plusieurs nolets sont imbriqués et commencent au même instant
502 musical, c'est encore la commande @code{\tweak} qui est utilisée pour
503 changer l'apparence de l'un d'entre eux.  Dans l'exemple suivant, le
504 long crochet de nolet et le premier des trois crochets courts commencent
505 au même instant musical ; une commande @code{\override} s'appliquerait
506 donc à la fois aux deux.  En revanche, @code{\tweak} permet de les
507 dissocier.  La première commande @code{\tweak} indique que le long
508 crochet doit être placé au-dessus des notes, et la seconde indique que
509 le coefficient de nolet doit être imprimé en rouge sur le premier
510 crochet de triolet court.
511
512 @cindex @code{\tweak}, exemple
513 @cindex direction, exemple d'utilisation de la propriété
514 @cindex couleur, exemple d'utilisation de la propriété
515
516 @lilypond[quote,ragged-right,verbatim,fragment,relative=2]
517 \tweak direction #up
518 \tuplet 3/4 {
519   \tweak color #red
520   \tuplet 3/2 { c8[ c c] }
521   \tuplet 3/2 { c8[ c c] }
522   \tuplet 3/2 { c8[ c c] }
523 }
524 @end lilypond
525
526 Si les nolets imbriqués ne commencent pas au même moment,
527 leur apparence peut alors être modifiée de la façon habituelle,
528 avec la commande @code{\override} :
529
530 @cindex texte, exemple d'utilisation de la propriété
531 @cindex tuplet-number, exemple de fonction
532 @cindex transparence, exemple d'utilisation de la propriété
533 @cindex TupletNumber, exemple de dérogation
534
535 @lilypond[quote,ragged-right,verbatim,fragment,relative=1]
536 \tuplet 3/2 { c8[ c c] }
537 \once \override TupletNumber.text = #tuplet-number::calc-fraction-text
538 \tuplet 3/2 {
539   c8[ c]
540   c8[ c]
541   \once \override TupletNumber.transparent = ##t
542   \tuplet 3/2 { c8[ c c] }
543   \tuplet 3/2 { c8[ c c] }
544 }
545 @end lilypond
546
547 @seealso
548 Manuel de notation :
549 @ruser{La commande d'affinage (@emph{tweak})}.
550
551
552 @node Le manuel de référence des propriétés internes
553 @section Le manuel de référence des propriétés internes
554 @translationof The Internals Reference manual
555
556 @cindex Références internes
557
558 @menu
559 * Propriétés des objets de rendu::
560 * Propriétés listées par interface::
561 * Types de propriétés::
562 @end menu
563
564
565 @node Propriétés des objets de rendu
566 @subsection Propriétés des objets de rendu
567 @translationof Properties of layout objects
568
569 @cindex propriétés des objets de rendu
570 @cindex propriétés des objets graphiques (grobs)
571 @cindex grobs, propriétés
572 @cindex objets de rendu, propriétés
573 @cindex Manuel des références internes
574
575 Imaginons que votre partition contienne une liaison trop fine à votre
576 goût et que vous vouliez la rendre plus épaisse.  Comment vous y
577 prendre ?  Vous êtes convaincu, avec tout ce qui a été dit sur la
578 souplesse de LilyPond, qu'une telle retouche est réalisable et
579 vous vous dites qu'elle fera sans doute intervenir la commande
580 @code{\override}.  Mais existe-t-il une propriété épaisseur qui
581 s'applique à une liaison et, dans l'affirmative, comment faire pour la
582 modifier ?  C'est là qu'intervient la Référence des propriétés
583 internes.  Elle contient toutes les informations dont vous avez besoin
584 pour construire n'importe quelle commande @code{\override}.
585
586 Avant de nous plonger dans la Référence des propriétés
587 internes, un mot d'avertissement.  Il s'agit d'un document de
588 @strong{références}, de sorte qu'il ne contient pas ou peu
589 d'explications : son but est de présenter les informations de
590 façon précise et concise.  Cela peut paraître décourageant
591 à première vue.  Pas d'inquiétude !  Les conseils et les
592 explications fournis ici vous permettent de retrouver par vous-même les
593 informations dans la Référence des propriétés internes.  Il
594 suffit d'un peu de pratique.
595
596 @cindex override, exemple
597 @cindex dérogation, exemple
598 @cindex Références internes, exemple d'utilisation
599 @cindex @code{\addlyrics} -- exemple
600
601 Prenons un exemple concret tiré d'un morceau de musique connu :
602
603 @c Mozart, Die Zauberflöte Nr.7 Duett
604
605 @lilypond[quote,verbatim,relative=2]
606 {
607   \key es \major
608   \time 6/8
609   {
610     r4 bes8 bes[( g]) g |
611     g8[( es]) es d[( f]) as |
612     as8 g
613   }
614   \addlyrics {
615     The man who | feels love's sweet e -- | mo -- tion
616   }
617 }
618 @end lilypond
619
620 Admettons que nous voulions rendre les traits de liaison plus épais.
621 Est-ce possible ?  Une liaison est assurément un objet de rendu, si
622 bien que la question est @qq{Existe-t-il une propriété attachée aux
623 liaisons et qui en contrôle l'épaisseur ?}  Pour y répondre, nous
624 consultons la Référence des propriétés internes (ou RPI pour faire
625 court).
626
627 Vous trouverez sur le site de LilyPond @uref{http://lilypond.org} la
628 RPI correspondant à votre version du programme.  Allez sur la page
629 Documentation et cliquez sur Référence des propriétés internes.
630 Pour l'apprentissage, mieux vaut utiliser la version HTML standard,
631 et non la @qq{page unique en anglais} ou le PDF.  Durant la lecture
632 des prochains paragraphes, il vous est conseillé de vous y reporter
633 réellement afin que les explications prennent tout leur sens.
634
635 En dessous du bandeau d'en-tête figurent cinq liens.  Cliquez sur le
636 lien vers le @emph{Backend}, où se trouvent les informations sur les
637 objets de rendu.  En dessous du titre @strong{Backend}, choisissez
638 alors le lien vers @emph{Tous les objets de rendu}.  La page qui s'ouvre
639 énumère, dans l'ordre alphabétique, tous les objets utilisés dans votre
640 version de LilyPond.  Cliquez sur Liaisons (@emph{Slurs} en anglais),
641 et les propriétés des liaisons apparaîtront.
642
643 Il existe un autre moyen de trouver cette page, à partir du Manuel de
644 notation.  Une des pages qui traitent des liaisons contient un lien vers
645 la Référence des propriétés internes, qui mène directement à cette
646 page.  Mais lorsque vous connaissez le nom de l'objet à retoucher, le
647 plus simple est de consulter la RPI.
648
649 La page de la RPI sur les liaisons commence par préciser que les objets
650 « Liaison » sont créés par le graveur Slur_engraver.  Vient ensuite la
651 liste des réglages standard ; vous y trouverez la propriété susceptible
652 de contrôler l'épaisseur des traits de liaison.
653
654 @example
655 @code{thickness} (nombre)
656      @code{1.2}
657      Épaisseur de ligne, généralement mesurée en @code{line-thickness}
658 @end example
659
660 Voilà qui semble approprié pour changer l'épaisseur (@emph{thickness} en
661 anglais).  On apprend que la valeur de @code{thickness} est un simple
662 nombre (@emph{number}), qu'elle est par défaut définie à 1,2 et que
663 l'unité de mesure est fixée par une autre propriété appelée
664 @code{line-thickness}.
665
666 Comme il a été indiqué, on ne trouve que peu, voire pas du tout
667 d'explication dans la RPI, mais nous en savons assez pour essayer
668 de changer l'épaisseur de la liaison.  Comme nous l'avons vu, le
669 nom de l'objet est @code{Slur}, le nom de la propriété à changer
670 est @code{thickness} et la nouvelle valeur sera un nombre supérieur
671 à @code{1.2} si l'on veut augmenter l'épaisseur du trait.
672
673 Pour construire la commande @code{\override}, il suffit donc de
674 remplacer les valeurs que nous avons trouvées en guise de noms, en
675 laissant de côté le contexte.  Commençons par une valeur très élevée
676 dans un premier temps, pour nous assurer que la commande fonctionne.
677 Nous obtenons :
678
679 @example
680 \override Slur.thickness = #5.0
681 @end example
682
683 N'oublions pas le @code{#} qui doit précéder la nouvelle valeur.
684
685 La dernière question est : @qq{Où placer cette commande ?}
686 Tant qu'on n'est pas sûr de soi, la meilleure réponse est @qq{À
687 l'intérieur de l'expression musicale, avant la première liaison et
688 proche d'elle.}  Essayons :
689
690 @cindex Slur, exemple de dérogation
691 @cindex thickness, exemple d'utilisation de la propriété
692
693 @lilypond[quote,verbatim,relative=2]
694 {
695   \key es \major
696   \time 6/8
697   {
698     % Increase thickness of all following slurs from 1.2 to 5.0
699     \override Slur.thickness = #5.0
700     r4 bes8 bes[( g]) g |
701     g8[( es]) es d[( f]) as |
702     as8 g
703   }
704   \addlyrics {
705     The man who | feels love's sweet e -- | mo -- tion
706   }
707 }
708 @end lilypond
709
710 @noindent
711 et nous constatons que le trait de liaison est beaucoup plus épais.
712
713 Telle est la façon normale de construire des commandes
714 @code{\override}.  Comme nous aurons l'occasion de le voir
715 par la suite, le problème est parfois plus complexe.  Dans
716 l'immédiat, nous en savons assez pour construire nos propres
717 commandes -- mais il faut encore s'exercer.  Les exemples
718 suivants sont là dans cette intention.
719
720
721 @subsubsubheading Détermination du contexte adéquat
722 @c VO Finding the context
723
724 @cindex contexte, détermination du
725 @cindex contexte, identification correcte du
726
727 Tout d'abord, de quoi avions-nous besoin pour préciser le contexte ?  À
728 quoi devait-il ressembler ?  Gageons que les liaisons appartiennent au
729 contexte Voix, dans la mesure où elles sont étroitement liées à une
730 ligne mélodique, mais comment en être sûr ?  Pour répondre à cette
731 question, revenons en haut de la page de la RPI consacrée aux liaisons ;
732 il est écrit : @qq{Les objets Liaison sont créés par le graveur
733 Slur_engraver}.  Ainsi les liaisons seront créées dans n'importe quel
734 contexte où se trouve le @code{Slur_engraver}.  Suivons le lien vers la
735 page @code{Slur_engraver}.  Tout en bas, on lit que le
736 @code{Slur_engraver} est un élément appartenant à sept contextes Voix,
737 dont le contexte de voix standard, @code{Voice}.  Notre hypothèse était
738 donc juste.  Et parce que @code{Voice} est un contexte de très bas
739 niveau, qu'il est activé sans ambiguïté par le fait que l'on est
740 en train de saisir des notes, on peut ici ne pas le mentionner.
741
742
743 @subsubsubheading Redéfinition pour une seule occurrence
744 @c VO Overriding once only
745
746 @cindex dérogation pour une seule fois
747 @cindex usage unique, dérogation à
748
749 @funindex \once
750 @funindex once
751
752 Dans le dernier exemple ci-dessus, @emph{toutes} les liaisons étaient
753 plus épaisses.  Et si on veut épaissir uniquement la première liaison ?
754 On recourt alors à la commande @code{\once}.  Placée juste avant la
755 commande @code{\override}, elle lui indique de ne changer que la liaison
756 commençant avec la note @strong{juste après}.  Si la note juste après
757 n'ouvre pas une liaison, la commande sera sans aucun effet -- elle ne
758 reste pas en mémoire jusqu'à la prochaine liaison, elle est purement et
759 simplement ignorée.  Il faut donc que la commande introduite par
760 @code{\once} soit insérée comme suit :
761
762 @cindex Slur, exemple de dérogation
763 @cindex thickness, exemple d'utilisation de la propriété
764 @cindex Liaison, exemple de dérogation
765 @cindex Épaisseur, exemple d'utilisation de la propriété
766
767 @lilypond[quote,verbatim,relative=2]
768 {
769   \key es \major
770   \time 6/8
771   {
772     r4 bes8
773     % Increase thickness of immediately following slur only
774     \once \override Slur.thickness = #5.0
775     bes8[( g]) g |
776     g8[( es]) es d[( f]) as |
777     as8 g
778   }
779   \addlyrics {
780     The man who | feels love's sweet e -- | mo -- tion
781   }
782 }
783 @end lilypond
784
785 @noindent
786 Alors seule la première liaison est rendue plus épaisse.
787
788 La commande @code{\once} peut aussi être utilisée devant la commande
789 @code{\set}.
790
791
792 @subsubsubheading Rétablissement
793 @c VO Reverting
794
795 @cindex revert
796 @cindex rétablissement
797 @cindex retour
798 @cindex défaut, retour aux propriétés par
799
800 @funindex \revert
801 @funindex revert
802
803 Et si l'on voulait que les deux premières liaisons soient plus
804 épaisses ?  On pourrait bien sûr utiliser deux commandes, chacune
805 précédée de @code{\once} et placée juste avant la note par laquelle
806 débute la liaison :
807
808 @cindex liaison, exemple de dérogation
809 @cindex thickness, exemple d'utilisation de la propriété
810 @cindex épaisseur, exemple d'utilisation
811
812 @lilypond[quote,verbatim,relative=2]
813 {
814   \key es \major
815   \time 6/8
816   {
817     r4 bes8
818     % Increase thickness of immediately following slur only
819     \once \override Slur.thickness = #5.0
820     bes[( g]) g |
821     % Increase thickness of immediately following slur only
822     \once \override Slur.thickness = #5.0
823     g8[( es]) es d[( f]) as |
824     as8 g
825   }
826   \addlyrics {
827     The man who | feels love's sweet e -- | mo -- tion
828   }
829 }
830 @end lilypond
831
832 @noindent
833 mais on peut aussi, au lieu de la commande @code{\once}, utiliser après
834 la seconde liaison la commande @code{\revert}, qui ramène la propriété
835 @code{thickness} à sa valeur par défaut :
836
837 @cindex Slur, exemple de dérogation
838 @cindex thickness, exemple d'utilisation de la propriété
839 @cindex liaison, exemple de dérogation
840 @cindex épaisseur, exemple d'utilisation
841
842 @lilypond[quote,verbatim,relative=2]
843 {
844   \key es \major
845   \time 6/8
846   {
847     r4 bes8
848     % Increase thickness of all following slurs from 1.2 to 5.0
849     \override Slur.thickness = #5.0
850     bes[( g]) g |
851     g8[( es]) es
852     % Revert thickness of all following slurs to default of 1.2
853     \revert Slur.thickness
854     d8[( f]) as |
855     as8 g
856   }
857   \addlyrics {
858     The man who | feels love's sweet e -- | mo -- tion
859   }
860 }
861 @end lilypond
862
863 @noindent
864 N'importe quelle propriété modifiée par @code{\override} peut ainsi
865 être ramenée, grâce à la commande @code{\revert}, à sa valeur par
866 défaut.
867
868 Ici s'achève notre introduction à la RPI et aux retouches
869 simples.  Vous trouverez d'autres exemples dans les prochaines
870 sections de ce chapitre ; ils vous permettront, d'une part,
871 d'apprendre à connaître un peu mieux la RPI et, d'autre part, de
872 vous entraîner un peu plus à y chercher les informations.  Ces
873 exemples seront progressivement accompagnés d'explications et
874 introduiront des termes nouveaux.
875
876
877 @node Propriétés listées par interface
878 @subsection Propriétés listées par interface
879 @translationof Properties found in interfaces
880
881 @cindex interface
882 @cindex interfaces, propriétés des
883 @cindex propriétés des interfaces
884
885 Supposons maintenant que nous voulions imprimer des paroles en italique.
886 Quelle formulation de la commande @code{\override} allons-nous
887 utiliser ?  Nous consultons en premier lieu, comme précédemment, la
888 page de la RPI qui contient la liste @qq{Tous les objets de rendu}, et
889 recherchons un objet qui contrôle les paroles.  Nous trouvons
890 @code{LyricText}, qui semble approprié.  Nous cliquons dessus et nous
891 voyons apparaître les différentes propriétés des paroles, parmi
892 lesquelles @code{font-series} et @code{font-size}.  Mais aucune ne
893 propose l'italique.  Car la mise en forme des caractères est une
894 propriété commune à tous les objets d'écriture, si bien que, au lieu de
895 figurer dans tous les objets de rendu, elle est regroupée avec d'autres
896 propriétés semblables et placée dans une @strong{Interface}, la
897 @code{font-interface}.
898
899 Il nous faut donc apprendre à trouver les propriétés des interfaces
900 et découvrir les objets qui utilisent les propriétés de ces interfaces.
901
902 Retournons à la page de la RPI qui traite des paroles
903 (@emph{LyricText}).  En bas de la page est dressée sous forme de liens
904 la liste des interfaces qui concernent LyricText.  Cette liste comporte
905 plusieurs entrées, dont @code{font-interface}.  En cliquant dessus, nous
906 voyons apparaître les différentes propriétés associées à cette
907 interface, qui sont en même temps les propriétés de tous les objets qui
908 s'y rapportent, parmi lesquels LyricText.
909
910 Nous avons alors sous les yeux tous les réglages des propriétés qui
911 contrôlent les polices de caractères, et notamment
912 @code{font-shape(symbole)}, où @code{symbole} peut prendre la valeur
913 @code{upright}, @code{italic} ou @code{caps}.
914
915 Vous remarquerez que @code{font-series} et @code{font-size} figurent
916 aussi dans la liste.  La question qui ne manque pas de se poser
917 est : @qq{Comment se fait-il que les propriétés @code{font-series}
918 et @code{font-size} se retrouvent à la fois dans @code{LyricText} et
919 dans l'interface @code{font-interface} alors que ce n'est pas le cas
920 pour @code{font-shape} ?}  La réponse est que lorsqu'un objet
921 @code{LyricText} est créé, les valeurs globales par défaut de
922 @code{font-series} et @code{font-size} sont modifiées, mais pas celles
923 de @code{font-shape}.  Les possibilités de modification dans
924 @code{LyricText} ne concernent donc que les valeurs à appliquer à
925 @code{LyricText}.  Les autres objets qui dépendent de
926 @code{font-interface} fixeront leurs propriétés différemment lorsqu'ils
927 seront créés.
928
929 Voyons maintenant si nous sommes en mesure de formuler la commande
930 @code{\override} pour mettre les paroles en italique.  L'objet est
931 @code{LyricText}, la propriété est @code{font-shape} et la valeur est
932 @code{italic}.  Comme auparavant, nous laissons de côté le contexte.
933
934 Signalons rapidement -- même si cette remarque est importante -- que
935 certaines valeurs de propriétés se présentent sous forme de
936 symboles, comme @code{italic}, et doivent donc être précédées
937 d'une simple apostrophe, Ces symboles seront alors interprétés
938 comme tels par LilyPond.  À ne pas confondre avec les chaînes de
939 caractères libres qui se présentent comme @code{"un texte
940 libre"} ; pour plus de détails sur les symboles et les chaînes de
941 caractères, voir le @rextend{Tutoriel Scheme}.
942
943 Ainsi, la commande @code{\override} pour mettre les paroles en italique
944 est :
945
946 @example
947 \override LyricText.font-shape = #'italic
948 @end example
949
950 @noindent
951 et doit être placée juste devant et tout près des paroles à modifier,
952 comme ceci :
953
954 @cindex font-shape, exemple d'utilisation de la propriété
955 @cindex italic, exemple
956 @cindex LyricText, exemple de dérogation
957 @cindex @code{\addlyrics}, exemple
958
959 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
960 {
961   \key es \major
962   \time 6/8
963   {
964     r4 bes8 bes[( g]) g |
965     g8[( es]) es d[( f]) as |
966     as8 g
967   }
968   \addlyrics {
969     \override LyricText.font-shape = #'italic
970     The man who | feels love's sweet e -- | mo -- tion
971   }
972 }
973 @end lilypond
974
975 @noindent
976 et voilà les paroles en italiques.
977
978 @warning{Dans la saisie des paroles, pensez à toujours laisser une
979 espace entre la dernière syllabe et l'accolade fermante.}
980
981 @seealso
982 Manuel d'extension :
983 @rextend{Tutoriel Scheme}.
984
985
986 @node Types de propriétés
987 @subsection Types de propriétés
988 @translationof Types of properties
989
990 @cindex propriété, types de
991
992 Nous avons vu jusqu'à maintenant deux types de propriétés :
993 @code{nombre} et @code{symbole}.  Pour pouvoir fonctionner, la valeur
994 associée à une propriété doit correspondre au type attendu et suivre les
995 règles liées à ce type.  Le type de propriété est toujours donné entre
996 parenthèses après le nom de propriété dans la RPI.  Voici une liste des
997 différents types de propriétés, avec les règles qui les régissent et
998 quelques exemples d'utilisation.  Il faut, bien sûr, toujours ajouter un
999 symbole @emph{hash} (@code{#}) devant ces valeurs lors de la saisie de
1000 la commande @code{\override}, ce même si cette valeur comporte
1001 déjà un @code{#} en premier caractère.  Les exemples ici présentés
1002 ne sont que de simples illustrations ; l'utilisation de Scheme
1003 pour obtenir des valeurs fait l'objet de la rubrique
1004 @rextend{Scheme et les calculs}.
1005
1006 @multitable @columnfractions .2 .45 .35
1007 @headitem Type de propriété
1008   @tab Règles
1009   @tab Exemples
1010 @item Booléenne (@emph{Boolean} en anglais)
1011   @tab Vrai (@emph{true} en anglais) ou Faux (@emph{false} en anglais),
1012        sous la forme @code{#t} ou @code{#f}
1013   @tab @code{#t}, @code{#f}
1014 @item Dimension (en espaces de portée)
1015   @tab Un nombre décimal (en unités de lignes de portée)
1016   @tab @code{2.5}, @code{0.34}
1017 @item Direction
1018   @tab Une direction valide ou son équivalent numérique (@code{0}
1019   ou @code{CENTER} indiquent une position neutre)
1020   @tab @code{LEFT}, @code{CENTER}, @code{UP}, @code{1}, @w{@code{-1}}
1021 @item Entier (@emph{Integer} en anglais)
1022   @tab Un nombre entier
1023   @tab @code{3}, @code{-1}
1024 @item Liste
1025   @tab Une séquence de constantes ou symboles séparés par une
1026   espace, encadrées par des parenthèses et précédées par une apostrophe
1027   @tab @code{'(left-edge staff-bar)}, @code{'(1)}, @code{'()},
1028        @code{'(1.0 0.25 0.5)}
1029 @item Markup (ou étiquette)
1030   @tab Toute commande @code{\markup} valide
1031   @tab @code{\markup @{ \italic "cresc." @}}, @code{"bagpipe"}
1032 @item Durée (@emph{Moment} en anglais)
1033   @tab Une durée de note construite avec la fonction make-moment
1034   @tab @code{(ly:make-moment 1/4)}, @code{(ly:make-moment 3/8)}
1035 @item Nombre
1036   @tab Une valeur positive ou négative, qui peut être décimale
1037   @tab @code{3}, @w{@code{-2.45}}
1038 @item Paire (de nombres)
1039   @tab Deux nombres séparées par @qq{espace point espace}, encadrés
1040 par des parenthèses et précédés par une apostrophe
1041   @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)}
1042 @item Symbole
1043   @tab L'un des symboles autorisés pour cette propriété, précédé par une
1044   apostrophe
1045   @tab @code{'italic}, @code{'inside}
1046 @item Inconnu (@emph{Unknown} en anglais)
1047   @tab Un processus, ou @code{#f} pour empêcher toute action
1048   @tab @code{bend::print}, @code{ly:text-interface::print}, @code{#f}
1049 @item Vecteur
1050   @tab Des constantes encadrés par @code{#(}@dots{}@code{)}
1051   @tab @code{'#(#t #t #f)}
1052 @end multitable
1053
1054 @seealso
1055 Manuel d'extension :
1056 @rextend{Tutoriel Scheme}.
1057
1058
1059 @node Apparence des objets
1060 @section Apparence des objets
1061 @translationof Appearance of objects
1062
1063 Il est temps de mettre en pratique les notions apprises précédemment
1064 pour modifier l'allure de la partition ; les exemples qui suivent
1065 montrent l'utilisation des différentes méthodes de retouche.
1066
1067 @menu
1068 * Visibilité et couleur des objets::
1069 * Taille des objets::
1070 * Longueur et épaisseur des objets::
1071 @end menu
1072
1073
1074 @node Visibilité et couleur des objets
1075 @subsection Visibilité et couleur des objets
1076 @translationof Visibility and color of objects
1077
1078 Dans un but pédagogique, on peut être amené à masquer certains éléments
1079 d'une partition, que les élèves doivent ensuite compléter.  Imaginons,
1080 par exemple, un exercice dans lequel il faudrait rétablir les barres de
1081 mesure dans un morceau de musique.  En temps normal, les barres de
1082 mesure s'insèrent automatiquement.  Comment faire pour les effacer de la
1083 partition ?
1084
1085 Avant de nous y attaquer, souvenons-nous que les propriétés d'objets
1086 sont parfois groupées dans ce qu'on appelle des @emph{interfaces} --
1087 voir @ref{Propriétés listées par interface}.  Cela permet de rapprocher
1088 toutes les propriétés susceptibles d'être utilisées ensemble pour
1089 modifier un objet graphique -- si l'une d'elles est choisie pour un
1090 objet, elle s'appliquera à tous les autres.  Certains objets tirent
1091 alors leurs propriétés de telle ou telle interface, d'autres objets de
1092 telle ou telle autre interface.  La liste des interfaces qui contiennent
1093 les propriétés liées à un objet graphique (@emph{grob}) figure dans la
1094 RPI, en bas de la page de description du @emph{grob} ; pour voir
1095 ces propriétés, il faut aller voir ces interfaces.
1096
1097 Nous avons vu, dans @ref{Propriétés des objets de rendu}, comment
1098 trouver les informations sur les @emph{grobs}.  Nous procédons de la
1099 même manière et consultons la RPI pour connaître l'objet chargé
1100 d'imprimer les barres de mesure.  En cliquant sur @emph{Backend} puis
1101 sur @emph{Tous les objets de rendu}, nous trouvons un objet appelé
1102 @code{BarLine}.  Parmi ses propriétés, deux d'entre elles déterminent
1103 son aspect visuel : @code{break-visibility} et @code{stencil}.
1104 L'objet @code{BarLine} est également lié à plusieurs interfaces, dont la
1105 @code{grob-interface} où figurent les propriétés @code{transparent} et
1106 @code{color}.  Toutes peuvent modifier l'aspect visuel des barres de
1107 mesure -- et de beaucoup d'autres objets, bien sûr.  Examinons chacune
1108 d'elles tour à tour.
1109
1110 @menu
1111 * La propriété stencil::
1112 * La propriété break-visibility::
1113 * La propriété transparent::
1114 * La propriété color::
1115 @end menu
1116
1117
1118 @node La propriété stencil
1119 @unnumberedsubsubsec La propriété @code{stencil}
1120 @translationof The stencil property
1121
1122 @cindex stencil, propriété
1123
1124 Cette propriété contrôle l'apparence des barres de mesure en précisant
1125 le type de symbole (glyphe) à imprimer.  Comme pour de nombreuses
1126 autres propriétés, on peut lui indiquer de ne rien imprimer en lui
1127 attribuant la valeur @code{#f}.  Essayons en laissant de côté, une fois
1128 encore, le contexte concerné (@code{Voice} en l'occurrence) :
1129
1130 @cindex BarLine, exemple de dérogation
1131 @cindex stencil, exemple d'utilisation de la propriété
1132
1133 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1134 {
1135   \time 12/16
1136   \override BarLine.stencil = ##f
1137   c4 b8 c d16 c d8 |
1138   g,8 a16 b8 c d4 e16 |
1139   e8
1140 }
1141 @end lilypond
1142
1143 Les barres de mesure sont encore là !  Pourquoi ?  Retournons
1144 à la RPI et regardons de nouveau la page qui traite des propriétés de
1145 @code{BarLine}.  En haut de la page, il est précisé que @qq{Les objets
1146 BarLine sont créés par le graveur Bar_engraver}.  Allons à la page de
1147 @code{Bar_engraver}.  Tout en bas se trouve la liste des contextes dans
1148 lesquels fonctionne ce graveur.  Tous sont du type @code{Staff}, de
1149 sorte que, si la commande @code{\override} n'a pas fonctionné comme
1150 prévu, c'est parce que @code{Barline} n'appartient pas au contexte par
1151 défaut, @code{Voice}.  Si le contexte spécifié est erroné, la commande
1152 ne fonctionne pas.  Cela n'entraîne pas de message d'erreur, et rien
1153 n'apparaît dans le fichier @emph{log}.  Essayons de corriger en
1154 mentionnant le bon contexte :
1155
1156 @cindex BarLine, exemple de dérogation
1157 @cindex stencil, exemple d'utilisation de la propriété
1158
1159 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1160 {
1161   \time 12/16
1162   \override Staff.BarLine.stencil = ##f
1163   c4 b8 c d16 c d8 |
1164   g,8 a16 b8 c d4 e16 |
1165   e8
1166 }
1167 @end lilypond
1168
1169 Cette fois, les barres de mesure ont disparu.  Désactiver la
1170 propriété @code{stencil} est une opération tellement fréquente que
1171 LilyPond dispose d'un raccourci -- @code{\omit} (pour « oublier »)
1172 -- à cet effet :
1173
1174 @funindex \omit
1175
1176 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1177 {
1178   \time 12/16
1179   \omit Staff.BarLine
1180   c4 b8 c d16 c d8 |
1181   g,8 a16 b8 c d4 e16 |
1182   e8
1183 }
1184 @end lilypond
1185
1186 Vous remarquerez que l'affectation de la valeur @code{#f} à la propriété
1187 @code{stencil} déclenchera une erreur dès lors que l'objet en question se
1188 doit d'avoir des dimensions pour les nécessités du traitement.  Ce sera
1189 le cas, par exemple, si vous effacez le @code{stencil} d'un objet
1190 @code{NoteHead}.  Il vaut mieux, en pareil cas, utiliser la fonction
1191 @code{point-stencil} qui, quant à elle, attribue à l'objet une taille à
1192 zéro :
1193
1194 @lilypond[quote,verbatim,relative=2]
1195 {
1196   c4 c
1197   \once \override NoteHead.stencil = #point-stencil
1198   c4 c
1199 }
1200 @end lilypond
1201
1202
1203 @node La propriété break-visibility
1204 @unnumberedsubsubsec La propriété @code{break-visibility}
1205 @translationof The break-visibility property
1206
1207 @cindex break-visibility, propriété
1208
1209 La RPI mentionne, à la page sur @code{BarLine}, que la propriété
1210 @code{break-visibility} attend comme argument un vecteur de trois
1211 booléens.  Ceux-ci indiquent respectivement si les barres de mesure
1212 doivent être imprimées ou non à la fin de la ligne, à l'intérieur de la
1213 ligne et au début de la ligne.  Dans notre cas, nous voulons que toutes
1214 les barres soient supprimées, si bien que la valeur dont nous avons
1215 besoin est @code{#(#f #f #f)}.  Essayons, sans oublier d'ajouter le
1216 contexte @code{Staff}.  Vous remarquerez que, en plus de cette valeur,
1217 nous ajoutons @code{##} devant la parenthèse ouvrante.  Un second
1218 @code{#} est nécessaire car il fait partie intégrante de la valeur
1219 contenant un vecteur, et le premier @code{#} est là, comme
1220 toujours avec la commande @code{\override}, pour introduire la
1221 valeur elle-même.
1222
1223 @cindex BarLine, exemple de dérogation
1224 @cindex break-visibility exemple d'utilisation de la propriété
1225
1226 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1227 {
1228   \time 12/16
1229   \override Staff.BarLine.break-visibility = #'#(#f #f #f)
1230   c4 b8 c d16 c d8 |
1231   g,8 a16 b8 c d4 e16 |
1232   e8
1233 }
1234 @end lilypond
1235
1236 Comme on peut le constater, cette solution-là aussi supprime les barres
1237 de mesure.
1238
1239
1240 @node La propriété transparent
1241 @unnumberedsubsubsec La propriété @code{transparent}
1242 @translationof The transparent property
1243
1244 @cindex transparent, propriété
1245 @cindex transparence
1246
1247 La RPI mentionne, à la page sur @code{grob-interface}, que la propriété
1248 @code{transparent} attend comme argument un booléen.  Il faudrait donc
1249 mettre @code{#t} pour rendre l'objet transparent.  Dans cet exemple,
1250 essayons de rendre transparente la métrique (@emph{time signature} en
1251 anglais) plutôt que les barres de mesure.  Pour cela, il nous faut
1252 trouver le nom du @emph{grob} chargé de l'indication de mesure.  De
1253 retour sur la page @qq{Tous les objets de rendu} de la RPI, nous
1254 cherchons les propriétés de l'objet @code{TimeSignature}.  Celui-ci est
1255 géré par le graveur @code{Time_signature_engraver} qui, comme vous
1256 pouvez le constater, appartient au contexte @code{Staff} et peut se
1257 rattacher à la @code{grob-interface}.  Dans ces conditions, la commande
1258 pour rendre la métrique transparente est :
1259
1260 @cindex TimeSignature, exemple de dérogation
1261 @cindex transparent, exemple d'utilisation de la propriété
1262
1263 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1264 {
1265   \time 12/16
1266   \override Staff.TimeSignature.transparent = ##t
1267   c4 b8 c d16 c d8 |
1268   g,8 a16 b8 c d4 e16 |
1269   e8
1270 }
1271 @end lilypond
1272
1273 @noindent
1274 L'utilisation de la propriété @code{transparent} étant
1275 relativement fréquent, LilyPond dispose d'un raccourci à cet
1276 effet : @code{\hide} (pour « masquer ».
1277
1278 @funindex \hide
1279
1280 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1281 {
1282   \time 12/16
1283   \hide Staff.TimeSignature
1284   c4 b8 c d16 c d8 |
1285   g,8 a16 b8 c d4 e16 |
1286   e8
1287 }
1288 @end lilypond
1289
1290 @noindent
1291 La métrique a bien disparu dans les deux cas, mais la commande a
1292 laissé un blanc en lieu et place du chiffrage.  Ce peut être
1293 souhaitable dans le cadre d'un exercice, afin que les élèves aient
1294 la place pour compléter, mais dans d'autres circonstances, ce peut
1295 être gênant.  Pour y remédier, attribuons plutôt au stencil des
1296 métriques la valeur @code{#f} :
1297
1298 @cindex TimeSignature, exemple de dérogation
1299 @cindex stencil, exemple d'utilisation de la propriété
1300
1301 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1302 {
1303   \time 12/16
1304   \override Staff.TimeSignature.stencil = ##f
1305   c4 b8 c d16 c d8 |
1306   g,8 a16 b8 c d4 e16 |
1307   e8
1308 }
1309 @end lilypond
1310
1311 @noindent
1312 La différence est flagrante : le fait d'attribuer au stencil la
1313 valeur @code{#f} ou grâce à @code{\omit} supprime totalement
1314 l'objet, tandis que le fait de le rendre @code{transparent} -- ce
1315 qui s'obtient aussi par la commande @code{\hide} -- le laisse en
1316 place, mais de façon invisible.
1317
1318
1319 @node La propriété color
1320 @unnumberedsubsubsec La propriété @code{color}
1321 @translationof The color property
1322
1323 @cindex color, propriété
1324
1325 Essayons enfin de rendre les barres de mesure invisibles en les colorant
1326 en blanc.  La difficulté est de savoir si les barres blanches vont
1327 couper ou non les lignes de la portée aux endroits où elles se
1328 croisent.  Vous verrez dans les exemples ci-dessous que cela peut se
1329 produire, sans qu'on le sache à l'avance.  Les explications de ce
1330 phénomène et les solutions pour y remédier sont exposées dans
1331 @ruser{Blanchiment des objets}.  Pour le moment, acceptons cet
1332 inconvénient et concentrons-nous sur l'apprentissage de la gestion des
1333 couleurs.
1334
1335 La @code{grob-interface} indique que la valeur de la propriété
1336 @code{color} est une liste, sans plus d'explication.  En fait, cette
1337 liste est une liste de valeurs en unités internes ; pour éviter
1338 d'avoir à chercher ce qu'il faut y mettre, il existe différents moyens
1339 d'indiquer la couleur.  Le premier moyen consiste à utiliser l'une des
1340 couleurs @emph{normales} de la première @ruser{Liste des couleurs}.
1341 Pour mettre les barres de mesure en blanc, on écrit :
1342
1343 @cindex BarLine, exemple de dérogation
1344 @cindex color, exemple d'utilisation de la propriété
1345
1346 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1347 {
1348   \time 12/16
1349   \override Staff.BarLine.color = #white
1350   c4 b8 c d16 c d8 |
1351   g,8 a16 b8 c d4 e16 |
1352   e8
1353 }
1354 @end lilypond
1355
1356 @noindent
1357 et nous constatons que les barres de mesure sont une fois de plus
1358 invisibles.  Attention : aucune apostrophe ne précède @code{white}
1359 -- il ne s'agit pas d'un symbole mais d'une @strong{variable}.
1360 Quand on l'invoque, elle fournit une liste de valeurs internes
1361 requises pour changer la couleur en blanc.  Les autres couleurs
1362 aussi, dans la @qq{liste normale}, sont des variables.  Pour en
1363 être certain, vous pouvez faire l'essai en choisissant une autre
1364 variable de la liste en guise de couleur.
1365
1366 @cindex couleur X11
1367 @cindex X11, couleurs
1368
1369 @funindex x11-color
1370
1371 Le deuxième moyen de changer la couleur consiste à utiliser la deuxième
1372 @ruser{Liste des couleurs}, dite noms de couleurs X11.  Ceux-ci doivent
1373 obligatoirement être précédés d'une fonction, @code{x11-color},
1374 qui convertit les noms symboliques de couleur X11 en une liste de
1375 valeurs internes comme ceci :
1376
1377 @cindex BarLine, exemple de dérogation
1378 @cindex color, exemple d'utilisation de la propriété
1379
1380 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1381 {
1382   \time 12/16
1383   \override Staff.BarLine.color = #(x11-color 'white)
1384   c4 b8 c d16 c d8 |
1385   g,8 a16 b8 c d4 e16 |
1386   e8
1387 }
1388 @end lilypond
1389
1390 @noindent
1391 Vous noterez que, dans ce cas, la fonction @code{x11-color} admet un
1392 symbole comme argument ; il faut donc placer une apostrophe devant
1393 le symbole de telle sorte qu'il ne soit pas interprété comme une
1394 variable, et insérer l'appel à la fonction à l'intérieur de
1395 parenthèses.
1396
1397 @cindex rgb, couleur
1398 @cindex couleurs rgb
1399
1400 @funindex rgb-color
1401
1402 Il existe une autre fonction, chargée elle de convertir les
1403 valeurs RVB en couleurs internes -- la fonction @code{rgb-color}.
1404 Elle comporte trois arguments, donnant respectivement l'intensité
1405 du rouge, du vert et du bleu.  Ces arguments prennent des valeurs
1406 comprises entre 0 et 1.  Ainsi, pour choisir la couleur rouge, la
1407 valeur serait @code{(rgb-color 1 0 0)} ; pour le blanc, ce serait
1408 @code{(rgb-color 1 1 1)} :
1409
1410 @cindex BarLine, exemple de dérogation
1411 @cindex color, exemple d'utilisation de la propriété
1412
1413 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1414 {
1415   \time 12/16
1416   \override Staff.BarLine.color = #(rgb-color 1 1 1)
1417   c4 b8 c d16 c d8 |
1418   g,8 a16 b8 c d4 e16 |
1419   e8
1420 }
1421 @end lilypond
1422
1423 Enfin, il existe une échelle de gris parmi les possibilités de couleurs
1424 X11.  Elle va du noir (@code{'grey0}) au blanc (@code{'grey100}), avec
1425 un pas de 1.  Essayons de l'utiliser en attribuant à tous les objets de
1426 notre exemple différentes nuances de gris :
1427
1428 @cindex StaffSymbol, exemple de dérogation
1429 @cindex TimeSignature, exemple de dérogation
1430 @cindex Clef, exemple de dérogation
1431 @cindex NoteHead, exemple de dérogation
1432 @cindex Stem, exemple de dérogation
1433 @cindex BarLine, exemple de dérogation
1434 @cindex color, exemple d'utilisation de la propriété
1435 @cindex x11-color, exemple d'utilisation
1436
1437 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1438 {
1439   \time 12/16
1440   \override Staff.StaffSymbol.color = #(x11-color 'grey30)
1441   \override Staff.TimeSignature.color = #(x11-color 'grey60)
1442   \override Staff.Clef.color = #(x11-color 'grey60)
1443   \override Voice.NoteHead.color = #(x11-color 'grey85)
1444   \override Voice.Stem.color = #(x11-color 'grey85)
1445   \override Staff.BarLine.color = #(x11-color 'grey10)
1446   c4 b8 c d16 c d8 |
1447   g,8 a16 b8 c d4 e16 |
1448   e8
1449 }
1450 @end lilypond
1451
1452 @noindent
1453 Vous remarquerez le contexte associé à chacun des objets.  Une erreur
1454 sur ce point empêcherait la commande de fonctionner.  Souvenez-vous que
1455 le contexte est celui dans lequel est placé le graveur approprié.  Pour
1456 chaque graveur, on peut trouver son contexte par défaut en partant de
1457 l'objet lui-même, puis en cherchant le graveur qui le produit ; la
1458 page du graveur dans la RPI nous indique alors le contexte dans lequel
1459 le graveur se trouve normalement.
1460
1461
1462 @node Taille des objets
1463 @subsection Taille des objets
1464 @translationof Size of objects
1465
1466 @cindex modification de la taille des objets
1467 @cindex taille d'objets
1468 @cindex objets, taille
1469 @cindex objets, modification de taille
1470
1471 Pour commencer, reprenons l'exemple qui se trouvait dans
1472 @ref{Expressions musicales imbriquées}, qui montrait comment créer une
1473 nouvelle portée temporaire, du type @rglos{ossia}.
1474
1475 @cindex alignAboveContext, exemple d'utilisation de la propriété
1476 @cindex @code{\with}, exemple
1477
1478 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1479 \new Staff ="main" {
1480   \relative g' {
1481     r4 g8 g c4 c8 d |
1482     e4 r8
1483     <<
1484       { f8 c c }
1485       \new Staff \with {
1486         alignAboveContext = #"main" }
1487       { f8 f c }
1488     >>
1489     r4 |
1490   }
1491 }
1492 @end lilypond
1493
1494 Normalement, les ossias ne comportent ni clef ni indication de mesure,
1495 et elles sont imprimées légèrement plus petit que la portée principale.
1496 Nous avons déjà appris à enlever la clef et la métrique -- il suffit de
1497 régler le stencil de chacun sur @code{#f}, comme ceci :
1498
1499 @cindex alignAboveContext, exemple d'utilisation de la propriété
1500 @cindex @code{\with}, exemple
1501 @cindex Clef, exemple de dérogation
1502 @cindex TimeSignature, exemple de dérogation
1503 @funindex \omit
1504
1505 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1506 \new Staff ="main" {
1507   \relative g' {
1508     r4 g8 g c4 c8 d |
1509     e4 r8
1510     <<
1511       { f8 c c }
1512       \new Staff \with {
1513         alignAboveContext = #"main"
1514       }
1515       {
1516         \omit Staff.Clef
1517         \omit Staff.TimeSignature
1518         { f8 f c }
1519       }
1520     >>
1521     r4 |
1522   }
1523 }
1524 @end lilypond
1525
1526 @noindent
1527 La paire d'accolades ajoutée après la clause @code{\with} est nécessaire
1528 pour être sûr que les retouches (@code{\override}) ainsi que la musique
1529 qui se trouvent à l'intérieur soient bien appliquées à la portée
1530 d'ossia.
1531
1532 Mais alors, quelle différence y a-t-il à modifier le contexte de portée
1533 au moyen de @code{\with} ou à modifier les stencils de la clef et de la
1534 métrique  avec @code{\override} ou @code{\omit} comme ici ?  La
1535 principale différence est que les changements opérés dans une
1536 clause @code{\with} sont réalisés au moment où le contexte est
1537 créé et restent par la suite les valeurs @strong{par défaut} aussi
1538 longtemps que ce contexte existe, tandis que les commandes
1539 @code{\set} ou @code{\override} insérées dans la musique sont
1540 dynamiques -- elles provoquent des changements synchronisés avec
1541 un point particulier de la musique.  Si les changements sont annulés ou
1542 dés activés par @code{\unset} ou @code{\revert}, les réglages reprennent
1543 leurs valeurs par défaut, c'est-à-dire celles qui ont été fixées dans la
1544 clause @code{\with}, ou, en l'absence de celle-ci, les valeurs par
1545 défaut normales.
1546
1547 Certaines propriétés de contexte ne peuvent être modifiées que dans une
1548 clause @code{\with}.  Il s'agit des propriétés qu'on ne peut évidemment
1549 plus changer après que le contexte a été créé.  C'est le cas de
1550 @code{alignAboveContext} et de son pendant, @code{alignBelowContext}
1551 -- une fois que la portée a été créée, son alignement est décidé et cela
1552 n'aurait aucun sens de vouloir le modifier par la suite.
1553
1554 Dans une clause @code{\with}, on peut aussi régler les valeurs par
1555 défaut des propriétés d'un objet.  Il suffit d'utiliser la commande
1556 @code{\override} normale, sans s'occuper du nom de contexte
1557 puisqu'il ne fait pas de doute qu'il s'agit du contexte en cours de
1558 modification par la clause @code{\with}.  Il se produirait même une
1559 erreur si le contexte était précisé.
1560
1561 Remplaçons donc l'exemple ci-dessus par celui-ci :
1562
1563 @cindex alignAboveContext, exemple d'utilisation de la propriété
1564 @cindex @code{\with}, exemple
1565 @cindex Clef, exemple de dérogation
1566 @cindex TimeSignature, exemple de dérogation
1567
1568 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1569 \new Staff ="main" {
1570   \relative g' {
1571     r4 g8 g c4 c8 d |
1572     e4 r8
1573     <<
1574       { f8 c c }
1575       \new Staff \with {
1576         alignAboveContext = #"main"
1577         % Don't print clefs in this staff
1578         \override Clef.stencil = ##f
1579         % Don't print time signatures in this staff
1580         \override TimeSignature.stencil = ##f
1581       }
1582       { f8 f c }
1583     >>
1584     r4 |
1585   }
1586 }
1587 @end lilypond
1588
1589 Nous pourrions tout aussi bien utiliser les raccourcis
1590 @code{\hide} et @code{\omit} pour activer la propriété
1591 @code{transparent} et désactiver le @code{stencil}, ce qui
1592 donnerait :
1593
1594 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1595 \new Staff ="main" {
1596   \relative g' {
1597     r4 g8 g c4 c8 d |
1598     e4 r8
1599     <<
1600       { f8 c c }
1601       \new Staff \with {
1602         alignAboveContext = #"main"
1603         % Don't print clefs in this staff
1604         \omit Clef
1605         % Don't print time signatures in this staff
1606         \omit TimeSignature
1607       }
1608       { f8 f c }
1609     >>
1610     r4 |
1611   }
1612 }
1613 @end lilypond
1614
1615 Venons-en finalement au changement de taille des objets.
1616
1617 Certains objets sont créés comme des glyphes choisis dans une police de
1618 caractères.  C'est le cas des têtes de notes, des altérations, des
1619 @emph{markup}, des clefs, des métriques, des nuances et des paroles.
1620 Pour changer leur taille, on modifie la propriété @code{font-size},
1621 comme nous le verrons rapidement.  D'autres objets, comme les liaisons
1622 de phrasé ou de prolongation -- en général les objets étendus -- sont
1623 dessinés à la demande, si bien qu'aucune @code{font-size} ne leur est
1624 associée.  Ces objets tirent généralement leur dimension des objets
1625 auxquels ils sont rattachés, de sorte qu'on ne doit pas avoir à les
1626 redimensionner à la main.  D'autres propriétés, comme la hauteur des
1627 hampes et des barres de mesure, l'épaisseur des ligatures et d'autres
1628 lignes, et l'écartement des lignes de portée, doivent encore être
1629 modifiées de façon particulière.
1630
1631 Si l'on revient à l'exemple d'ossia, commençons par changer la taille de
1632 police.  Nous pouvons employer deux méthodes.  Soit nous changeons la
1633 taille de police de chaque type d'objet avec des commandes comme
1634 celle-ci pour les têtes de notes (@code{NoteHead}) :
1635
1636 @example
1637 \override NoteHead.font-size = #-2
1638 @end example
1639
1640 soit nous changeons la taille de toutes les polices à la fois grâce à la
1641 propriété @code{fontSize}, en utilisant @code{\set} ou en l'insérant
1642 dans une clause @code{\with} (mais alors sans le @code{\set}).
1643
1644 @example
1645 \set fontSize = #-2
1646 @end example
1647
1648 Chacune de ces méthodes réduira la taille de police de deux points par
1649 rapport à sa valeur précédente, sachant que chaque point réduit ou
1650 augmente la taille d'environ 12 %.
1651
1652 Essayons sur l'exemple d'ossia :
1653
1654 @cindex alignAboveContext, exemple d'utilisation de la propriété
1655 @cindex @code{\with}, exemple
1656 @cindex Clef, exemple de dérogation
1657 @cindex TimeSignature, exemple de dérogation
1658 @cindex fontSize, exemple d'utilisation de la propriété
1659
1660 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1661 \new Staff ="main" {
1662   \relative g' {
1663     r4 g8 g c4 c8 d |
1664     e4 r8
1665     <<
1666       { f8 c c }
1667       \new Staff \with {
1668         alignAboveContext = #"main"
1669         \omit Clef
1670         \omit TimeSignature
1671         % Reduce all font sizes by ~24%
1672         fontSize = #-2
1673       }
1674       { f8 f c }
1675     >>
1676     r4 |
1677   }
1678 }
1679 @end lilypond
1680
1681 Ce n'est pas encore parfait.  Les têtes de notes et les crochets sont
1682 plus petits mais, proportionnellement, les hampes sont trop longues et
1683 les lignes de la portée trop espacées.  Il faut donc les réduire dans
1684 les mêmes proportions que les polices de caractères.  La prochaine
1685 sous-section montrera comment faire.
1686
1687
1688 @node Longueur et épaisseur des objets
1689 @subsection Longueur et épaisseur des objets
1690 @translationof Length and thickness of objects
1691
1692 @cindex distance
1693 @cindex épaisseur
1694 @cindex longueur
1695 @cindex magstep
1696 @cindex taille, modification
1697 @cindex hampe, modification de longueur
1698 @cindex écartement des lignes, modification
1699
1700 Dans LilyPond, les écartements et longueurs sont généralement mesurés en
1701 @qq{intervalles de lignes} (@emph{staff-spaces} en anglais),
1702 c'est-à-dire l'écartement qui sépare deux lignes adjacentes dans la
1703 portée -- plus rarement, il est question de demi-intervalles de lignes.
1704 Les propriétés d'épaisseur (@code{thickness}), quant à elles, sont
1705 généralement mesurées en unités d'une propriété interne appelée
1706 @qq{épaisseur de ligne} (@code{line-thickness}).  Par exemple, les
1707 lignes de (de)crescendo présentent par défaut une épaisseur d'une
1708 unité de @code{line-thickness}, alors que l'épaisseur d'une hampe
1709 est de 1,3.  Toutefois, certaines propriétés d'épaisseur sont
1710 différentes : par exemple, l'épaisseur des ligature --
1711 @code{beam-thickness} -- se mesure en espaces de portée.
1712
1713 Dans ces conditions, comment ajuster les longueurs à la taille des
1714 polices de caractères ?  La solution consiste à utiliser une
1715 fonction spéciale appelée @code{magstep} -- pseudo facteur de zoom --,
1716 créée précisément dans ce but.  Elle comporte un argument, le changement
1717 de taille de police (@code{#-2} dans l'exemple précédent), à partir
1718 duquel elle applique un facteur de mise à l'échelle qui réduit, ou
1719 augmente, les objets en question.  Voici comment elle s'utilise :
1720
1721 @cindex alignAboveContext, exemple d'utilisation de la propriété
1722 @cindex @code{\with}, exemple
1723 @cindex Clef, exemple de dérogation
1724 @cindex TimeSignature, exemple de dérogation
1725 @cindex fontSize , exemple d'utilisation de la propriété
1726 @cindex StaffSymbol, exemple de dérogation
1727 @cindex magstep, exemple d'utilisation de la fonction
1728 @cindex staff-space, exemple d'utilisation de la propriété
1729 @cindex stencil, exemple d'utilisation de la propriété
1730
1731 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1732 \new Staff ="main" {
1733   \relative g' {
1734     r4 g8 g c4 c8 d |
1735     e4 r8
1736     <<
1737       { f8 c c }
1738       \new Staff \with {
1739         alignAboveContext = #"main"
1740         \omit Clef
1741         \omit TimeSignature
1742         fontSize = #-2
1743         % Reduce stem length and line spacing to match
1744         \override StaffSymbol.staff-space = #(magstep -2)
1745       }
1746       { f8 f c }
1747     >>
1748     r4 |
1749   }
1750 }
1751 @end lilypond
1752
1753 @noindent
1754 Puisque la longueur des hampes et plusieurs autres propriétés de
1755 longueur sont calculées par rapport à la valeur de la propriété
1756 @code{staff-space}, elles sont automatiquement mises à l'échelle.  Vous
1757 remarquerez que cela n'affecte que la dimension verticale de l'ossia --
1758 la dimension horizontale étant déterminée par les objets de la portée
1759 principale de façon à rester synchronisée vis-à-vis d'elle, elle n'est
1760 pas affectée par tous ces changements de taille.  Bien sûr, si l'échelle
1761 de toute la portée principale était modifiée, tout le placement
1762 horizontal s'en trouverait affecté.  Il en sera question plus bas dans
1763 cette section.
1764
1765 Voilà qui complète la création d'une ossia. Les taille et longueur de
1766 tous les objets peuvent être modifiées de manière analogue.
1767
1768 Pour de petits changements d'échelle, comme dans l'exemple ci-dessus, il
1769 n'est généralement pas utile d'ajuster l'épaisseur des différentes
1770 lignes telles que les barres de mesure, les ligatures, les soufflets de
1771 crescendo ou decrescendo, les liaisons, etc.  Si l'épaisseur d'un objet
1772 en particulier doit être ajustée, le mieux est de modifier sa propriété
1773 @code{thickness}.  Nous avons vu plus haut, dans
1774 @ref{Propriétés des objets de rendu}, un exemple de modification de
1775 l'épaisseur des liaisons.  L'épaisseur de tous les objets tracés
1776 (c'est-à-dire ceux qui ne proviennent pas d'une police de caractère)
1777 peut être changée de la même manière.
1778
1779
1780 @node Positionnement des objets
1781 @section Positionnement des objets
1782 @translationof Placement of objects
1783
1784  @menu
1785 * Comportement automatique::
1786 * Objets inclus dans la portée::
1787 * Objets hors de la portée::
1788 @end menu
1789
1790
1791 @node Comportement automatique
1792 @subsection Comportement automatique
1793 @translationof Automatic behavior
1794
1795 @cindex objets de la portée
1796 @cindex objets extérieurs à la portée
1797 @cindex portée, objets de la
1798 @cindex portée, objets extérieurs à la
1799
1800 Dans la notation musicale, il y a des objets qui appartiennent à la
1801 portée et d'autres qui sont placés à l'extérieur de la portée. On les
1802 appelle respectivement les @qq{objets de la portée} (@emph{within-staff
1803 objects} en anglais) et les @qq{objets extérieurs à la portée}
1804 (@emph{outside-staff objects} en anglais).
1805
1806 Les objets de la portée sont ceux qui sont placés sur la portée
1807 -- les têtes de notes et les hampes, les altérations, etc.  Leur
1808 position est généralement déterminée par la musique elle-même -- ils
1809 sont placés verticalement sur des lignes spécifiques ou sont liés à
1810 d'autres objets placés de cette manière.  Normalement, les collisions
1811 entre les têtes et queues de notes et les altérations dans des accords
1812 proches sont évitées automatiquement.  Comme nous le verrons rapidement,
1813 il existe des commandes et des possibilités de retouche qui permettent
1814 de modifier ce comportement automatique.
1815
1816 Parmi les objets extérieurs à la portée, on compte des éléments comme
1817 les marques de reprise, les indications de texte ou de nuance.  Dans
1818 LilyPond, la règle est de placer verticalement ces objets extérieurs à
1819 la portée le plus près possible de la portée, tout en évitant la
1820 collision avec d'autres objets.  LilyPond utilise la propriété
1821 @code{outside-staff-priority} pour déterminer l'ordre selon lequel
1822 placer ces objets, de la manière suivante :
1823
1824 D'abord, LilyPond dresse la liste de tous les objets extérieurs à la
1825 portée.  Puis ceux-ci sont classés suivant leur
1826 @code{outside-staff-priority}.  Enfin, ils sont pris un par un, en
1827 commençant par les objets avec la @code{outside-staff-priority} la plus
1828 basse, et placés de façon à ne pas entrer en collision avec d'autres
1829 objets déjà placés.  Cela signifie que, si deux @emph{grobs} extérieurs
1830 à la portée doivent occuper la même place, c'est celui qui a la
1831 @code{outside-staff-priority} la plus basse qui est placé le plus près
1832 de la portée.  Et si deux objets ont la même
1833 @code{outside-staff-priority}, le premier rencontré sera placé au plus
1834 près de la portée.
1835
1836 Dans l'exemple suivant, tous les @emph{markup} ont la même priorité,
1837 dans la mesure où rien n'est indiqué explicitement.  Vous remarquerez
1838 que @code{Text3} est également positionné près de la portée, juste
1839 en-dessous de @code{Text2}.
1840
1841 @cindex markup, exemple
1842
1843 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1844 c2^"Text1"
1845 c2^"Text2" |
1846 c2^"Text3"
1847 c2^"Text4" |
1848 @end lilypond
1849
1850 Les portées aussi sont positionnées, par défaut, le plus près possible
1851 les unes des autres, en ménageant tout de même une certaine séparation.
1852 Si des notes se rapprochent nettement d'une portée adjacente, elles ne
1853 forceront les portées à s'écarter que s'il y a un risque de
1854 chevauchement.
1855
1856 @lilypond[quote,ragged-right,verbatim]
1857 <<
1858   \new Staff {
1859     \relative c' { c4 a, }
1860   }
1861   \new Staff {
1862     \relative c'''' { c4 a, }
1863   }
1864 >>
1865 @end lilypond
1866
1867
1868 @node Objets inclus dans la portée
1869 @subsection Objets inclus dans la portée
1870 @translationof Within-staff objects
1871
1872 Nous avons vu que les commandes @code{\voiceXXX} jouent sur la
1873 direction des liaisons, des doigtés et sur tout autre élément lié à
1874 l'orientation des hampes. Ces commandes sont essentielles dans
1875 la musique polyphonique pour distinguer des lignes mélodiques
1876 entremêlées.  Mais il arrive qu'on ait besoin de modifier ce
1877 comportement automatique.  On peut le faire pour toutes les parties de
1878 la musique ou juste pour une note.  La propriété qui contrôle ce
1879 comportement est la propriété @code{direction} de chaque objet.
1880 Expliquons d'abord ce qu'elle fait, puis nous présenterons un certain
1881 nombre de commandes déjà prêtes qui évitent, pour les modifications les
1882 plus courantes, d'avoir à encoder les retouches.
1883
1884 Certains objets comme les traits des liaisons se recourbent tantôt
1885 vers le haut, tantôt vers le bas ; d'autres encore, comme les hampes et
1886 les crochets, peuvent se décaler vers la gauche ou vers la droite selon
1887 qu'ils pointent vers le haut ou vers le bas.  Ce comportement est géré
1888 automatiquement dès lors que @code{direction} est activé.
1889
1890
1891 @menu
1892 * La propriété direction::
1893 * Doigtés::
1894 @end menu
1895
1896
1897 @node La propriété direction
1898 @unnumberedsubsubsec La propriété @code{direction}
1899 @translationof The direction property
1900
1901 @cindex down
1902 @cindex up
1903 @cindex center
1904 @cindex neutral
1905
1906 L'exemple ci-dessous montre dans la première mesure le comportement par
1907 défaut des hampes -- celles des notes les plus hautes pointant vers le
1908 bas et celles des notes les plus basses pointant vers le haut ;
1909 viennent ensuite quatre notes avec les hampes forcées vers le bas, puis
1910 quatre autres avec les hampes forcées vers le haut, et pour finir quatre
1911 notes de nouveau avec le comportement par défaut.
1912
1913 @cindex Stem, exemple de dérogation
1914 @cindex direction, exemple d'utilisation de la propriété
1915
1916 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1917 a4 g c a |
1918 \override Stem.direction = #DOWN
1919 a4 g c a |
1920 \override Stem.direction = #UP
1921 a4 g c a |
1922 \revert Stem.direction
1923 a4 g c a |
1924 @end lilypond
1925
1926 Nous utilisons ici les directions @code{DOWN} et @code{UP}.  Elles
1927 correspondent respectivement aux valeurs @code{-1} et @code{+1},
1928 que l'on peut utiliser à la place.  La valeur @code{0} peut aussi être
1929 utilisée dans certains cas.  Elle est interprétée comme un @code{UP}
1930 pour les hampes, et comme un @qq{centré} pour d'autres objets.  Il
1931 existe une direction, @code{CENTER}, qui correspond à la
1932 valeur @code{0}.
1933
1934 Quoi qu'il en soit, ces retouches manuelles sont rarement utilisées car
1935 il existe des équivalents sous forme de commandes prédéfinies.  Voici un
1936 tableau des plus courantes.  Lorsque ce n'est pas évident, leur
1937 signification est précisée.
1938
1939 @multitable @columnfractions .2 .2 .25 .35
1940 @headitem Bas/Gauche
1941   @tab Haut/Droite
1942   @tab Annulation
1943   @tab Effet
1944 @item @code{\arpeggioArrowDown}
1945   @tab @code{\arpeggioArrowUp}
1946   @tab @code{\arpeggioNormal}
1947   @tab Flèche en bas, en haut, ou pas de flèche
1948 @item @code{\dotsDown}
1949   @tab @code{\dotsUp}
1950   @tab @code{\dotsNeutral}
1951   @tab Déplacement des points pour éviter les lignes de portée
1952 @item @code{\dynamicDown}
1953   @tab @code{\dynamicUp}
1954   @tab @code{\dynamicNeutral}
1955   @tab
1956 @item @code{\phrasingSlurDown}
1957   @tab @code{\phrasingSlurUp}
1958   @tab @code{\phrasingSlurNeutral}
1959   @tab Attention : à distinguer des commandes de liaison ci-dessous
1960 @item @code{\slurDown}
1961   @tab @code{\slurUp}
1962   @tab @code{\slurNeutral}
1963   @tab
1964 @item @code{\stemDown}
1965   @tab @code{\stemUp}
1966   @tab @code{\stemNeutral}
1967   @tab
1968 @item @code{\textSpannerDown}
1969   @tab @code{\textSpannerUp}
1970   @tab @code{\textSpannerNeutral}
1971   @tab Le texte saisi en tant qu'extension est au-dessous/au-dessus de
1972   la portée
1973 @item @code{\tieDown}
1974   @tab @code{\tieUp}
1975   @tab @code{\tieNeutral}
1976   @tab
1977 @item @code{\tupletDown}
1978   @tab @code{\tupletUp}
1979   @tab @code{\tupletNeutral}
1980   @tab Les nolets sont au-dessous/au-dessus des notes
1981 @end multitable
1982
1983 Les variantes @code{\xxxNeutral} et @code{\xxxNormal} de ces
1984 commandes sont implémentées à l'aide de @code{\revert} ; elles
1985 @strong{ne doivent pas} être précédées de @code{\once}.  Pour
1986 limiter les effets des autres commandes prédéfinies (fonctionnant
1987 à base de @code{\override}) à une seule note, il faut les faire
1988 précéder d'un @code{\once}, comme pour toute dérogation.
1989
1990
1991 @node Doigtés
1992 @unnumberedsubsubsec Doigtés
1993 @translationof Fingering
1994
1995 @cindex doigtés, positionnement
1996 @cindex doigtés, accords
1997
1998 Le placement des doigtés sur des notes simples peut aussi être contrôlé
1999 par la propriété @code{direction}, mais le changement de
2000 @code{direction} n'a pas d'effet sur les accords.  Comme nous le
2001 verrons, il existe des commandes qui permettent de contrôler le doigté
2002 sur chaque note d'un accord, en plaçant l'indication de doigté
2003 au-dessus, en dessous, à gauche ou à droite de chaque note.
2004
2005 Tout d'abord, voici l'effet de @code{direction} sur le doigté lié à une
2006 note simple.  La première mesure montre le comportement par défaut, et
2007 les deux suivantes montrent l'effet lorsqu'on indique @code{DOWN} et
2008 @code{UP} :
2009
2010 @cindex doigtés, exemple de dérogation
2011 @cindex direction, exemple d'utilisation de la propriété
2012
2013 @lilypond[quote,verbatim,relative=2]
2014 c4-5 a-3 f-1 c'-5 |
2015 \override Fingering.direction = #DOWN
2016 c4-5 a-3 f-1 c'-5 |
2017 \override Fingering.direction = #UP
2018 c4-5 a-3 f-1 c'-5 |
2019 @end lilypond
2020
2021 Le fait d'intervenir sur la propriété @code{direction} n'est sûrement
2022 pas la façon la plus simple de placer manuellement les doigtés au-dessus
2023 ou en dessous des notes ; mieux vaut utiliser @code{_} ou @code{^}
2024 devant le chiffre de doigté plutôt que @code{-}.  Voici ce que donne
2025 l'exemple précédent avec cette méthode :
2026
2027 @cindex doigtés, exemple
2028
2029 @lilypond[quote,verbatim,relative=2]
2030 c4-5 a-3 f-1 c'-5 |
2031 c4_5 a_3 f_1 c'_5 |
2032 c4^5 a^3 f^1 c'^5 |
2033 @end lilypond
2034
2035 La propriété @code{direction} ne fonctionne pas pour les accords alors
2036 que les préfixes de direction, @code{_} et @code{^}, fonctionnent.  Par
2037 défaut, le doigté est placé automatiquement à la fois au-dessus et
2038 au-dessous des notes d'un accord, comme ceci :
2039
2040 @cindex doigtés, exemple
2041
2042 @lilypond[quote,verbatim,relative=2]
2043 <c-5 g-3>4
2044 <c-5 g-3 e-2>4
2045 <c-5 g-3 e-2 c-1>4
2046 @end lilypond
2047
2048 @noindent
2049 mais il est possible de forcer manuellement vers le haut ou vers le bas
2050 le placement de tous ou certains chiffres de doigté, comme ceci :
2051
2052 @cindex doigtés, exemple
2053
2054 @lilypond[quote,verbatim,relative=2]
2055 <c-5 g-3 e-2 c-1>4
2056 <c^5 g_3 e_2 c_1>4
2057 <c^5 g^3 e^2 c_1>4
2058 @end lilypond
2059
2060 On peut aller encore plus loin dans le positionnement des doigtés pour
2061 chacune des notes d'un accord grâce à la commande
2062 @code{\set fingeringOrientations}.  La syntaxe de cette commande est :
2063
2064 @example
2065 @code{\set fingeringOrientations = #'([up] [left/right] [down])}
2066 @end example
2067
2068 @noindent
2069 On utilise @code{\set} car @code{fingeringOrientations} est une
2070 propriété du contexte @code{Voice}, créée et utilisée par le graveur
2071 @code{New_fingering_engraver}.
2072
2073 On peut attribuer à cette propriété une liste composée de une à trois
2074 valeurs.  Celles-ci déterminent si l'indication de doigté doit être
2075 placée au-dessus (lorsque @code{up} apparaît dans la liste), au-dessous
2076 (lorsque @code{down} apparaît), à gauche (lorsque @code{left} apparaît)
2077 ou à droite (lorsque @code{right} apparaît).  En revanche, si une valeur
2078 n'est pas dans la liste, aucun doigté n'ira à cet emplacement.  LilyPond
2079 garde ces contraintes en mémoire et recherche le meilleur emplacement
2080 pour le doigté des notes des accords suivants.  Vous remarquerez que
2081 @code{left} et @code{right} s'excluent l'un l'autre -- l'indication de
2082 doigté ne peut être placée que d'un côté ou de l'autre, pas des deux.
2083
2084 @warning{Pour contrôler à l'aide de cette commande le placement du
2085 doigté sur une note simple, il faut la saisir comme un accord composé
2086 d'une note unique, en l'encadrant de chevrons.}
2087
2088 Voici quelques exemples :
2089
2090 @cindex doigtés, exemple
2091 @cindex @code{\set}, exemple d'utilisation
2092 @cindex fingeringOrientations, exemple d'utilisation de la propriété
2093
2094 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2095 \set fingeringOrientations = #'(left)
2096 <f-2>4
2097 <c-1 e-2 g-3 b-5>4
2098 \set fingeringOrientations = #'(left)
2099 <f-2>4
2100 <c-1 e-2 g-3 b-5>4 |
2101 \set fingeringOrientations = #'(up left down)
2102 <f-2>4
2103 <c-1 e-2 g-3 b-5>4
2104 \set fingeringOrientations = #'(up left)
2105 <f-2>4
2106 <c-1 e-2 g-3 b-5>4 |
2107 \set fingeringOrientations = #'(right)
2108 <f-2>4
2109 <c-1 e-2 g-3 b-5>4
2110 @end lilypond
2111
2112 @noindent
2113 Si les indications de doigtés paraissent un peu serrées, on peut
2114 toujours réduire la taille de police (@code{font-size}).  La valeur
2115 par défaut donnée dans la RPI à la page de l'objet
2116 @code{Fingering} étant @code{-5}, essayons @w{@code{-7}} :
2117
2118 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2119 \override Fingering.font-size = #-7
2120 \set fingeringOrientations = #'(left)
2121 <f-2>4
2122 <c-1 e-2 g-3 b-5>4
2123 \set fingeringOrientations = #'(left)
2124 <f-2>4
2125 <c-1 e-2 g-3 b-5>4 |
2126 \set fingeringOrientations = #'(up left down)
2127 <f-2>4
2128 <c-1 e-2 g-3 b-5>4
2129 \set fingeringOrientations = #'(up left)
2130 <f-2>4
2131 <c-1 e-2 g-3 b-5>4 |
2132 \set fingeringOrientations = #'(right)
2133 <f-2>4
2134 <c-1 e-2 g-3 b-5>4
2135 @end lilypond
2136
2137
2138 @node Objets hors de la portée
2139 @subsection Objets hors de la portée
2140 @translationof Outside-staff objects
2141
2142 Les objets extérieurs à la portée sont placés automatiquement de façon à
2143 éviter les collisions.  Il est toutefois possible, grâce à
2144 différentes méthodes, de rectifier un positionnement automatique
2145 qui se révèlerait ne pas être optimal.
2146
2147 @menu
2148 * La propriété outside-staff-priority::
2149 * La commande textLengthOn::
2150 * Positionnement des nuances::
2151 * Dimensionnement des objets graphiques::
2152 @end menu
2153
2154
2155 @node La propriété outside-staff-priority
2156 @unnumberedsubsubsec La propriété @code{outside-staff-priority}
2157 @translationof The outside-staff-priority property
2158
2159 Les objets avec la plus petite valeur de la propriété
2160 @code{outside-staff-priority} sont placés au plus près de la
2161 portée, tandis que les autres sont écartés autant qu'il faut pour
2162 éviter les collisions.  La @code{outside-staff-priority} est
2163 définie dans la @code{grob-interface} ; elle est donc une
2164 propriété commune à tous les objets de rendu.  Par défaut, elle
2165 est réglée sur @code{#f} pour tous les objets de la portée, et
2166 porte une valeur numérique appropriée à chacun des objets
2167 extérieurs à la portée, à mesure qu'ils sont créés.  Le tableau
2168 suivant montre la valeur numérique par défaut pour quelques-uns
2169 des objets extérieurs à la portée les plus courant.
2170
2171 @cindex spanners
2172 @cindex bandeaux
2173 @cindex extenseurs
2174
2175 Vous noterez au passage certaines particularités quant au nom des
2176 objets.  En effet, des objets à extension sont automatiquement créés
2177 dans le but de pouvoir contrôler le positionnement vertical des
2178 extrémités d'un @emph{grob} qui commencerait et se terminerait à des
2179 instants musicaux différents.  C'est la raison pour laquelle modifier le
2180 @code{outside-staff-priority} du @emph{grob} sous-jacent n'aura aucun
2181 effet.  C'est par exemple le cas lorsque vous modifiez l'alignement d'un
2182 objet @code{Hairpin} à l'aide de @code{outside-staff-priority} ;
2183 puisque le soufflet est associé à un objet @code{DynamicLineSpanner},
2184 c'est sur celui-ci que doit porter l'effet de
2185 @code{outside-staff-priority}.  L'instruction dérogatoire se place au
2186 début du bandeau qui constitue une ligne de base susceptible de contenir
2187 plusieurs soufflets ou indications de nuance.
2188
2189 @multitable @columnfractions .3 .3 .3
2190 @headitem Objet de rendu
2191   @tab Priorité
2192   @tab Contrôle la position de :
2193 @item @code{RehearsalMark}
2194   @tab @code{1500}
2195   @tab Repère
2196 @item @code{MetronomeMark}
2197   @tab @code{1000}
2198   @tab Indication métronomique
2199 @item @code{VoltaBracketSpanner}
2200   @tab @code{600}
2201   @tab Bandeau de répétition
2202 @item @code{TextScript}
2203   @tab @code{450}
2204   @tab Texte des @emph{markup} (ou étiquettes)
2205 @item @code{MultiMeasureRestText}
2206   @tab @code{450}
2207   @tab Texte sur les silences qui couvrent des mesures entières
2208 @item @code{OttavaBracket}
2209   @tab @code{400}
2210   @tab Indication d'octaviation
2211 @item @code{TextSpanner}
2212   @tab @code{350}
2213   @tab Bandeau ou extension de texte
2214 @item @code{DynamicLineSpanner}
2215   @tab @code{250}
2216   @tab Toutes les marques de nuances
2217 @item @code{BarNumber}
2218   @tab @code{100}
2219   @tab Numéro de mesure
2220 @item @code{TrillSpanner}
2221   @tab @code{50}
2222   @tab Bandeau de trille
2223 @end multitable
2224
2225 Voici un exemple qui montre le placement par défaut de certains
2226 d'entre eux.
2227
2228 @cindex extension de texte
2229 @cindex indication d'octaviation
2230
2231 @funindex \startTextSpan
2232 @funindex startTextSpan
2233 @funindex \stopTextSpan
2234 @funindex stopTextSpan
2235
2236 @cindex TextSpanner, exemple de dérogation
2237 @cindex bound-details, exemple d'utilisation de la propriété
2238
2239 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2240 % Set details for later Text Spanner
2241 \override TextSpanner.bound-details.left.text
2242     = \markup { \small \bold Slower }
2243 % Place dynamics above staff
2244 \dynamicUp
2245 % Start Ottava Bracket
2246 \ottava #1
2247 c'4 \startTextSpan
2248 % Add Dynamic Text and hairpin
2249 c4\pp\<
2250 c4
2251 % Add Text Script
2252 c4^Text |
2253 c4 c
2254 % Add Dynamic Text and terminate hairpin
2255 c4\ff c \stopTextSpan |
2256 % Stop Ottava Bracket
2257 \ottava #0
2258 c,4 c c c |
2259 @end lilypond
2260
2261 Cet exemple montre comment créer des extensions de texte (@emph{Text
2262 Spanners} en anglais) -- texte avec des longues lignes au-dessus d'un
2263 passage musical.  L'extension s'étend depuis la commande
2264 @code{\startTextSpan} jusqu'à la commande @code{\stopTextSpan} et le
2265 format de texte est défini par la commande @code{\override TextSpanner}.
2266 Pour de plus amples détails, voir
2267 @ruser{Indication textuelle avec extension}.
2268
2269 Il montre aussi comment créer des marques d'octaviation.
2270
2271 @cindex modification du positionnement des numéros de mesure
2272 @cindex numéros de mesure, modification du positionnement
2273 @cindex modification du positionnement des indications métronomiques
2274 @cindex indications métronomiques, modification du positionnement
2275 @cindex modification du positionnement des marques de repère
2276 @cindex marques de repère, modification du positionnement
2277
2278 Si les valeurs de @code{outside-staff-priority} par défaut ne donnent
2279 pas les résultats escomptés, il suffit de modifier la priorité
2280 de l'un de ces objets.  Supposons que vous vouliez placer l'indication
2281 d'octaviation sous le bandeau de texte, dans l'exemple précédent.  Tout
2282 ce que nous devons faire, c'est regarder la priorité de
2283 @code{OttavaBracket} dans la Référence des propriétés internes ou dans
2284 le tableau plus haut, et la ramener à une valeur plus basse que celle de
2285 @code{TextSpanner}, en gardant à l'esprit que @code{OttavaBracket} est
2286 créé dans le contexte @code{Staff} :
2287
2288 @cindex TextSpanner, exemple de dérogation
2289 @cindex bound-details, exemple d'utilisation de la propriété
2290
2291 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2292 % Set details for later Text Spanner
2293 \override TextSpanner.bound-details.left.text
2294     = \markup { \small \bold Slower }
2295 % Place dynamics above staff
2296 \dynamicUp
2297 % Place following Ottava Bracket below Text Spanners
2298 \once \override Staff.OttavaBracket.outside-staff-priority = #340
2299 % Start Ottava Bracket
2300 \ottava #1
2301 c'4 \startTextSpan
2302 % Add Dynamic Text
2303 c4\pp
2304 % Add Dynamic Line Spanner
2305 c4\<
2306 % Add Text Script
2307 c4^Text |
2308 c4 c
2309 % Add Dynamic Text
2310 c4\ff c \stopTextSpan |
2311 % Stop Ottava Bracket
2312 \ottava #0
2313 c,4 c c c |
2314 @end lilypond
2315
2316 N'oublions pas que certains objets, tels les numéros de mesure,
2317 indications métronomiques et marques-repères, sont par défaut attachés
2318 au contexte @code{Score}.
2319
2320 @cindex liaisons et outside-staff-priority
2321 @cindex liaisons et articulations
2322 @cindex articulations et liaisons
2323
2324 Les liaisons sont intrinsèquement des objets membres de la portée
2325 (@emph{within-staff objects}) bien qu'elles la surplombent lorsque les
2326 notes auxquelles elles se rattachent sont relativement hautes.  Ceci
2327 peut avoir pour conséquence de remonter d'autant les objets externes
2328 (@emph{outside-staff objects}) tels les articulations.  La propriété
2329 @code{avoid-slur} de l'articulation en question peut se voir déterminée
2330 à @code{'inside} dans le but de @qq{ramener} cette articulation à
2331 l'intérieur de la liaison.  Cette propriété @code{avoid-slur} ne sera
2332 toutefois effective que dans la mesure où la
2333 @code{outside-staff-priority} est désactivée (valeur @code{#f}).  Dans
2334 le même esprit, il est possible d'affecter une valeur numérique
2335 particulière à la propriété @code{outside-staff-priority} d'une
2336 liaison dans le but de regrouper la liaison avec les objets externes.
2337 L'exemple suivant illustre ces deux différentes méthodes.
2338
2339 @lilypond[quote,verbatim,relative=2]
2340 c4( c^\markup { \tiny \sharp } d4.) c8 |
2341 c4(
2342 \once \override TextScript.avoid-slur = #'inside
2343 \once \override TextScript.outside-staff-priority = ##f
2344 c4^\markup { \tiny \sharp } d4.) c8 |
2345 \once \override Slur.outside-staff-priority = #500
2346 c4( c^\markup { \tiny \sharp } d4.) c8 |
2347 @end lilypond
2348
2349 Le fait de changer la @code{outside-staff-priority} peut aussi servir à
2350 contrôler le positionnement vertical des objets individuels, quoique le
2351 résultat ne soit pas toujours formidable.  Imaginons que nous voulions
2352 placer @qq{Text3} au-dessus de @qq{Text4} dans l'exemple de la section
2353 @ref{Comportement automatique}, plus haut.  Il nous suffit pour cela de
2354 regarder dans la Référence des propriétés internes ou dans le tableau
2355 plus haut la priorité de @code{TextScript}, et d'augmenter la priorité
2356 de @qq{Text3} jusqu'à une valeur très haute :
2357
2358 @cindex TextScript, exemple de dérogation
2359 @cindex outside-staff-priority, exemple d'utilisation de la propriété
2360
2361 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2362 c2^"Text1"
2363 c2^"Text2" |
2364 \once \override TextScript.outside-staff-priority = #500
2365 c2^"Text3"
2366 c2^"Text4" |
2367 @end lilypond
2368
2369 S'il est vrai que cela place @qq{Text3} au-dessus de @qq{Text4}, ça le
2370 place aussi plus haut que @qq{Text2} tandis que @qq{Text4} dégringole.
2371 Ce n'est peut-être pas si bien que ça.  En fait, ce que nous aimerions
2372 faire, c'est placer toutes les annotations à égale distance de la
2373 portée.  Pour cela, nous avons besoin d'espacer horizontalement les
2374 notes pour laisser plus de place au texte.  C'est possible grâce à la
2375 commande @code{textLengthOn}.
2376
2377
2378 @node La commande textLengthOn
2379 @unnumberedsubsubsec La commande @code{@bs{}textLengthOn}
2380 @translationof The textLengthOn command
2381
2382 @cindex notes, répartition selon le texte
2383
2384 @funindex \textLengthOn
2385 @funindex textLengthOn
2386 @funindex \textLengthOff
2387 @funindex textLengthOff
2388
2389 Par défaut, l'espacement horizontal d'un texte produit sous forme de
2390 @emph{markup} (ou d'étiquette) n'est pas pris en compte, dans la mesure
2391 où ce qui est concerné n'entre pas dans la musique.  La commande
2392 @code{\textLengthOn} inverse ce comportement, faisant en sorte que les
2393 notes soient espacées autant qu'il le faut pour s'adapter au texte :
2394
2395 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2396 \textLengthOn  % Cause notes to space out to accommodate text
2397 c2^"Text1"
2398 c2^"Text2" |
2399 c2^"Text3"
2400 c2^"Text4" |
2401 @end lilypond
2402
2403 La commande qui permet de revenir au comportement par défaut est
2404 @code{\textLengthOff}.  Alternativement, lorsque l'instruction
2405 @code{\textLengthOn} se limite à un seul instant musical, vous
2406 pouvez la préfixer d'un @code{\once}.@*
2407 LilyPond dispose de commandes équivalentes et dévolues au
2408 traitement des repères et indications de tempo :
2409 @code{\markLengthOn} et @code{\markLengthOff}.
2410
2411 @cindex étiquette de texte et collision
2412
2413 Les textes des @emph{markup} éviteront également les notes qui
2414 s'échappent au-dessus de la portée.  Si ce n'est pas notre souhait, il
2415 est possible de supprimer ce déplacement automatique vers le haut en
2416 attribuant à la priorité la valeur @code{#f}.  Voici un exemple qui
2417 montre comment les textes des @emph{markup} interagissent avec ces types
2418 de note.
2419
2420 @cindex TextScript, exemple de dérogation
2421 @cindex outside-staff-priority, exemple d'utilisation de la propriété
2422
2423 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2424 % This markup is short enough to fit without collision
2425 c2^"Tex" c'' |
2426 R1 |
2427
2428 % This is too long to fit, so it is displaced upwards
2429 c,,2^"Text" c'' |
2430 R1 |
2431
2432 % Turn off collision avoidance
2433 \once \override TextScript.outside-staff-priority = ##f
2434 c,,2^"Long Text   " c'' |
2435 R1 |
2436
2437 % Turn off collision avoidance
2438 \once \override TextScript.outside-staff-priority = ##f
2439 \textLengthOn        % and turn on textLengthOn
2440 c,,2^"Long Text   "  % Spaces at end are honored
2441 c''2 |
2442 @end lilypond
2443
2444
2445 @node Positionnement des nuances
2446 @unnumberedsubsubsec Positionnement des nuances
2447 @translationof Dynamics placement
2448
2449 @cindex modification du positionnement des nuances
2450 @cindex nuances, modification du positionnement
2451
2452 Les indications de nuance se placent normalement sous la portée, mais on
2453 peut les placer au-dessus avec la commande @code{\dynamicUp}.  Elles se
2454 positionnent verticalement par rapport à la note à laquelle elles sont
2455 liées et se décalent vers le bas (ou le haut) en fonction des objets de
2456 la portée comme les liaisons de phrasé ou les numéros de mesure.  Cela
2457 peut donner d'assez bons résultats, comme le montre cet exemple :
2458
2459 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2460 \clef "bass"
2461 \key aes \major
2462 \time 9/8
2463 \dynamicUp
2464 bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! |
2465 ees,2.~\)\mf ees4 r8 |
2466 @end lilypond
2467
2468 De toute façon, si les notes et les nuances qui leur sont liées sont
2469 trop proches, le positionnement automatique évitera les collisions en
2470 déplaçant davantage les nuances suivantes, mais le résultat peut ne
2471 pas être très satisfaisant, comme le montre cet exemple artificiel :
2472
2473 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2474 \dynamicUp
2475 a4\f b\mf a\mp b\p
2476 @end lilypond
2477
2478 @noindent
2479 Si une telle situation devait survenir dans de la musique @qq{réelle},
2480 il serait préférable d'espacer un peu plus les notes, de façon que les
2481 indications de nuance puissent toutes se situer à la même distance de la
2482 portée.  S'il est possible de faire cela pour les textes de
2483 @emph{markup} grâce à la commande @code{\textLengthOn}, il n'existe
2484 pas d'équivalent pour les indications de nuance.  Il nous faut donc
2485 chercher à faire cela avec la commande @code{\override}.
2486
2487
2488 @node Dimensionnement des objets graphiques
2489 @unnumberedsubsubsec Dimensionnement des objets graphiques
2490 @translationof Grob sizing
2491
2492 @cindex grob, dimensionnement
2493 @cindex dimensionnement des grobs
2494
2495 Tout d'abord, nous devons apprendre ce qui détermine la dimension des
2496 @emph{grobs}. Tous les @emph{grobs} portent en eux un point de référence
2497 qui est utilisé pour les positionner par rapport à leur objet parent. Ce
2498 point du @emph{grob} est placé à une distance horizontale,
2499 @code{X-offset}, et à une distance verticale, @code{Y-offset}, de son
2500 parent.  L'étendue horizontale de l'objet est fixée par une paire de
2501 nombres, @code{X-extent}, qui donnent la position du coin
2502 gauche et du coin droit par rapport au point de référence.  De
2503 même, l'amplitude verticale est fixée par une paire de nombres,
2504 @code{Y-extent}.  Ce sont des propriétés communes à tous les
2505 @emph{grobs} et que gère la @code{grob-interface}.
2506
2507 @cindex @code{extra-spacing-width}
2508
2509 Par défaut, la largeur des objets extérieurs à la portée est donnée
2510 comme étant nulle, si bien qu'ils peuvent se chevaucher
2511 horizontalement.  Pour remédier à cela, on a ajouté l'infini à
2512 l'extension gauche et moins l'infini à l'extension droite, en
2513 attribuant à @code{extra-spacing-width} la valeur
2514 @code{'(+inf.0 . -inf.0)}.  Pour être sûr que les objets ne se
2515 chevaucheront pas horizontalement, nous devons donc corriger cette
2516 valeur de @code{extra-spacing-width} pour leur attribuer un peu
2517 d'espace supplémentaire.  L'unité de base est ici la largeur
2518 séparant deux lignes de portée ; décaler le bord gauche d'une
2519 demie unité vers la gauche et le bord droit d'une demie unité vers
2520 la droite devrait suffire :
2521
2522 @example
2523 \override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
2524 @end example
2525
2526 @noindent
2527 Voyons si ça marche sur notre exemple précédent :
2528
2529 @cindex DynamicText, exemple de dérogation
2530 @cindex extra-spacing-width, exemple d'utilisation de la propriété
2531
2532 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2533 \dynamicUp
2534 % Extend width by 1 staff space
2535 \override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
2536 a4\f b\mf a\mp b\p
2537 @end lilypond
2538
2539 @noindent
2540 C'est mieux mais nous voulons peut-être aligner les indications de
2541 nuance sur une même ligne plutôt que de les voir monter et
2542 descendre avec les notes.  La propriété qui gère cela est
2543 @code{staff-padding} -- voir @ref{Collisions d'objets}.
2544
2545
2546 @node Espacement vertical
2547 @section  Espacement vertical
2548 @translationof Vertical spacing
2549
2550 En règle générale, LilyPond est plutôt performant en matière
2551 d'espacement vertical des objets musicaux.  Examinons ce qui se passe
2552 avec un chant simple à deux voix accompagnées au piano :
2553
2554 @lilypond[quote,fragment,ragged-right]
2555 <<
2556   \new ChoirStaff
2557   <<
2558     \new Staff {
2559       \new Voice = "music" {
2560         b'2 c' c' c'
2561       }
2562     }
2563     \new Lyrics
2564     \lyricsto "music" {
2565       Here are some lyrics
2566     }
2567     \new Staff {
2568       \clef bass e'2 f e c
2569     }
2570   >>
2571   \new PianoStaff
2572   <<
2573     \new Staff {
2574       g''2 c'' c'' a''
2575     }
2576     \new Staff {
2577       \clef bass e2 f c e
2578     }
2579   >>
2580 >>
2581 @end lilypond
2582
2583 Il n'y a rien à redire quant à l'espacement vertical.  Toutefois,
2584 partons du principe que nous travaillons avec un éditeur dont les
2585 exigences en matière d'espacement vertical sont les suivantes : les
2586 paroles doivent être clairement détachées des notes, l'accompagnement de
2587 piano séparé du chant et les portées de piano rapprochées l'une de
2588 l'autre.  Commençons par les paroles.
2589
2590 Les paroles résident dans un système ; les commandes dévolues à leur
2591 espacement sont donc mentionnées à la section
2592 @ruser{Espacement vertical au sein d'un système}. Nous y constatons que
2593 les paroles sont des lignes de non-portée (@code{non-staff lines}) ; les
2594 commandes qui gèrent leur espacement font donc référence à la propriété
2595 @code{nonstaff}.  Les décaler de la portée à laquelle elles sont
2596 attachées (celle du haut) jouera sur la propriété @code{relatedstaff},
2597 les décaler de la ligne inférieure sur la propriété
2598 @code{unrelatedstaff}.  Les parties vocales sont membre d'un
2599 @code{VerticalAxisGroup} ; ce sont donc les propriétés de ce groupe qui
2600 doivent être ajustées.  Faisons un premier essai pour voir :
2601
2602 @lilypond[quote,fragment,ragged-right,verbatim]
2603 <<
2604   \new ChoirStaff
2605   <<
2606     \new Staff {
2607       \new Voice = "music" {
2608         b'2 c' c' c'
2609       }
2610     }
2611     \new Lyrics \with {
2612       \override VerticalAxisGroup.
2613         nonstaff-relatedstaff-spacing.padding = #5
2614       \override VerticalAxisGroup.
2615         nonstaff-unrelatedstaff-spacing.padding = #5
2616     }
2617     \lyricsto "music" {
2618       Here are some lyrics
2619     }
2620     \new Staff {
2621       \clef bass e'2 f e c
2622     }
2623   >>
2624   \new PianoStaff
2625   <<
2626     \new Staff {
2627       g''2 c'' c'' a''
2628     }
2629     \new Staff {
2630       \clef bass e2 f c e
2631     }
2632   >>
2633 >>
2634 @end lilypond
2635
2636 L'espacement est maintenant quelque peu exagéré.  Lorsque nous
2637 affectons 5 à la variable @code{padding}, LilyPond ajoute cinq espaces
2638 de portée à la distance séparant deux objets, ce qui est plus que
2639 généreux.  Nous nous limiterons à 2.
2640
2641 Occupons-nous à présent de séparer l'accompagnement du chant.  La
2642 musique vocale fait l'objet d'un @code{ChoirStaff} ; il nous faut donc
2643 augmenter l'espace entre ce groupe et la portée de piano qui le suit.
2644 Nous y parviendrons en modifiant la variable @code{basic-distance} de
2645 l'élément @code{staffgroup-staff-spacing} du @code{StaffGrouper}.
2646
2647 @lilypond[quote,fragment,ragged-right,verbatim]
2648 <<
2649   \new ChoirStaff \with {
2650     \override StaffGrouper.
2651       staffgroup-staff-spacing.basic-distance = #15
2652   }
2653   <<
2654     \new Staff {
2655       \new Voice = "music" {
2656         b'2 c' c' c'
2657       }
2658     }
2659     \new Lyrics \with {
2660       \override VerticalAxisGroup.
2661         nonstaff-relatedstaff-spacing.padding = #2
2662       \override VerticalAxisGroup.
2663         nonstaff-unrelatedstaff-spacing.padding = #2
2664     }
2665     \lyricsto "music" {
2666       Here are some lyrics
2667     }
2668     \new Staff {
2669       \clef bass e'2 f e c
2670     }
2671   >>
2672   \new PianoStaff
2673   <<
2674     \new Staff {
2675       g''2 c'' c'' a''
2676     }
2677     \new Staff {
2678       \clef bass e2 f c e
2679     }
2680   >>
2681 >>
2682 @end lilypond
2683
2684 Excellent.  Ne reste plus qu'à répondre à la dernière exigence :
2685 resserrer les portées du piano.  Pour y parvenir, nous ajusterons à
2686 nouveau les propriétés du @code{StaffGrouper}, ici en jouant à la fois
2687 sur la distance de base (@code{basic-distance}) et le décalage
2688 (@code{padding}) comme ci-dessous :
2689
2690 @lilypond[quote,fragment,ragged-right,verbatim]
2691 <<
2692   \new ChoirStaff \with {
2693     \override StaffGrouper.
2694       staffgroup-staff-spacing.basic-distance = #15
2695   }
2696   <<
2697     \new Staff {
2698       \new Voice = "music" {
2699         b'2 c' c' c'
2700       }
2701     }
2702     \new Lyrics \with {
2703       \override VerticalAxisGroup.
2704         nonstaff-relatedstaff-spacing.padding = #2
2705       \override VerticalAxisGroup.
2706         nonstaff-unrelatedstaff-spacing.padding = #2
2707     }
2708     \lyricsto "music" {
2709       Here are some lyrics
2710     }
2711     \new Staff {
2712       \clef bass e'2 f e c
2713     }
2714   >>
2715   \new PianoStaff \with {
2716     \override StaffGrouper.staff-staff-spacing = #'(
2717                             (basic-distance . 0)
2718                             (padding . 0))
2719   }
2720   <<
2721     \new Staff {
2722       g''2 c'' c'' a''
2723     }
2724     \new Staff {
2725       \clef bass e2 f c e
2726     }
2727   >>
2728 >>
2729 @end lilypond
2730  
2731 Les portées sont vraiment rapprochées, mais c'est ce que veut l'éditeur.
2732 On pourra toujours les écarter au besoin en jouant sur les éléments
2733 @code{padding} ou @code{basic-distance}.
2734
2735 Il existe bien des manières de modifier l'espacement vertical.  Le point
2736 crucial à ne pas oublier est que l'espacement des objets au sein d'un
2737 regroupement -- un @code{StaffGroup}, tels @code{GrandStaff} ou
2738 @code{PianoStaff} -- dépend des variables d'espacement d'un
2739 @code{StaffGrouper} ; l'espacement de portées non regroupées (comme
2740 @code{Lyrics} et @code{Staff}) dépend des variables d'un
2741 @code{VerticalAxisGroup}.  Voir
2742 @ruser{Variables d'espacement vertical fluctuant} et
2743 @ruser{Espacement vertical au sein d'un système} pour de plus amples
2744 détails.
2745
2746
2747 @node Collisions d'objets
2748 @section Collisions d'objets
2749 @translationof Collisions of objects
2750
2751 @menu
2752 * Déplacement d'objets::
2753 * Correction des collisions d'objets::
2754 * Exemple concret::
2755 @end menu
2756
2757
2758 @node Déplacement d'objets
2759 @subsection Déplacement d'objets
2760 @translationof Moving objects
2761
2762 @cindex déplacement d'objets se chevauchant
2763 @cindex déplacement d'objets en collision
2764 @cindex déplacement de grobs en collision
2765 @cindex objets, évitement des collisions
2766 @cindex grobs, évitement des collisions
2767
2768 Aussi surprenant que cela puisse paraître, LilyPond n'est pas parfait.
2769 Certains éléments sur la partition peuvent se chevaucher, ce qui est
2770 regrettable mais, le plus souvent, facile à corriger.  En général, quand
2771 on déplace des objets, c'est pour des raisons de lisibilité ou
2772 d'esthétique -- ils rendraient mieux avec un peu plus ou un peu moins
2773 d'espace autour d'eux.
2774
2775 Il y a trois façons de résoudre les problèmes de chevauchement.  Il est
2776 préférable de les aborder dans l'ordre suivant :
2777
2778 @enumerate
2779 @item
2780 L'@strong{orientation} d'un objet qui en chevauche un autre peut être
2781 changée grâce aux commandes prédéfinies dont la liste a été donnée
2782 plus haut à propos des objets de portée (voir
2783 @ref{Objets inclus dans la portée}).
2784 Les queues de note, les liaisons de phrasé et de prolongation, les
2785 crochets, les nuances et les nolets peuvent facilement être
2786 repositionnés de cette manière.  En contrepartie, vous n'avez le choix
2787 qu'entre deux positions, sans personnalisation possible.
2788
2789 @item
2790 Les @strong{propriétés d'objet}, auxquelles LilyPond a recours pour
2791 positionner les objets, sont modifiables avec @code{\override}.  Il y a
2792 deux avantages à changer ces propriétés : (a) d'autres objets
2793 pourront être déplacés automatiquement si nécessaire pour faire de la
2794 place, et (b) la même retouche peut s'appliquer à toutes les occurrences
2795 du même type d'objet.  Ces propriétés sont :
2796
2797 @itemize
2798
2799 @item
2800 @code{direction}
2801
2802 Ce point a déjà été traité en détails -- voir
2803 @ref{Objets inclus dans la portée}.
2804
2805
2806 @item
2807 @code{padding}, @code{right-padding}, @code{staff-padding}
2808
2809 @cindex décalage (padding)
2810 @cindex padding, propriété
2811 @cindex right-padding, propriété
2812 @cindex staff-padding, propriété
2813
2814 Au moment de positionner un objet, la valeur de sa propriété
2815 @code{padding} détermine l'espace à laisser libre entre celui-ci et le
2816 coin le plus proche de l'objet à côté duquel il est placé.  Vous
2817 remarquerez que c'est la valeur @code{padding} de l'objet @strong{à
2818 placer} qui compte ; la valeur @code{padding} de l'objet déjà placé
2819 est ignorée.  Les espaces libres déterminés par @code{padding}
2820 s'appliquent à tous les objets associés à la
2821 @code{side-position-interface}.
2822
2823 Le positionnement de groupes d'altérations est contrôlé par
2824 @code{right-padding}, et non plus @code{padding}.  Cette propriété
2825 appartient à l'objet @code{AccidentalPlacement} qui, vous le
2826 remarquerez, prend place dans le contexte @strong{Staff}.  Dans le
2827 processus de composition, les têtes de notes sont disposées en premier,
2828 puis les altérations, s'il y en a, sont ajoutées à gauche des têtes de
2829 note suivant la propriété @code{right-padding} qui détermine
2830 l'espacement par rapport aux têtes de note.  C'est pourquoi seule la
2831 propriété @code{right-padding} de l'objet @code{AccidentalPlacement}
2832 joue sur le positionnement des altérations.
2833
2834 La propriété @code{staff-padding} est très proche de la propriété
2835 @code{padding} : @code{padding} contrôle l'espace minimum entre un
2836 objet qui accepte la @code{side-position-interface} et l'objet le plus
2837 proche (généralement une note ou une ligne de portée) ;
2838 @code{staff-padding} ne s'applique qu'aux objets qui sont toujours
2839 placés au-dehors de la portée -- il contrôle l'espace minimum à insérer
2840 entre la portée et l'objet extérieur.  Attention : @code{staff-padding}
2841 concerne les objets positionnés par rapport à la portée et n'a aucun
2842 effet sur les objets qui sont positionnés par rapport à une note ; tout
2843 aménagement qui lui serait apporté ne provoquera pas d'eereur, mais sera
2844 ignoré.
2845
2846 Pour trouver quelle propriété @code{padding} employer pour l'objet que
2847 vous cherchez à repositionner, il vous faut consulter les propriétés de
2848 l'objet dans la Référence des propriétés internes.  Prenez garde que les
2849 propriétés @code{padding} ne sont pas forcément traitées dans l'objet en
2850 question ; il faut alors regarder les objets qui semblent s'en
2851 rapprocher.
2852
2853 Toutes les valeurs @code{padding} sont exprimées en espace de portée.
2854 Pour la plupart des objets, la valeur par défaut est aux alentours de
2855 1,0 et parfois moins (cela dépend de chaque objet).  Il est possible de
2856 la modifier lorsqu'on a besoin d'un espace vide plus grand (ou plus
2857 petit).
2858
2859
2860 @item
2861 @code{self-alignment-X}
2862
2863 @cindex self-alignment-X,  propriété
2864
2865 Cette propriété sert à aligner les objets sur la gauche, sur la droite
2866 ou à les centrer par rapport au point de référence des objets parents.
2867 Elle peut être utilisée avec tous les objets qui acceptent la
2868 @code{self-alignment-interface}.  Il s'agit, en général, des objets qui
2869 contiennent du texte.  Les valeurs admises sont @code{LEFT},
2870 @code{RIGHT} et @code{CENTER}.  On peut aussi attribuer à
2871 la place une valeur numérique entre @code{-1} et @code{+1},
2872 où @code{-1} signifie alignement sur la gauche, @code{+1}
2873 alignement sur la droite, et les nombres intermédiaires déplacent
2874 progressivement le texte de la gauche vers la droite.  Des valeurs
2875 numériques supérieures à @code{1} sont également admises
2876 pour déplacer le texte encore plus loin vers la gauche, ou des
2877 valeurs inférieures à @code{-1} pour déplacer le texte encore
2878 plus loin vers la droite.  Un écart de @code{1} en valeur
2879 correspond à un déplacement de la moitié de la longueur du
2880 texte.
2881
2882
2883 @item
2884 @code{extra-spacing-width}
2885
2886 @cindex extra-spacing-width, propriété
2887
2888 Cette propriété est utilisée pour tous les objets qui acceptent la
2889 @code{item-interface}.  Elle reçoit deux nombres, le premier étant
2890 ajouté au bord gauche et le second au bord droit.  Des nombres
2891 négatifs déplacent le coin vers la gauche, des nombres positifs
2892 vers la droite, si bien que pour élargir un objet, le premier nombre
2893 doit être négatif et le second positif.  Attention : tous les
2894 objets n'acceptent pas forcément les deux nombres.  Par exemple, l'objet
2895 @code{Accidental} ne retient que le premier nombre (coin gauche).
2896
2897
2898 @item
2899 @code{staff-position}
2900
2901 @cindex staff-position, propriété
2902
2903 @code{staff-position} est une propriété de la
2904 @code{staff-symbol-referencer-interface}, qui s'applique aux objets
2905 positionnés par rapport à la portée.  Elle indique, en demi-espace de
2906 portée, la position verticale des objets par rapport à la ligne médiane
2907 de la portée.  C'est bien pratique pour résoudre des problèmes de
2908 collision entre des objets comme les silences valant mesure entière,
2909 les liaisons et les notes de différentes voix.
2910
2911
2912 @item
2913 @code{horizontal-shift}
2914
2915 @cindex horizontal-shift, propriété
2916 @cindex notes, empilement
2917 @cindex empilement de notes
2918 @cindex notes, collisions
2919 @cindex collisions de notes
2920 @cindex shift, commandes
2921 @funindex \shiftOff
2922 @funindex shiftOff
2923 @funindex \shiftOn
2924 @funindex shiftOn
2925 @funindex \shiftOnn
2926 @funindex shiftOnn
2927 @funindex \shiftOnnn
2928 @funindex shiftOnnn
2929
2930 Au sein d'une même voix, toutes les notes intervenant au même instant
2931 musical sont regroupées dans un empilement (une colonne) et est créé un
2932 objet @code{NoteColumn} afin de contrôler le positionnement horizontal
2933 de ce groupe de notes -- voir « Empilement de notes » dans
2934 @ref{Instanciation explicite des voix}.  Si, et seulement si deux ou
2935 plusieurs empilements au sein d'un même contexte de portée ont une
2936 orientation de hampe identique et se produisent au même instant musical,
2937 les valeurs de leurs propriétés @code{horizontal-shift} permettront de
2938 les ordonner, les empilements de rang supérieur étant progressivement
2939 décalés pour éviter les chevauchements des têtes.  Cette propriété est
2940 déterminée par les commandes @code{\voiceXXX} et peut se voir aménagée
2941 par une commande @code{\override} ou, plus habituellemnt, par les
2942 commandes @code{\shiftOn}.  Notez bien que cette propriété ne fait
2943 qu'affecter un rang aux empilements pour leur décalage ; elle ne
2944 détermine en rien la magnitude du décalage, qui sera augmentera
2945 progressivement et selon un pas proprotionnel à la largeur des têtes de
2946 chaque rang.  Le pas, généralement de la moitié de la largeur d'une
2947 tête, peut aller jusqu'à la pleine largeur de tête en cas de groupes
2948 resserrés.
2949
2950 @item
2951 @code{force-hshift}
2952
2953 @cindex force-hshift, propriété
2954
2955 La propriété @code{force-hshift} appartient à @code{NoteColumn} (en
2956 réalité à la @code{note-column-interface}).  Le fait de la modifier
2957 permet de déplacer un empilement dans le cas de chevauchement
2958 d'empilements.  Notez bien qu'elle sera sans effet en l'absence de
2959 chevauchement.  Elle s'exprime en unité appropriée aux colonnes
2960 de notes, à savoir la largeur des têtes de note de la première voix.
2961 Son utilisation est réservée à des situations complexes dans lesquelles
2962 les commandes habituelles @code{\shiftOn}
2963 (voir @ref{Instanciation explicite des voix}) ne suffisent plus à
2964 résoudre les conflits.  Elle est alors préférable à l'utilisation de la
2965 propriété @code{extra-offset}, dans la mesure où on n'a pas besoin
2966 d'exprimer la distance en espace de portée et où le fait de déplacer
2967 les notes à l'intérieur ou à l'extérieur d'une @code{NoteColumn} affecte
2968 d'autres actions comme les fusions de notes.
2969
2970 @end itemize
2971
2972
2973 @item
2974 Pour terminer, quand toutes les autres méthodes ont échoué, il est
2975 possible de repositionner verticalement les objets à la main par rapport
2976 à la ligne médiane de la portée, ou en les déplaçant à une distance
2977 donnée vers une nouvelle position.  Les inconvénients sont qu'il faut
2978 individuellement, pour chaque objet, trouver les valeurs correctes de
2979 repositionnement souvent par tâtonnement et que, puisque le
2980 mouvement est opéré après que LilyPond a placé tous les autres
2981 objets, c'est à l'utilisateur de résoudre tous les problèmes de
2982 collision qui pourraient survenir.  Et le pire avec cette méthode est
2983 que, le jour où la musique est modifiée, il faut de nouveau rechercher
2984 les valeurs de repositionnement.  Les propriétés à utiliser pour ce type
2985 de repositionnement manuel sont :
2986
2987
2988 @table @code
2989 @item extra-offset
2990
2991 @cindex extra-offset, propriété
2992
2993 Cette propriété s'applique à tout objet acceptant la
2994 @code{grob-interface}.  Elle reçoit une paire de nombres qui indiquent
2995 le déplacement supplémentaire dans le sens horizontal et vertical.  Des
2996 nombres négatifs déplacent l'objet vers la gauche ou vers la droite.
2997 L'unité utilisée est l'espace de portée.  Le déplacement supplémentaire
2998 intervient une fois que la composition des objets est achevée, si bien
2999 qu'un objet peut être repositionné à n'importe quel endroit sans
3000 perturber quoi que ce soit.
3001
3002 @item positions
3003
3004 @cindex positions, propriété
3005
3006 Cette propriété est très utile pour ajuster manuellement l'inclinaison
3007 et la hauteur des barres de ligature, des liaisons et des nolets.  Elle
3008 est suivie de deux nombres qui donnent la position des extrémités gauche
3009 et droite des barres, liaisons, etc. par rapport à la ligne médiane de
3010 la portée.  L'unité de référence est l'intervalle de lignes de portée.
3011 Attention toutefois au fait que les liaisons et phrasés ne peuvent pas
3012 être repositionnés n'importe où.  LilyPond commence par dresser la liste
3013 des emplacements possibles pour les liaisons et choisit par défaut la
3014 liaison qui @qq{semble la meilleure}.  Si la propriété @code{positions}
3015 a été retouchée, la liaison la plus proche de la position demandée sera
3016 retenue dans la liste.
3017 @end table
3018
3019 @end enumerate
3020
3021 Il est possible qu'un objet ne dispose pas de toutes ces propriétés.  Il
3022 est donc nécessaire de consulter la RPI pour vérifier quelles sont les
3023 propriétés disponibles pour l'objet en question.
3024
3025 Voici une liste d'objets les plus couramment impliqués dans les
3026 collisions, avec le nom de l'objet à consulter dans la RPI afin de
3027 trouver les propriétés à retoucher pour obtenir un déplacement.
3028
3029
3030 @multitable @columnfractions .5 .5
3031 @headitem Type d'objet                @tab Nom d'objet
3032 @item Articulations                   @tab @code{Script}
3033 @item Barres de ligature              @tab @code{Beam}
3034 @item Doigté                          @tab @code{Fingering}
3035 @item Liaisons de phrasé              @tab @code{Slur}
3036 @item Liaisons de prolongation        @tab @code{Tie}
3037 @item Nolets                          @tab @code{TupletBracket}
3038 @item Nuances (verticalement)         @tab @code{DynamicLineSpanner}
3039 @item Nuances (horizontalement)       @tab @code{DynamicText}
3040 @item Reprises / marques de texte     @tab @code{RehearsalMark}
3041 @item Texte, par ex. @code{^"texte"}  @tab @code{TextScript}
3042 @end multitable
3043
3044
3045 @node Correction des collisions d'objets
3046 @subsection Correction des collisions d'objets
3047 @translationof Fixing overlapping notation
3048
3049 Voyons maintenant comment les propriétés décrites dans la section
3050 précédente peuvent nous aider à résoudre les collisions.
3051
3052 @menu
3053 * La propriété padding::
3054 * La propriété right-padding::
3055 * La propriété staff-padding::
3056 * La propriété self-alignment-X::
3057 * La propriété staff-position::
3058 * La propriété extra-offset::
3059 * La propriété positions::
3060 * La propriété force-hshift::
3061 @end menu
3062
3063
3064 @node La propriété padding
3065 @unnumberedsubsubsec La propriété @code{padding}
3066 @translationof The padding property
3067
3068 @cindex décalage (padding)
3069 @cindex résolution des chevauchements de notation
3070 @cindex chevauchement de notation
3071
3072 En jouant sur la propriété @code{padding} (littéralement
3073 @qq{rembourrage}), on augmente (ou on diminue) la distance entre
3074 des symboles qui sont imprimés au-dessus ou en dessous des notes.
3075
3076 @cindex Script, exemple de dérogation
3077 @cindex padding, exemple d'utilisation de la propriété
3078
3079 @lilypond[quote,fragment,relative=1,verbatim]
3080 c2\fermata
3081 \override Script.padding = #3
3082 b2\fermata
3083 @end lilypond
3084
3085 @cindex MetronomeMark, exemple de dérogation
3086 @cindex padding, exemple d'utilisation de la propriété
3087
3088 @lilypond[quote,fragment,relative=1,verbatim]
3089 % This will not work, see below:
3090 \override MetronomeMark.padding = #3
3091 \tempo 4=120
3092 c1 |
3093 % This works:
3094 \override Score.MetronomeMark.padding = #3
3095 \tempo 4=80
3096 d1 |
3097 @end lilypond
3098
3099 Vous remarquerez dans le second exemple à quel point il est important de
3100 préciser le nom du contexte qui contient l'objet.  Puisque l'objet
3101 @code{MetronomeMark} appartient au contexte @code{Score}, le fait de
3102 modifier la propriété dans le contexte @code{Voice} passera inaperçu.
3103 Pour plus de détails, voir @ruser{Modification de propriétés}.
3104
3105 Si on augmente la propriété @code{padding} d'un objet alors que celui-ci
3106 fait partie d'un ensemble d'objets positionnés en fonction de leur
3107 @code{outside-staff-priority}, cet objet sera déplacé, ainsi que tous
3108 les autres objets du groupe.
3109
3110
3111 @node La propriété right-padding
3112 @unnumberedsubsubsec La propriété @code{right-padding}
3113 @translationof The right-padding property
3114
3115 @cindex right-padding, propriété
3116
3117 La propriété @code{right-padding} joue sur l'espacement entre une
3118 altération et la note sur laquelle elle porte.  On ne l'utilise pas
3119 souvent, mais l'espacement par défaut peut se révéler inadéquat avec
3120 certaines altérations ou certains glyphes utilisés en musique
3121 microtonale.  Le stencil de l'altération devra alors être construit sous
3122 la forme d'un @code{markup} qui contiendra le ou les symboles requis,
3123 comme ceci :
3124
3125 @cindex Accidental, exemple de dérogation
3126 @cindex text, exemple d'utilisation de la propriété
3127 @cindex stencil, exemple d'utilisation de la propriété
3128 @cindex AccidentalPlacement, exemple de dérogation
3129 @cindex right-padding, exemple d'utilisation de la propriété
3130
3131 @lilypond[quote,ragged-right,verbatim]
3132 sesquisharp = \markup { \sesquisharp }
3133 \relative c'' {
3134   c4
3135   % This prints a sesquisharp but the spacing is too small
3136   \once \override Accidental.stencil = #ly:text-interface::print
3137   \once \override Accidental.text = #sesquisharp
3138   cis4 c
3139   % This improves the spacing
3140   \once \override Score.AccidentalPlacement.right-padding = #0.6
3141   \once \override Accidental.stencil = #ly:text-interface::print
3142   \once \override Accidental.text = #sesquisharp
3143   cis4 |
3144 }
3145 @end lilypond
3146
3147 @noindent
3148 Cette méthode utilise, pour le stencil des altérations, une retouche
3149 qui ne sera pas reprise par la suite.  Le type de stencil est
3150 obligatoirement une procédure, qui consiste ici à imprimer le contenu de
3151 la propriété @code{text} de @code{Accidental}, déclaré comme étant un
3152 signe sesqui-dièse.  Celui-ci est ensuite repoussé devant la tête de
3153 note par la retouche de @code{right-padding}.
3154
3155
3156 @node La propriété staff-padding
3157 @unnumberedsubsubsec La propriété @code{staff-padding}
3158 @translationof The staff-padding property
3159
3160 @cindex alignement d'objets sur une ligne de base
3161 @cindex objets, alignement sur une ligne de base
3162
3163 @code{staff-padding} sert à aligner des objets tels que des nuances
3164 sur une ligne fictive à une distance donnée par rapport à la portée en
3165 l'absence d'autre élément de notation qui les repousserait.  Ce n'est
3166 pas une propriété de @code{DynamicText} mais de
3167 @code{DynamicLineSpanner}, car la ligne fictive est destinée à
3168 s'appliquer autant à @strong{toutes} les nuances, notamment celles qui
3169 sont créées comme des bandeaux en longueur (en anglais @emph{Spanners}).
3170 Tel est donc le moyen d'aligner les indications de nuance, comme dans
3171 cet exemple repris de la section précédente :
3172
3173 @cindex DynamicText, exemple de dérogation
3174 @cindex extra-spacing-width, exemple d'utilisation de la propriété
3175 @cindex DynamicLineSpanner, exemple de dérogation
3176 @cindex staff-padding, exemple d'utilisation de la propriété
3177
3178 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
3179 \override DynamicLineSpanner.staff-padding = #3
3180 a4\f b\mf a\p b\mp
3181 @end lilypond
3182
3183
3184 @node La propriété self-alignment-X
3185 @unnumberedsubsubsec La propriété @code{self-alignment-X}
3186 @translationof The self-alignment-X property
3187
3188 L'exemple suivant montre comment ajuster le positionnement d'une
3189 indication de corde relativement à une hampe, en alignant le coin
3190 droit sur le point de référence de la note parente :
3191
3192 @cindex StringNumber, exemple de dérogation
3193 @cindex self-alignment-X, exemple d'utilisation de la propriété
3194
3195 @lilypond[quote,fragment,ragged-right,verbatim,relative=3]
3196 \voiceOne
3197 <a\2>
3198 \once \override StringNumber.self-alignment-X = #RIGHT
3199 <a\2>
3200 @end lilypond
3201
3202
3203 @node La propriété staff-position
3204 @unnumberedsubsubsec La propriété @code{staff-position}
3205 @translationof The staff-position property
3206
3207 @cindex collision d'objets à l'intérieur d'une portée
3208
3209 Dans une voix, un silence valant une mesure entière peut chevaucher les
3210 notes d'une autre voix.  Vu que ces silences sont centrés entre les deux
3211 barres de mesure, il serait très compliqué de programmer LilyPond pour
3212 repérer ces risques de collision dans la mesure où, normalement, toutes
3213 les collisions entre notes ou entre notes et silences se produisent sur
3214 des notes et silences simultanés. Voici un exemple de collision de ce
3215 type :
3216
3217 @lilypond[quote,verbatim,fragment,ragged-right, relative=1]
3218 << { c4 c c c } \\ { R1 } >>
3219 @end lilypond
3220
3221 Ici, la meilleure solution consiste à déplacer le symbole de pause vers
3222 le bas -- puisque cette pause appartient à la voix deux.  Par défaut,
3223 dans la @code{\voiceTwo} (c'est-à-dire dans la seconde voix d'une
3224 construction @code{<<@{ @dots{} @} \\ @{ @dots{} @}>>}), la propriété
3225 @code{staff-position} est réglée sur @code{-4} pour les
3226 @code{MultiMeasureRest} ; nous avons donc besoin de la déplacer, disons,
3227 de quatre demi-intervalles vers le bas, ce qui donne @code{-8}.
3228
3229 @cindex MultiMeasureRest, exemple de dérogation
3230 @cindex staff-position, exemple d'utilisation de la propriété
3231
3232 @lilypond[quote,verbatim,fragment,ragged-right, relative=1]
3233 <<
3234   { c4 c c c }
3235   \\
3236   \override MultiMeasureRest.staff-position = #-8
3237   { R1 }
3238 >>
3239 @end lilypond
3240
3241 C'est mieux que d'utiliser, par exemple, @code{extra-offset},
3242 car la ligne supplémentaire au-dessus du silence est insérée
3243 automatiquement.
3244
3245
3246 @node La propriété extra-offset
3247 @unnumberedsubsubsec La propriété @code{extra-offset}
3248 @translationof The extra-offset property
3249
3250 @cindex positionnement des objets
3251 @cindex positionnement des grobs
3252 @cindex objets, positionnement
3253 @cindex grobs, positionnement
3254
3255 La propriété @code{extra-offset} offre la possibilité de contrôler
3256 entièrement le placement d'un objet, aussi bien horizontalement que
3257 verticalement.
3258
3259 Dans l'exemple suivant, la seconde indication de doigté est déplacée
3260 légèrement vers la gauche et de 1,8 intervalle de lignes vers le bas :
3261
3262 @cindex Fingering, exemple de dérogation
3263 @cindex extra-offset, exemple d'utilisation de la propriété
3264
3265 @lilypond[quote,fragment,relative=1,verbatim]
3266 \stemUp
3267 f4-5
3268 \once \override Fingering.extra-offset = #'(-0.3 . -1.8)
3269 f4-5
3270 @end lilypond
3271
3272
3273 @node La propriété positions
3274 @unnumberedsubsubsec La propriété @code{positions}
3275 @translationof The positions property
3276
3277 @cindex contrôle des nolets, liaisons, phrasés et ligatures
3278 @cindex gestion manuelle des nolets, liaisons, phrasés et ligatures
3279 @cindex ligatures de nolet, gestion manuelle
3280 @cindex liaisons, gestion manuelle
3281 @cindex phrasés, gestion manuelle
3282 @cindex ligatures, gestion manuelle
3283
3284 La propriété @code{positions} permet de contrôler manuellement la
3285 position et l'inclinaison des nolets, coulés, liaisons de phrasé et
3286 barres de ligature.
3287
3288 Voici un exemple où la liaison de phrasé recouvre la liaison
3289 d'articulation :
3290
3291 @lilypond[quote,verbatim,fragment,ragged-right,relative=2]
3292 a8 \( ( a'16 ) a \)
3293 @end lilypond
3294
3295 @cindex PhrasingSlur, exemple de dérogation
3296 @cindex positions, exemple d'utilisation de la propriété
3297
3298 @noindent
3299 Nous pourrions envisager de remonter quelque peu les extrémités
3300 de la liaison de phrasé.  Commençons par repositionner l'extrémité
3301 gauche à 2,5 espaces de portée au-dessus de la ligne médiane, et
3302 la droite à 4,5 ; LilyPond choisira la courbe dont les extrémités
3303 seront les plus approchantes de celle déterminées :
3304
3305 @lilypond[quote,verbatim,fragment,ragged-right,relative=2]
3306 \once \override PhrasingSlur.positions = #'(2.5 . 4.5)
3307 a8 \( ( a'16 ) a \)
3308 @end lilypond
3309
3310 C'est déjà mieux, mais ne pourrait-on pas maintenant abaisser un
3311 peu l'extrémité droite de la liaison d'articulation ?  Vous
3312 constaterez qu'il n'est pas possible d'y arriver, tout simplement
3313 parce qu'il n'y a pas de meilleur candidat ; la propriété
3314 @code{positions} n'est alors d'aucune utilité.  Les liaisons,
3315 aussi bien de tenue que d'articulation ou de phrasé, peuvent se
3316 positionner et se dessiner tout en finesse lorsque nécessaire --
3317 voir à ce sujet @ruser{Modification des liaisons}.
3318
3319 Voici un autre exemple. Comme nous pouvons le constater, les barres de
3320 ligature chevauchent les liaisons de tenue :
3321
3322 @lilypond[quote,verbatim,fragment,ragged-right]
3323 {
3324   \time 4/2
3325   <<
3326     { c'1 ~ 2. e'8 f' }
3327     \\
3328     { e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g'' }
3329   >>
3330   <<
3331     { c'1 ~ 2. e'8 f' }
3332     \\
3333     { e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g'' }
3334   >>
3335 }
3336 @end lilypond
3337
3338 @noindent
3339 On peut y remédier en déplaçant manuellement vers le haut les deux
3340 extrémités des ligatures de croches, non plus à 1,81 intervalle
3341 au-dessous de la ligne médiane mais, disons, à 1 :
3342
3343 @cindex Beam, exemple de dérogation
3344 @cindex positions, exemple d'utilisation de la propriété
3345
3346 @lilypond[quote,verbatim,fragment,ragged-right]
3347 {
3348   \time 4/2
3349   <<
3350     { c'1 ~ 2. e'8 f' }
3351     \\
3352     {
3353       \override Beam.positions = #'(-1 . -1)
3354       e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g''
3355     }
3356   >>
3357   <<
3358     { c'1 ~ 2. e'8 f' }
3359     \\
3360     { e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g'' }
3361   >>
3362 }
3363 @end lilypond
3364
3365 @noindent
3366 Vous remarquerez que la retouche continue de s'appliquer au
3367 second bloc de croches de la première voix mais qu'il ne s'applique
3368 à aucune mesure de la deuxième voix.
3369
3370
3371 @node La propriété force-hshift
3372 @unnumberedsubsubsec La propriété @code{force-hshift}
3373 @translationof The force-hshift property
3374
3375 Maintenant, nous sommes prêts à appliquer les dernières corrections à
3376 l'exemple de Chopin présenté à la fin de @ref{J'entends des Voix}, que
3377 nous avions laissé dans cet état :
3378
3379 @lilypond[quote,verbatim,fragment,ragged-right]
3380 \new Staff \relative c'' {
3381   \key aes \major
3382   <<
3383     { c2 aes4. bes8 }
3384     \\
3385     { <ees, c>2 des }
3386     \\
3387     \\
3388     { aes'2 f4 fes }
3389   >> |
3390   <c ees aes c>1 |
3391 }
3392 @end lilypond
3393
3394 @noindent
3395 La note intermédiaire du premier accord, le la bémol à la quatrième
3396 voix, doit rester dans le même empilement que la note haute.  Pour y
3397 remédier, nous pourrions utiliser @code{\shiftOff}, ce qui
3398 malheureusement générera des avertissements au sujet d'empilements qui
3399 se chevauchent.  Nous préférons régler le @code{force-hshift} -- qui est
3400 une propriété de @code{NoteColumn} -- de cette note sur zéro.
3401
3402 Quant au second accord, il serait préférable que le fa s'aligne avec le
3403 la et que la note la plus basse se positionne un peu plus sur la droite
3404 pour éviter que les hampes se chevauchent.  Pour cela, nous réglons le
3405 @code{force-hshift} au niveau du @code{NoteColumn} du ré bémol de telle
3406 sorte qu'il se déplace de la moitié d'un espace de portée vers la
3407 droite et le @code{force-hshift} du fa sur zéro.  Vous noterez la
3408 présence du @code{\once} qui évite la propagation de ces réglages
3409 au-delà de cet instantn musical particulier -- bien que la présence du
3410 @code{\once} et du second @code{\override} de la quatrième voix ne
3411 soient pas indispensables dans ce court extrait, ce ne serait pas
3412 montrer l'exemple que de les omettre.
3413
3414 Et voici le résultat final :
3415
3416 @cindex NoteColumn, exemple de dérogation
3417 @cindex force-hshift, exemple d'utilisation de la propriété
3418
3419 @lilypond[quote,verbatim,fragment,ragged-right]
3420 \new Staff \relative c'' {
3421   \key aes \major
3422   <<
3423     { c2 aes4. bes8 }
3424     \\
3425     { <ees, c>2 \once \override NoteColumn.force-hshift = #0.5 des }
3426     \\
3427     \\
3428     { \once \override NoteColumn.force-hshift = 0 aes'2
3429       \once \override NoteColumn.force-hshift = 0 f4 fes }
3430   >> |
3431   <c ees aes c>1 |
3432 }
3433 @end lilypond
3434
3435
3436 @node Exemple concret
3437 @subsection Exemple concret
3438 @translationof Real music example
3439
3440 Pour terminer ce chapitre consacré aux retouches, voici, étape par
3441 étape, la mise en forme d'un exemple concret nécessitant un certain
3442 nombre de retouches jusqu'à l'obtention du résultat attendu.  Cet
3443 exemple a été choisi en raison des problèmes inhabituels de notation
3444 qu'il soulevait et pour vous apprendre à les résoudre grâce au Manuel de
3445 notation.  Il n'est pas représentatif d'une opération normale de
3446 gravure ; que ces difficultés ne vous découragent donc pas !  Des
3447 difficultés comme celles-ci ne sont, heureusement, pas courantes !
3448
3449 Cet exemple est tiré de la Première Ballade de Chopin, Op. 23, mesures
3450 6 à 9 ; cela correspond à la transition entre le Lento d'ouverture
3451 et le Moderato.  Voici, pour commencer, ce à quoi nous voulons que la
3452 partition ressemble ; pour limiter les complications, nous n'avons
3453 pas fait apparaître les indications de nuance, de doigté ni de pédale.
3454
3455
3456 @c The following should appear as music without code
3457 @c This example should not be indexed
3458 @c line-width ensures no break
3459 @lilypond[quote,ragged-right,line-width=6\in]
3460 rhMusic = \relative c'' {
3461   \new Voice {
3462     r2 c4.\( g8 |
3463     \once \override Tie.staff-position = #3.5
3464     bes1~ |
3465     \bar "||"
3466     \time 6/4
3467     \mergeDifferentlyHeadedOn
3468     \mergeDifferentlyDottedOn
3469     bes2.^\markup { \bold "Moderato" } r8
3470     <<
3471       { c,8 d fis bes a }
3472       \new Voice {
3473         \voiceTwo
3474         c,8~
3475         % Reposition the c2 to the right of the merged note
3476         \once \override NoteColumn.force-hshift = #1.0
3477         % Move the c2 out of the main note column
3478         % so the merge will work
3479         \shiftOnn
3480         c2
3481       }
3482       \new Voice {
3483         \voiceThree
3484         s8
3485         % Stem on the d2 must be down to permit merging
3486         \stemDown
3487         % Stem on the d2 should be invisible
3488         \tweak Flag.transparent ##t
3489         d2
3490       }
3491       \new Voice {
3492         \voiceFour
3493         s4 fis4.
3494       }
3495     >> |
3496     \mergeDifferentlyHeadedOff
3497     \mergeDifferentlyDottedOff
3498     g2.\)
3499   }
3500 }
3501
3502 lhMusic = \relative c' {
3503   r2 <c g ees>2( |
3504   <d g, d>1)\arpeggio |
3505   r2. d,,4 r4 r |
3506   r4
3507 }
3508
3509 \score {
3510   \new PianoStaff <<
3511     \new Staff = "RH"  <<
3512       \key g \minor
3513       \rhMusic
3514     >>
3515     \new Staff = "LH" <<
3516       \key g \minor
3517       \clef "bass"
3518       \lhMusic
3519     >>
3520   >>
3521 }
3522 @end lilypond
3523
3524 Nous constatons tout d'abord que, dans la troisième mesure, la main
3525 droite compte quatre voix.  Ce sont les cinq croches avec une barre,
3526 le do avec liaison, le ré blanche qui se fond avec le ré croche, et le
3527 fa dièse noire pointée qui se fond lui aussi avec la croche de même
3528 hauteur.  Tout le reste se réduit à une seule voix.  Le plus simple est
3529 donc de créer temporairement ces trois voix supplémentaires au moment
3530 opportun.  Si vous avez oublié comment faire, reportez-vous à
3531 @ref{J'entends des Voix} et @ref{Instanciation explicite des voix}.
3532 Nous opterons ici pour une déclaration explicite des voix du passage
3533 polyphonique, puisque LilyPond est alors plus performant en matière
3534 d'évitement des collisions. 
3535
3536 Commençons par saisir les notes comme appartenant à deux variables,
3537 mettons en place l'ossature des portées dans un bloc @code{\Score} et
3538 voyons ce que LilyPond propose par défaut :
3539
3540 @c line-width ensures no break
3541 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3542 rhMusic = \relative c'' {
3543   \new Voice {
3544     r2 c4. g8 |
3545     bes1~ |
3546     \time 6/4
3547     bes2. r8
3548     % Start polyphonic section of four voices
3549     <<
3550       { c,8 d fis bes a }  % continuation of main voice
3551       \new Voice {
3552         \voiceTwo
3553         c,8~ 2
3554       }
3555       \new Voice {
3556         \voiceThree
3557         s8 d2
3558       }
3559       \new Voice {
3560         \voiceFour
3561         s4 fis4.
3562       }
3563     >> |
3564     g2.  % continuation of main voice
3565   }
3566 }
3567
3568 lhMusic = \relative c' {
3569   r2 <c g ees>2 |
3570   <d g, d>1 |
3571   r2. d,,4 r4 r |
3572   r4
3573 }
3574
3575 \score {
3576   \new PianoStaff <<
3577     \new Staff = "RH"  <<
3578       \key g \minor
3579       \rhMusic
3580     >>
3581     \new Staff = "LH" <<
3582       \key g \minor
3583       \clef "bass"
3584       \lhMusic
3585     >>
3586   >>
3587 }
3588 @end lilypond
3589
3590 Toutes les notes sont correctes mais l'allure générale est loin d'être
3591 satisfaisante.  La liaison se heurte à l'indication de mesure lors du
3592 changement de métrique, la ligature des croches n'est pas bonne dans la
3593 troisième mesure, les notes ne sont pas fusionnées et il manque
3594 plusieurs éléments de notation.  Commençons par le plus simple.  Nous
3595 pouvons corriger la ligature des croches en la créant manuellement et
3596 nous pouvons facilement ajouter les limites droite et gauche de la
3597 liaison de phrasé, puisque tout cela a déjà été traité dans le tutoriel.
3598 Voici le résultat :
3599
3600 @c line-width ensures no break
3601 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3602 rhMusic = \relative c'' {
3603   \new Voice {
3604     r2 c4.\( g8 |
3605     bes1~ |
3606     \time 6/4
3607     bes2. r8
3608     % Start polyphonic section of four voices
3609     <<
3610       { c,8 d fis bes a }  % continuation of main voice
3611       \new Voice {
3612         \voiceTwo
3613         c,8~ 2
3614       }
3615       \new Voice {
3616         \voiceThree
3617         s8 d2
3618       }
3619       \new Voice {
3620         \voiceFour
3621         s4 fis4.
3622       }
3623     >> |
3624     g2.\)  % continuation of main voice
3625   }
3626 }
3627
3628 lhMusic = \relative c' {
3629   r2 <c g ees>2( |
3630   <d g, d>1) |
3631   r2. d,,4 r4 r |
3632   r4
3633 }
3634
3635 \score {
3636   \new PianoStaff <<
3637     \new Staff = "RH"  <<
3638       \key g \minor
3639       \rhMusic
3640     >>
3641     \new Staff = "LH" <<
3642       \key g \minor
3643       \clef "bass"
3644       \lhMusic
3645     >>
3646   >>
3647 }
3648 @end lilypond
3649
3650 La première mesure est maintenant correcte.  La seconde contient un
3651 arpège et doit se terminer par une double barre.  Comment faire, puisque
3652 cela n'a pas été traité dans le Manuel d'initiation ?  C'est alors
3653 qu'il faut nous reporter au Manuel de notation.  Quand on cherche
3654 @qq{arpège} et @qq{barre de mesure} dans l'index, on voit aisément qu'il
3655 faut ajouter @code{\arpeggio} à un accord pour produire un arpège et
3656 qu'une double barre est le résultat de la commande @code{\bar "||"}.
3657 Rien de plus facile !  Nous devons ensuite corriger la collision entre
3658 la liaison et l'indication de mesure.  Le mieux est de déplacer la
3659 liaison vers le haut.  La méthode pour déplacer les objets a déjà été
3660 présentée dans @ref{Déplacement d'objets}, et l'on sait que, pour des
3661 objets positionnés par rapport à la portée, il nous faut modifier leur
3662 propriété @code{staff-position}, exprimée en demi-intervalles de lignes
3663 par rapport à la ligne médiane de la portée.  Voici donc la retouche à
3664 insérer juste devant la première note liée ; elle est censée déplacer la
3665 liaison vers le haut de 3,5 demi-intervalles de lignes au-dessus de la
3666 ligne médiane :
3667
3668 @code{\once \override Tie.staff-position = #3.5}
3669
3670 Cela s'adjoint à la deuxième mesure, pour donner :
3671
3672 @c line-width ensures no break
3673 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3674 rhMusic = \relative c'' {
3675   \new Voice {
3676     r2 c4.\( g8 |
3677     \once \override Tie.staff-position = #3.5
3678     bes1~ |
3679     \bar "||"
3680     \time 6/4
3681     bes2. r8
3682     % Start polyphonic section of four voices
3683     <<
3684       { c,8 d fis bes a }  % continuation of main voice
3685       \new Voice {
3686         \voiceTwo
3687         c,8~ 2
3688       }
3689       \new Voice {
3690         \voiceThree
3691         s8 d2
3692       }
3693       \new Voice {
3694         \voiceFour
3695         s4 fis4.
3696       }
3697     >> |
3698     g2.\)  % continuation of main voice
3699   }
3700 }
3701
3702 lhMusic = \relative c' {
3703   r2 <c g ees>2( |
3704   <d g, d>1)\arpeggio |
3705   r2. d,,4 r4 r |
3706   r4
3707 }
3708
3709 \score {
3710   \new PianoStaff <<
3711     \new Staff = "RH"  <<
3712       \key g \minor
3713       \rhMusic
3714     >>
3715     \new Staff = "LH" <<
3716       \key g \minor
3717       \clef "bass"
3718       \lhMusic
3719     >>
3720   >>
3721 }
3722 @end lilypond
3723
3724 Venons-en à la troisième mesure et au début de la section Moderato.
3725 Dans le Tutoriel, il est indiqué comment insérer du texte en gras à
3726 l'aide de la commande @code{\markup} ; pas de problème, du coup,
3727 pour ajouter @qq{Moderato} en gras.  Mais comment faire pour fusionner
3728 les notes de différentes voix ?  C'est là que le Manuel de notation
3729 peut nous venir en aide.  Une recherche sur @qq{fusionnement de notes}
3730 dans l'index nous renvoie au chapitre @ruser{Résolution des collisions},
3731 et plus précisément aux commandes permettant de fusionner des notes en
3732 fonction de leur type et selon qu'elles sont pointées ou non.  Dans
3733 notre exemple, pour la durée de la polyphonie de la troisième mesure,
3734 nous avons besoin de fusionner deux types de notes ; grâce aux
3735 informations trouvées dans le Manuel de notation, nous ajoutons
3736
3737 @example
3738 \mergeDifferentlyHeadedOn
3739 \mergeDifferentlyDottedOn
3740 @end example
3741
3742 @noindent
3743 au début de cette section et
3744
3745 @example
3746 \mergeDifferentlyHeadedOff
3747 \mergeDifferentlyDottedOff
3748 @end example
3749
3750 @noindent
3751 à la fin, ce qui donne :
3752
3753 @c line-width ensures no break
3754 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3755 rhMusic = \relative c'' {
3756   \new Voice {
3757     r2 c4.\( g8 |
3758     \once \override Tie.staff-position = #3.5
3759     bes1~ |
3760     \bar "||"
3761     \time 6/4
3762     bes2.^\markup { \bold "Moderato" } r8
3763     \mergeDifferentlyHeadedOn
3764     \mergeDifferentlyDottedOn
3765     % Start polyphonic section of four voices
3766     <<
3767       { c,8 d fis bes a }  % continuation of main voice
3768       \new Voice {
3769         \voiceTwo
3770         c,8~ 2
3771       }
3772       \new Voice {
3773         \voiceThree
3774         s8 d2
3775       }
3776       \new Voice {
3777         \voiceFour
3778         s4 fis4.
3779       }
3780     >> |
3781     \mergeDifferentlyHeadedOff
3782     \mergeDifferentlyDottedOff
3783     g2.\)  % continuation of main voice
3784   }
3785 }
3786
3787 lhMusic = \relative c' {
3788   r2 <c g ees>2( |
3789   <d g, d>1)\arpeggio |
3790   r2. d,,4 r4 r |
3791   r4
3792 }
3793
3794 \score {
3795   \new PianoStaff <<
3796     \new Staff = "RH"  <<
3797       \key g \minor
3798       \rhMusic
3799     >>
3800     \new Staff = "LH" <<
3801       \key g \minor
3802       \clef "bass"
3803       \lhMusic
3804     >>
3805   >>
3806 }
3807 @end lilypond
3808
3809 Ces retouches ont permis de fusionner les deux fa dièse mais pas les
3810 deux ré.  Pourquoi ?  La réponse se trouve dans la même section du
3811 Manuel de notation : les notes à fusionner doivent avoir des hampes
3812 dans des directions opposées et deux notes ne peuvent pas être
3813 fusionnées s'il y a une troisième note dans la même colonne.  Ici, les
3814 deux ré ont leur hampe orientée vers le haut et il y a une troisième
3815 note, do.  Nous savons changer l'orientation de la hampe avec
3816 @code{\stemDown} et le Manuel de notation nous indique également comment
3817 déplacer le do -- en produisant un décalage grâce à l'une des commandes
3818 @code{\shift}.  Mais laquelle ?  Le do appartient à la deuxième
3819 voix et n'est pas décalé ; les deux ré appartiennent respectivement
3820 à la première et à la troisième voix, et l'un n'est pas décalé tandis
3821 que l'autre l'est.  Il nous faut donc décaler largement le do avec la
3822 commande @code{\shiftOnn} pour éviter une interférence avec les deux ré.
3823 Voici ce que donnent ces modifications :
3824
3825 @cindex Tie, exemple de dérogation
3826 @cindex staff-position, exemple d'utilisation de la propriété
3827
3828 @c line-width ensures no break
3829 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3830 rhMusic = \relative c'' {
3831   \new Voice {
3832     r2 c4.\( g8 |
3833     \once \override Tie.staff-position = #3.5
3834     bes1~ |
3835     \bar "||"
3836     \time 6/4
3837     bes2.^\markup { \bold "Moderato" } r8
3838     \mergeDifferentlyHeadedOn
3839     \mergeDifferentlyDottedOn
3840     % Start polyphonic section of four voices
3841     <<
3842       { c,8 d fis bes a }  % continuation of main voice
3843       \new Voice {
3844         \voiceTwo
3845         % Move the c2 out of the main note column
3846         % so the merge will work
3847         c,8~ \shiftOnn c2
3848       }
3849       \new Voice {
3850         \voiceThree
3851         % Stem on the d2 must be down to permit merging
3852         s8 \stemDown d2
3853       }
3854       \new Voice {
3855         \voiceFour
3856         s4 fis4.
3857       }
3858     >> |
3859     \mergeDifferentlyHeadedOff
3860     \mergeDifferentlyDottedOff
3861     g2.\)  % continuation of main voice
3862   }
3863 }
3864
3865 lhMusic = \relative c' {
3866   r2 <c g ees>2( |
3867   <d g, d>1)\arpeggio |
3868   r2. d,,4 r4 r |
3869   r4
3870 }
3871
3872 \score {
3873   \new PianoStaff <<
3874     \new Staff = "RH"  <<
3875       \key g \minor
3876       \rhMusic
3877     >>
3878     \new Staff = "LH" <<
3879       \key g \minor
3880       \clef "bass"
3881       \lhMusic
3882     >>
3883   >>
3884 }
3885 @end lilypond
3886
3887 Pas loin !  Il ne reste plus que deux problèmes : les ré une
3888 fois fusionnés ne devraient plus avoir de hampe vers le bas, et le do
3889 serait mieux à la droite des ré.  Nous savons remédier à ces deux
3890 problèmes grâce aux retouches précédentes : nous allons rendre la
3891 hampe transparente et déplacer le do avec la propriété
3892 @code{force-hshift}.  Et voici le résultat final :
3893
3894 @cindex NoteColumn, exemple de dérogation
3895 @cindex force-hshift, exemple d'utilisation de la propriété
3896 @cindex Stem, exemple de dérogation
3897 @cindex transparent, exemple d'utilisation de la propriété
3898
3899 @c line-width ensures no break
3900 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3901 rhMusic = \relative c'' {
3902   \new Voice {
3903     r2 c4.\( g8 |
3904     \once \override Tie.staff-position = #3.5
3905     bes1~ |
3906     \bar "||"
3907     \time 6/4
3908     bes2.^\markup { \bold "Moderato" } r8
3909     \mergeDifferentlyHeadedOn
3910     \mergeDifferentlyDottedOn
3911     % Start polyphonic section of four voices
3912     <<
3913       { c,8 d fis bes a }  % continuation of main voice
3914       \new Voice {
3915         \voiceTwo
3916         c,8~
3917         % Reposition the c2 to the right of the merged note
3918         \once \override NoteColumn.force-hshift = #1.0
3919         % Move the c2 out of the main note column
3920         % so the merge will work
3921         \shiftOnn
3922         c2
3923       }
3924       \new Voice {
3925         \voiceThree
3926         s8
3927         % Stem on the d2 must be down to permit merging
3928         \stemDown
3929         % Stem on the d2 should be invisible
3930         \tweak Flag.transparent ##t
3931         d2
3932       }
3933       \new Voice {
3934         \voiceFour
3935         s4 fis4.
3936       }
3937     >> |
3938     \mergeDifferentlyHeadedOff
3939     \mergeDifferentlyDottedOff
3940     g2.\)  % continuation of main voice
3941   }
3942 }
3943
3944 lhMusic = \relative c' {
3945   r2 <c g ees>2( |
3946   <d g, d>1)\arpeggio |
3947   r2. d,,4 r4 r |
3948   r4
3949 }
3950
3951 \score {
3952   \new PianoStaff <<
3953     \new Staff = "RH"  <<
3954       \key g \minor
3955       \rhMusic
3956     >>
3957     \new Staff = "LH" <<
3958       \key g \minor
3959       \clef "bass"
3960       \lhMusic
3961     >>
3962   >>
3963 }
3964 @end lilypond
3965
3966
3967 @node Autres retouches
3968 @section Autres retouches
3969 @translationof Further tweaking
3970
3971 @menu
3972 * Autres utilisations des retouches::
3973 * Utilisation de variables dans les retouches::
3974 * Feuilles de style::
3975 * Autres sources de documentation::
3976 * Retouches avancées avec Scheme::
3977 @end menu
3978
3979
3980 @node Autres utilisations des retouches
3981 @subsection Autres utilisations des retouches
3982 @translationof Other uses for tweaks
3983
3984 @menu
3985 * Liaison entre plusieurs voix::
3986 * Rendu MIDI d'un point d'orgue::
3987 @end menu
3988
3989 @cindex transparent, utilisation de la propriété
3990 @cindex création d'objet invisible
3991 @cindex suppression d'objets
3992 @cindex objets, suppression d'
3993 @cindex masquage d'objets
3994 @cindex objets, masquage d'
3995 @cindex invisibles, objets
3996 @cindex objets, invisibles
3997 @cindex liaison de tenue avec changement de voix
3998
3999
4000 @node Liaison entre plusieurs voix
4001 @unnumberedsubsubsec Liaison entre plusieurs voix
4002 @translationof Tying notes across voices
4003
4004 Voici un exemple qui montre comment créer une liaison de
4005 prolongation entre des notes appartenant à des voix différentes.  En
4006 temps normal, seules deux notes appartenant à une même voix
4007 peuvent être ainsi liées.  La solution consiste à utiliser deux voix,
4008 dont l'une avec les notes liées
4009
4010 @lilypond[quote,fragment,relative=2]
4011 << { b8~ 8\noBeam } \\ { b[ g8] } >>
4012 @end lilypond
4013
4014 @noindent
4015 et à rendre transparente la première hampe de cette voix ;
4016 on a alors l'impression que la liaison couvre les deux voix.
4017
4018 @cindex Stem, exemple de dérogation
4019 @cindex transparent, exemple d'utilisation de la propriété
4020
4021 @lilypond[quote,fragment,relative=2,verbatim]
4022 <<
4023   {
4024     \tweak Flag.transparent ##t
4025     b8~ 8\noBeam
4026   }
4027 \\
4028   { b8[ g] }
4029 >>
4030 @end lilypond
4031
4032 Pour être sûr que la hampe que nous avons rendue transparente
4033 n'empiète pas trop sur le trait de liaison, nous pouvons l'allonger en
4034 réglant la longueur (@code{length}) sur @code{8},
4035
4036 @lilypond[quote,fragment,relative=2,verbatim]
4037 <<
4038   {
4039     \tweak Flag.transparent ##t
4040     \tweak Stem.length #8
4041     b8~ 8\noBeam
4042   }
4043 \\
4044   { b[ g8] }
4045 >>
4046 @end lilypond
4047
4048
4049 @funindex \single
4050 @cindex affinage généré par une dérogation
4051
4052 Nous aurions pu, pour déroger à la transparence d'un objet
4053 graphique, utiliser le raccourci @code{\omit} que nous avons vu
4054 plus haut.  L'affinage constitue une opération différente en ceci
4055 qu'il n'affecte que les propriétés générées par une expression
4056 musicale unique.  Nous pourrions tout à fait convertir des
4057 dérogations en affinages à l'aide d'un @code{\single} et ré-écrire
4058 l'exemple précédent de cette manière :
4059
4060 @lilypond[quote,fragment,relative=2,verbatim]
4061 <<
4062   {
4063     \single \hide Stem
4064     \single \hide Flag
4065     \tweak Stem.length #8
4066     b8~ 8\noBeam
4067   }
4068 \\
4069   { b8[ g] }
4070 >>
4071 @end lilypond
4072
4073 Dans ce cas particulier, la différence avec un @code{\once \hide}
4074 n'est pas flagrante.  Elle prend cependant toute son importance
4075 lorsque plusieurs objets de retrouvent au même instant musical --
4076 comme les têtes des notes d'un accord.  En effet, la présence d'un
4077 @code{\once} sera répercutée à tous les objets, alors qu'un
4078 @code{\single} n'affectera, lui, qu'un seul objet, celui généré
4079 par l'expression musicale qui le suit directement.
4080
4081
4082 @node Rendu MIDI d'un point d'orgue
4083 @unnumberedsubsubsec Rendu MIDI d'un point d'orgue
4084 @translationof Simulating a fermata in MIDI
4085
4086 @cindex stencil, utilisation de la propriété
4087 @cindex point d'orgue, rendu en MIDI
4088
4089 En ce qui concerne les objets extérieurs à la portée, quand on veut les
4090 faire disparaître de la partition imprimée, il est généralement
4091 préférable de modifier leur propriété @code{stencil} plutôt que leur
4092 propriété @code{transparent}.  Le fait d'attribuer à la propriété
4093 @code{stencil} d'un objet la valeur @code{#f} supprimera entièrement
4094 celui-ci de la partition.  Il ne risquera donc pas de gêner le placement
4095 d'autres objets.
4096
4097 Par exemple, si nous voulons changer le réglage de métronome pour
4098 simuler un point d'orgue dans le fichier MIDI, nous ne voulons surtout
4099 pas que cette indication métronomique apparaisse sur la partition ni
4100 qu'elle influence l'espacement entre les deux systèmes ou la position
4101 des annotations voisines sur la portée.  Le fait d'attribuer à la
4102 propriété @code{stencil} la valeur @code{#f} est donc la bonne solution.
4103 Nous montrons ci-dessous le résultat des deux méthodes :
4104
4105 @cindex MetronomeMark, exemple de dérogation
4106 @cindex transparent, exemple d'utilisation de la propriété
4107
4108 @lilypond[quote,verbatim,ragged-right]
4109 \score {
4110   \relative c'' {
4111     % Visible tempo marking
4112     \tempo 4=120
4113     a4 a a
4114     \once \hide Score.MetronomeMark
4115     % Invisible tempo marking to lengthen fermata in MIDI
4116     \tempo 4=80
4117     a4\fermata |
4118     % New tempo for next section
4119     \tempo 4=100
4120     a4 a a a |
4121   }
4122   \layout { }
4123   \midi { }
4124 }
4125 @end lilypond
4126
4127 @cindex MetronomeMark, exemple de dérogation
4128 @cindex stencil, exemple d'utilisation de la propriété
4129
4130 @lilypond[quote,verbatim,ragged-right]
4131 \score {
4132   \relative c'' {
4133     % Visible tempo marking
4134     \tempo 4=120
4135     a4 a a
4136     \once \omit Score.MetronomeMark
4137     % Invisible tempo marking to lengthen fermata in MIDI
4138     \tempo 4=80
4139     a4\fermata |
4140     % New tempo for next section
4141     \tempo 4=100
4142     a4 a a a |
4143   }
4144   \layout { }
4145   \midi { }
4146 }
4147 @end lilypond
4148
4149 @noindent
4150 Les deux méthodes permettent d'enlever l'indication métronomique qui
4151 allonge le point d'orgue de la partition, et toutes deux modifient le
4152 rythme MIDI comme souhaité  mais, dans la première, l'indication
4153 métronomique transparente repousse vers le haut l'indication de tempo,
4154 contrairement à la seconde (avec le stencil désactivé) qui la laisse à
4155 sa place.
4156
4157 @seealso
4158 Glossaire musicologique :
4159 @rglosnamed{system,système}.
4160
4161
4162 @node Utilisation de variables dans les retouches
4163 @subsection Utilisation de variables dans les retouches
4164 @translationof Using variables for layout adjustments
4165
4166 @cindex variables, utilisation dans les retouches
4167 @cindex utilisation de variables dans les retouches
4168 @cindex retouches et utilisation de variables
4169
4170 Les commandes de retouche sont souvent longues et pénibles à
4171 taper, et ne tolèrent pas la moindre erreur.  Lorsqu'on a besoin de
4172 faire plusieurs fois les mêmes retouches, il est préférable de
4173 définir des variables qui les contiennent.
4174
4175 Imaginons que nous voulions accentuer certains mots dans des paroles en
4176 les mettant en italique.  Au lieu des commandes @code{\italic} et
4177 @code{\bold}, qui ne fonctionnent dans les paroles que si elles sont
4178 enchâssées dans un @code{\markup} -- ce qui les rend pénibles à saisir
4179 -- pouvons-nous employer les commandes @code{\override} et
4180 @code{\revert} ?
4181
4182 @example
4183 @code{\override Lyrics.LyricText.font-shape = #'italic}
4184 @code{\override Lyrics.LyricText.font-series = #'bold}
4185
4186 @code{\revert Lyrics.LyricText.font-shape}
4187 @code{\revert Lyrics.LyricText.font-series}
4188 @end example
4189
4190 Là encore, ce serait extrêmement pénible à saisir, surtout s'il y avait
4191 beaucoup de mots à retoucher de cette façon.  Plutôt que cette
4192 solution, nous déclarons ces commandes comme étant deux variables,
4193 et les utilisons comme ci-après -- quoique on choisirait sans doute pour
4194 les variables des noms plus courts pour simplifier la frappe.  Par
4195 ailleurs, le fait de recourir à une variable ne nous expose plus à
4196 l'oubli des espaces entourant les points lorsqu'explicités au beau
4197 milieu d'un bloc @code{\lyricmode} !
4198
4199 @cindex LyricText, exemple de dérogation
4200 @cindex font-shape, exemple d'utilisation de la propriété
4201 @cindex font-series, exemple d'utilisation de la propriété
4202
4203 @lilypond[quote,verbatim]
4204 emphasize = {
4205   \override Lyrics.LyricText.font-shape = #'italic
4206   \override Lyrics.LyricText.font-series = #'bold
4207 }
4208
4209 normal = {
4210   \revert Lyrics.LyricText.font-shape
4211   \revert Lyrics.LyricText.font-series
4212 }
4213
4214 global = { \key c \major \time 4/4 \partial 4 }
4215
4216 SopranoMusic = \relative c' { c4 | e4. e8 g4 g    | a4   a   g  }
4217 AltoMusic    = \relative c' { c4 | c4. c8 e4 e    | f4   f   e  }
4218 TenorMusic   = \relative c  { e4 | g4. g8 c4.  b8 | a8 b c d e4 }
4219 BassMusic    = \relative c  { c4 | c4. c8 c4 c    | f8 g a b c4 }
4220
4221 VerseOne = \lyrics {
4222   E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save,
4223 }
4224
4225 VerseTwo = \lyricmode {
4226   O | \emphasize Christ, \normal whose voice the | wa -- ters heard,
4227 }
4228
4229 VerseThree = \lyricmode {
4230   O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood
4231 }
4232
4233 VerseFour = \lyricmode {
4234   O | \emphasize Tri -- ni -- ty \normal of | love and pow'r
4235 }
4236
4237 \score {
4238   \new ChoirStaff <<
4239     \new Staff <<
4240       \clef "treble"
4241       \new Voice = "Soprano"  { \voiceOne \global \SopranoMusic }
4242       \new Voice = "Alto" { \voiceTwo \AltoMusic }
4243       \new Lyrics \lyricsto "Soprano" { \VerseOne }
4244       \new Lyrics \lyricsto "Soprano" { \VerseTwo }
4245       \new Lyrics \lyricsto "Soprano" { \VerseThree }
4246       \new Lyrics \lyricsto "Soprano" { \VerseFour }
4247     >>
4248     \new Staff <<
4249       \clef "bass"
4250       \new Voice = "Tenor" { \voiceOne \TenorMusic }
4251       \new Voice = "Bass"  { \voiceTwo \BassMusic }
4252     >>
4253   >>
4254 }
4255 @end lilypond
4256
4257
4258 @node Feuilles de style
4259 @subsection Feuilles de style
4260 @translationof Style sheets
4261
4262 La sortie que produit LilyPond peut être largement modifiée -- voir
4263 @ref{Retouche de partition} pour plus de détails.  Mais que faire si
4264 vous avez beaucoup de fichiers auxquels vous souhaitez appliquer vos
4265 retouches ?  Ou si vous souhaitez simplement séparer les retouches
4266 de la musique elle-même ?  Rien de plus facile.
4267
4268 Prenons un exemple.  Ne vous inquiétez pas si vous ne comprenez pas
4269 les parties avec tous les @code{#()}.  Celles-ci sont expliquées dans
4270 @ref{Retouches avancées avec Scheme}.
4271
4272 @lilypond[quote,verbatim,ragged-right]
4273 mpdolce =
4274   \tweak self-alignment-X #-0.6
4275   #(make-dynamic-script
4276     #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4277
4278 inst =
4279 #(define-music-function
4280      (parser location string)
4281      (string?)
4282    #{ <>^\markup \bold \box #string #})
4283
4284 \relative c'' {
4285   \tempo 4=50
4286   a4.\mpdolce d8 cis4--\glissando a |
4287   b4 bes a2 |
4288   \inst "Clarinet"
4289   cis4.\< d8 e4 fis |
4290   g8(\! fis)-. e( d)-. cis2 |
4291 }
4292 @end lilypond
4293
4294 On peut faire quelque chose pour les définitions de @code{mpdolce}
4295 et @code{inst}.  Elles produisent le résultat que nous désirons,
4296 mais nous pourrions aussi vouloir les utiliser dans une autre pièce.
4297 Il suffirait de les copier et coller au début de chaque
4298 fichier, mais c'est fastidieux.  De plus, cela laisse les définitions
4299 dans nos fichiers de musique, et je trouve personnellement tous ces
4300 @code{#()} assez laids.  Stockons-les dans un autre fichier :
4301
4302 @example
4303 %%% enregistrez ceci dans un fichier nommé "definitions.ily"
4304 mpdolce =
4305   \tweak self-alignment-X #-0.6
4306   #(make-dynamic-script
4307     #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
4308
4309 inst =
4310 #(define-music-function
4311      (parser location string)
4312      (string?)
4313    #@{ <>^\markup \bold \box #string #@})
4314 @end example
4315
4316 Nous rappellerons ce fichier par une simple commande @code{\include} au
4317 début de notre fichier de musique.  Lui attribuer l'extension
4318 @code{.ily} nous permet de distinguer aisément qu'il s'agit d'un fichier
4319 voué à être inclus dans un fichier maître ; il n'est pas destiné à
4320 être compilé isolément.@*
4321 Maintenant, modifions notre musique (enregistrez ce fichier
4322 sous @file{musique.ly}).
4323
4324 @c  We have to do this awkward example/lilypond-non-verbatim
4325 @c  because we can't do the \include stuff in the manual.
4326
4327 @example
4328 \include "definitions.ily"
4329
4330 \relative c'' @{
4331   \tempo 4=50
4332   a4.\mpdolce d8 cis4--\glissando a |
4333   b4 bes a2 |
4334   \inst "Clarinet"
4335   cis4.\< d8 e4 fis |
4336   g8(\! fis)-. e( d)-. cis2 |
4337 @}
4338 @end example
4339
4340 @lilypond[quote,ragged-right]
4341 mpdolce =
4342   \tweak self-alignment-X #-0.6
4343   #(make-dynamic-script
4344     #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4345
4346 inst =
4347 #(define-music-function
4348      (parser location string)
4349      (string?)
4350    #{ <>^\markup \bold \box #string #})
4351
4352 \relative c'' {
4353   \tempo 4=50
4354   a4.\mpdolce d8 cis4--\glissando a |
4355   b4 bes a2 |
4356   \inst "Clarinet"
4357   cis4.\< d8 e4 fis |
4358   g8(\! fis)-. e( d)-. cis2 |
4359 }
4360 @end lilypond
4361
4362 C'est mieux, mais effectuons encore quelques retouches.  Le glissando
4363 est peu visible, c'est pourquoi nous allons l'épaissir et le
4364 rapprocher des têtes de note.  Déplaçons l'indication métronomique
4365 au-dessus de la clef, au lieu de la laisser au-dessus de la première
4366 note.  Et pour finir, mon professeur de composition déteste les
4367 chiffrages de mesure en @qq{C}, nous allons donc le transformer en
4368 @qq{4/4}.
4369
4370 Cependant, ne changez pas le fichier @file{musique.ly}.  Remplacez le
4371 fichier @file{definitions.ily} par ceci :
4372
4373 @example
4374 %%%  definitions.ily
4375 mpdolce =
4376   \tweak self-alignment-X #-0.6
4377   #(make-dynamic-script
4378     #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
4379
4380 inst =
4381 #(define-music-function
4382      (parser location string)
4383      (string?)
4384    #@{ <>^\markup \bold \box #string #@})
4385
4386 \layout@{
4387   \context @{
4388     \Score
4389     \override MetronomeMark.extra-offset = #'(-5 . 0)
4390     \override MetronomeMark.padding = #'3
4391   @}
4392   \context @{
4393     \Staff
4394     \override TimeSignature.style = #'numbered
4395   @}
4396   \context @{
4397     \Voice
4398     \override Glissando.thickness = #3
4399     \override Glissando.gap = #0.1
4400   @}
4401 @}
4402 @end example
4403
4404 @lilypond[quote,ragged-right]
4405 mpdolce =
4406   \tweak self-alignment-X #-0.6
4407   #(make-dynamic-script
4408     #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4409
4410 inst =
4411 #(define-music-function
4412      (parser location string)
4413      (string?)
4414    #{ <>^\markup \bold \box #string #})
4415
4416 \layout{
4417   \context {
4418     \Score
4419     \override MetronomeMark.extra-offset = #'(-5 . 0)
4420     \override MetronomeMark.padding = #'3
4421   }
4422   \context {
4423     \Staff
4424     \override TimeSignature.style = #'numbered
4425   }
4426   \context {
4427     \Voice
4428     \override Glissando.thickness = #3
4429     \override Glissando.gap = #0.1
4430   }
4431 }
4432
4433 \relative c'' {
4434   \tempo 4=50
4435   a4.\mpdolce d8 cis4--\glissando a |
4436   b4 bes a2 |
4437   \inst "Clarinet"
4438   cis4.\< d8 e4 fis |
4439   g8(\! fis)-. e( d)-. cis2 |
4440 }
4441 @end lilypond
4442
4443 C'est encore mieux !  Mais supposons maintenant que je veuille
4444 publier cette pièce.  Mon professeur de composition n'aime pas les
4445 chiffrages de mesure en @qq{C}, mais moi je les aime bien.  Copions
4446 l'actuel @file{definitions.ily} dans le fichier
4447 @file{publication-web.ily}, et modifions ce dernier.  Puisque la musique
4448 est destinée à produire un fichier PDF affiché sur écran, nous allons
4449 aussi augmenter la taille globale de police.
4450
4451 @example
4452 %%%  web-publish.ily
4453 mpdolce =
4454   \tweak self-alignment-X #-0.6
4455   #(make-dynamic-script
4456     #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
4457
4458 inst =
4459 #(define-music-function
4460      (parser location string)
4461      (string?)
4462    #@{ <>^\markup \bold \box #string #@})
4463
4464 #(set-global-staff-size 23)
4465
4466 \layout@{
4467   \context @{
4468     \Score
4469     \override MetronomeMark.extra-offset = #'(-5 . 0)
4470     \override MetronomeMark.padding = #'3
4471   @}
4472   \context @{
4473     \Staff
4474   @}
4475   \context @{
4476     \Voice
4477     \override Glissando.thickness = #3
4478     \override Glissando.gap = #0.1
4479   @}
4480 @}
4481 @end example
4482
4483 @lilypond[quote,ragged-right]
4484 mpdolce =
4485   \tweak self-alignment-X #-0.6
4486   #(make-dynamic-script
4487     #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4488
4489 inst =
4490 #(define-music-function
4491      (parser location string)
4492      (string?)
4493    #{ <>^\markup \bold \box #string #})
4494
4495 #(set-global-staff-size 23)
4496
4497 \layout{
4498   \context { \Score
4499     \override MetronomeMark.extra-offset = #'(-5 . 0)
4500     \override MetronomeMark.padding = #'3
4501   }
4502   \context { \Voice
4503     \override Glissando.thickness = #3
4504     \override Glissando.gap = #0.1
4505   }
4506 }
4507
4508 \relative c'' {
4509   \tempo 4=50
4510   a4.\mpdolce d8 cis4--\glissando a |
4511   b4 bes a2 |
4512   \inst "Clarinet"
4513   cis4.\< d8 e4 fis |
4514   g8(\! fis)-. e( d)-. cis2 |
4515 }
4516 @end lilypond
4517
4518 Il ne nous reste plus qu'à remplacer
4519 @code{\include "definitions.ily"} par
4520 @code{\include "publication-web.ily"} dans notre fichier de
4521 musique.
4522
4523 Il est possible, bien sûr, de rendre cela encore plus pratique.  Nous
4524 pourrions créer un fichier @file{definitions.ily} qui ne contiendrait
4525 que les définitions de @code{mpdolce} et de @code{inst}, un fichier
4526 @file{publication-web.ily} qui ne contiendrait que la section
4527 @code{layout} décrite ci-dessus et un fichier @file{universite.ily} qui
4528 ne contiendrait que les retouches pour produire le résultat que mon
4529 professeur préfère.  Le début du fichier @file{musique.ly} ressemblerait
4530 alors à
4531
4532 @example
4533 \include "definitions.ily"
4534
4535 %%%  Décommentez seulement une de ces deux lignes !
4536 \include "publication-web.ily"
4537 %\include "universite.ily"
4538 @end example
4539
4540 Cette approche peut être utile même si vous ne produisez qu'un seul
4541 jeu de partitions.  J'utilise personnellement une demi-douzaine de
4542 fichiers de @qq{feuille de style} pour mes projets.  Je commence
4543 chaque fichier de musique par @code{\include "../global.ily"} qui
4544 contient :
4545
4546 @example
4547 %%%   global.ily
4548 \version @w{"@version{}"}
4549
4550 #(ly:set-option 'point-and-click #f)
4551
4552 \include "../init/init-defs.ly"
4553 \include "../init/init-mise-en-page.ly"
4554 \include "../init/init-en-tetes.ly"
4555 \include "../init/init-papier.ly"
4556 @end example
4557
4558
4559 @node Autres sources de documentation
4560 @subsection Autres sources de documentation
4561 @translationof Other sources of information
4562
4563 La référence des propriétés internes contient beaucoup d'informations
4564 sur LilyPond.  Cependant vous pouvez en découvrir encore plus en
4565 consultant les fichiers internes de LilyPond.  Pour cela, il vous faut
4566 d'abord connaître le répertoire @emph{ad hoc} sur votre système.
4567 L'emplacement du répertoire dépend (a) du fait que, pour vous procurer
4568 LilyPond, vous avez téléchargé un paquet précompilé sur lilypond.org ou
4569 vous l'avez installé grâce à votre gestionnaire de paquetages
4570 (c'est-à-dire distribué avec GNU/Linux ou installé avec fink ou cygwin), ou
4571 encore vous l'avez compilé directement à partir des sources ; et
4572 (b) du système d'exploitation sur lequel il tourne.
4573
4574
4575 @subsubsubheading Téléchargé depuis lilypond.org
4576
4577 @itemize @bullet
4578 @item GNU/Linux
4579
4580 @example
4581 @file{@var{INSTALLDIR}/lilypond/usr/@/share/lilypond/current/}
4582 @end example
4583
4584 @item MacOS X
4585
4586 @example
4587 @file{@var{INSTALLDIR}/LilyPond.app/Contents/@/Resources/share/lilypond/current/}
4588 @end example
4589
4590 Pour accéder à ce dossier, deux possibilités : soit, dans un
4591 Terminal, taper @code{cd} suivi du chemin complet ci-dessus ; soit
4592 Control-cliquer (ou clic droit) sur l'application LilyPond
4593 et sélectionner @qq{Afficher le contenu du paquet}.
4594
4595 @item Windows
4596
4597 Dans l'Explorateur Windows, voir
4598 @example
4599 @file{@var{INSTALLDIR}/LilyPond/usr/@/share/lilypond/current/}
4600 @end example
4601
4602 @end itemize
4603
4604
4605 @subsubsubheading Installé par un gestionnaire de paquetages ou compilé d'après les sources
4606
4607 @code{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, où
4608 @var{PREFIX} est déterminé par votre gestionnaire de paquetages ou par
4609 le script @code{configure}, et @var{X.Y.Z} représente le numéro de
4610 version de LilyPond.
4611
4612 @smallspace
4613
4614 Dans ce répertoire, deux sous-répertoires sont particulièrement
4615 intéressants :
4616
4617 @itemize
4618 @item @code{ly/} -- contient les fichiers en format LilyPond
4619 @item @code{scm/} -- contient les fichiers en format Scheme
4620 @end itemize
4621
4622 Commençons par examiner quelques fichiers contenus dans @file{ly/}.
4623 Nous ouvrons @file{ly/property-init.ly} dans un éditeur de texte --
4624 celui que vous avez l'habitude d'utiliser pour les fichiers @file{.ly}
4625 fera très bien l'affaire.  Ce fichier contient les définitions de toutes
4626 les commandes standard prédéfinies de LilyPond, comme @code{\stemUp} et
4627 @code{\slurDotted}.  Vous pouvez constater que ce n'est rien d'autre
4628 que des définitions de variables composées d'un ou plusieurs groupes
4629 de commandes @code{\override}.  Par exemple, @code{\tieDotted}
4630 est défini comme :
4631
4632 @example
4633 tieDotted = @{
4634   \override Tie.dash-period = #0.75
4635   \override Tie.dash-fraction = #0.1
4636 @}
4637 @end example
4638
4639 Si vous n'aimez pas les valeurs par défaut, les commandes prédéfinies
4640 peuvent être facilement redéfinies, comme n'importe quelle autre
4641 variable, en tête de votre fichier d'entrée.
4642
4643 Voici les fichiers les plus utiles dans le répertoire @file{ly/} :
4644
4645 @multitable @columnfractions .4 .6
4646 @headitem Nom de fichier
4647   @tab Contenu
4648 @item @file{ly/engraver-init.ly}
4649   @tab Définition des contextes de graveurs
4650 @item @file{ly/paper-defaults-init.ly}
4651   @tab Réglages papier par défaut
4652 @item @file{ly/performer-init.ly}
4653   @tab Définition des contextes d'interprétation
4654 @item @file{ly/property-init.ly}
4655   @tab Définition de toutes les commandes prédéfinies courantes
4656 @item @file{ly/spanner-init.ly}
4657   @tab Définition des commandes prédéfinies pour les bandeaux
4658 @end multitable
4659
4660 Les autres réglages (comme les définitions de commandes @emph{markup})
4661 sont conservés comme fichiers @file{.scm} (Scheme).  Le langage de
4662 programmation Scheme offre une interface programmable dans le
4663 processus interne de LilyPond.  De plus amples explications sur ces
4664 fichiers dépasseraient le cadre de ce manuel dans la mesure où elles
4665 requièrent la connaissance du langage Scheme.  Les utilisateurs qui
4666 souhaiteraient comprendre le fonctionnement de ces fichiers de
4667 configuration doivent être avertis que des connaissances techniques
4668 substantielles et beaucoup de temps sont nécessaires (voir le
4669 @rextend{Tutoriel Scheme}).
4670
4671 Si c'est votre cas, les fichiers Scheme les plus utiles à connaître
4672 sont :
4673
4674 @multitable @columnfractions .4 .6
4675 @headitem Nom de fichier
4676   @tab Contenu
4677 @item @file{scm/auto-beam.scm}
4678   @tab Règles par défaut des ligatures subalternes
4679 @item @file{scm/define-grobs.scm}
4680   @tab Réglages par défaut des propriétés de @emph{grobs}
4681 @item @file{scm/define-markup-commands.scm}
4682   @tab Spécification de toutes les commandes de @emph{markup}
4683 @item @file{scm/midi.scm}
4684   @tab Réglages par défaut pour les sorties MIDI
4685 @item @file{scm/output-lib.scm}
4686   @tab Réglages affectant l'apparence des frets, couleurs, altérations,
4687        barres de mesure, etc.
4688 @item @file{scm/parser-clef.scm}
4689   @tab Définition des clefs prises en charge
4690 @item @file{scm/script.scm}
4691   @tab Réglages par défaut des articulations
4692 @end multitable
4693
4694
4695 @node Retouches avancées avec Scheme
4696 @subsection Retouches avancées avec Scheme
4697 @translationof Advanced tweaks with Scheme
4698
4699 Nous avons vu à quel point le résultat obtenu avec LilyPond peut
4700 être largement personnalisé à l'aide de commandes comme
4701 @code{\override} et @code{\tweak}.  Et pourtant l'utilisation de
4702 Scheme ouvre des possibilités encore plus grandes.
4703 Le code écrit dans le langage de programmation Scheme peut être
4704 intégré directement dans le processus interne de LilyPond.  Bien sûr,
4705 il faut pour cela connaître un minimum de programmation en langage
4706 Scheme.  Pour des explications complètes là-dessus, consultez le
4707 @rextend{Tutoriel Scheme}.
4708
4709 En guise d'illustration -- et ce n'est qu'une possibilité parmi tant
4710 d'autres -- nous allons attribuer à une propriété non pas une valeur
4711 préétablie mais une procédure Scheme qui sera lancée à chaque
4712 utilisation de la propriété par LilyPond.  De cette façon, nous obtenons
4713 un réglage dynamique de la propriété par le simple fait d'invoquer la
4714 procédure.  Dans cet exemple, nous colorons les têtes de notes en
4715 fonction de leur position sur la portée.
4716
4717 @cindex x11-color, exemple d'utilisation de la fonction
4718 @cindex NoteHead, exemple de dérogation
4719 @cindex color, détermination de la propriété par une procédure Scheme
4720
4721 @lilypond[quote,verbatim,ragged-right]
4722 #(define (color-notehead grob)
4723    "Color the notehead according to its position on the staff."
4724    (let ((mod-position (modulo (ly:grob-property grob 'staff-position)
4725                                7)))
4726      (case mod-position
4727        ;;   Return rainbow colors
4728        ((1) (x11-color 'red    ))  ; for C
4729        ((2) (x11-color 'orange ))  ; for D
4730        ((3) (x11-color 'yellow ))  ; for E
4731        ((4) (x11-color 'green  ))  ; for F
4732        ((5) (x11-color 'blue   ))  ; for G
4733        ((6) (x11-color 'purple ))  ; for A
4734        ((0) (x11-color 'violet ))  ; for B
4735        )))
4736
4737 \relative c' {
4738   % Arrange to obtain color from color-notehead procedure
4739   \override NoteHead.color = #color-notehead
4740   a2 b | c2 d | e2 f | g2 a |
4741 }
4742 @end lilypond
4743
4744 Vous trouverez dans @rextend{Fonctions de rappel} d'autres exemples
4745 d'utilisation de ces interfaces programmables.