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