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