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