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