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