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