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