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