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