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