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