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