]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/fr/notation/changing-defaults.itely
Fix issue 1746 "v2.13.48 docball adds offline-root/ directory"
[lilypond.git] / Documentation / fr / notation / changing-defaults.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
2 @ignore
3     Translation of GIT committish: 40c0295431d0732747d0e37b7911f03fb9daca16
4
5     When revising a translation, copy the HEAD committish of the
6     version that you are working on.  For details, see the Contributors'
7     Guide, node Updating translation committishes..
8 @end ignore
9
10 @c \version "2.15.39"
11
12 @c Translators: Valentin Villenave, Jean-Charles Malahieude
13 @c Translation checkers: Gilles Thibault
14
15
16 @node Modification des réglages prédéfinis
17 @chapter Modification des réglages prédéfinis
18 @translationof Changing defaults
19
20 LilyPond est conçu pour engendrer, par défaut, des partitions de la
21 plus haute qualité.  Cependant, on peut parfois avoir à modifier cette
22 mise en forme par défaut.  Celle-ci est réglée par tout un ensemble de
23 @qq{leviers et manettes} plus connus sous le terme de @qq{propriétés},
24 dont ce chapitre ne cherche pas à faire l'inventaire exhaustif -- le
25 chapitre @rlearning{Retouche de partition} du manuel d'initiation vous
26 en propose un aperçu.  Le propos est plutôt ici de mettre en évidence
27 les différents groupes auxquels s'apparentent ces contrôles, et
28 d'expliquer comment trouver le bon levier pour obtenir tel ou tel effet
29 en particulier.
30
31 @cindex Référence des propriétés internes
32
33 Les moyens de contrôle des différents réglages sont décrits dans un
34 document séparé, @rinternalsnamed{Top,la référence des propriétés
35 internes}.  Ce guide répertorie toutes les variables, fonctions et
36 autres options que LilyPond met à votre disposition.  Il est consultable
37 @c leave the @uref as one long line.
38 @uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/internals/,en ligne},
39 au format HTML ; il est également inclus dans la documentation
40 fournie avec le logiciel.
41
42 En sous-main, LilyPond se sert du langage Scheme (un dérivé du LISP)
43 comme infrastructure.  Modifier les choix de mise en page revient à
44 pénétrer dans les entrailles du programme, et de ce fait requiert
45 l'emploi du Scheme.  Les fragments de Scheme, dans un fichier
46 @file{.ly}, sont introduits par le caractère @emph{hash} (@code{#}),
47 improprement surnommé @qq{dièse}.
48 @footnote{Le @rextend{Tutoriel Scheme} fournit quelques notions de base
49 pour saisir des nombres, des listes, des chaînes de caractères ou des
50 symboles, en Scheme.}
51
52 @menu
53 * Contextes d'interprétation::
54 * En quoi consiste la référence des propriétés internes::
55 * Modification de propriétés::
56 * Propriétés et contextes utiles::
57 * Retouches avancées::
58 * Utilisation de fonctions musicales::
59 @end menu
60
61
62 @node Contextes d'interprétation
63 @section Contextes d'interprétation
64 @translationof Interpretation contexts
65
66 Cette section traite des contextes.
67
68 @menu
69 * Tout savoir sur les contextes::
70 * Création d'un contexte::
71 * Conservation d'un contexte::
72 * Modification des greffons de contexte::
73 * Modification des réglages par défaut d'un contexte::
74 * Définition de nouveaux contextes::
75 * Ordonnancement des contextes::
76 @end menu
77
78 @seealso
79 Manuel d'initiation :
80 @rlearning{Contextes et graveurs}.
81
82 Fichiers d'initialisation :
83 @file{ly/engraver-init.ly},
84 @file{ly/performer-init.ly}.
85
86 Morceaux choisis :
87 @rlsrnamed{Contexts and engravers, Contextes et graveurs}.
88
89 Référence des propriétés internes :
90 @rinternals{Contexts},
91 @rinternals{Engravers and Performers}.
92
93
94 @node Tout savoir sur les contextes
95 @subsection Tout savoir sur les contextes
96 @translationof Contexts explained
97
98 @ignore
99 @c TODO Rethink and rewrite
100
101 >> > > - list of contexts: my *danger unmaintainable*
102 >> > > alarm just went off.  I'm
103
104 I knew it would... And leaving out some of them is perfectly fine
105 with me.
106 I do think that a list like this, with the main contexts and a
107 brief
108 description of  what they do (perhaps also with a note about what
109 default
110 behavior is associated with each of them, but this may be
111 unmanageable),
112 should be there, and then we could simply list the remaining ones
113 without
114 further explanation and with links to the IR.
115 @end ignore
116
117 @c TODO Improve layout, order and consistency of wording -td
118
119 @c TODO Add introduction which explains contexts in generality  -td
120
121 @c TODO Describe propagation of property values -td
122
123 Les contextes sont hiérarchisés :
124
125 @menu
126 * Score -- le père de tous les contextes::
127 * Contextes de haut niveau -- les systèmes::
128 * Contextes de niveau intermédiaire -- les portées::
129 * Contextes de bas niveau -- les voix::
130 @end menu
131
132
133 @node Score -- le père de tous les contextes
134 @unnumberedsubsubsec Score -- le père de tous les contextes
135 @translationof Score - the master of all contexts
136
137 Il s'agit en l'occurrence du contexte le plus élevé, autrement dit le
138 plus important, en matière de notation.  En effet, c'est au niveau de la
139 partition -- @emph{score} en anglais -- que se gèrent le temps et la
140 tonalité ; c'est donc là qu'il faut s'assurer que les différents
141 éléments, tels les clefs, métriques et armures sont bien répercutés sur
142 toutes les portées.
143
144 Dès lors que LilyPond rencontre un bloc @code{\score @{@dots{}@}}
145 ou @code{\layout @{@dots{}@}}, se crée implicitement un contexte
146 @code{Score}.
147
148
149 @node Contextes de haut niveau -- les systèmes
150 @unnumberedsubsubsec Contextes de haut niveau -- les systèmes
151 @translationof Top-level contexts - staff containers
152
153 De nombreuses partitions sont écrites sur plus d'une portée.  Ces
154 portées peuvent être regroupées de différentes manières.
155
156 @strong{@emph{StaffGroup}}
157
158 Le groupe de portées est attaché par un crochet, et les barres de mesure
159 sont d'un seul tenant, de la première à la dernière portée.  Le
160 @code{StaffGroup} constitue le regroupement le plus simple.
161
162 @strong{@emph{ChoirStaff}}
163
164 Ce regroupement est identique au @code{StaffGroup}, à ceci près que les
165 barres de mesure ne traversent pas l'espace inter-portées.
166
167 @strong{@emph{GrandStaff}}
168
169 Le groupe de portées est attaché par une accolade sur la gauche, et les
170 barres de mesure sont d'un seul tenant.
171
172 @strong{@emph{PianoStaff}}
173
174 Ce regroupement est identique au @code{GrandStaff}, à ceci près que le
175 nom de l'instrument sera directement attaché au système.
176
177
178 @node Contextes de niveau intermédiaire -- les portées
179 @unnumberedsubsubsec Contextes de niveau intermédiaire -- les portées
180 @translationof Intermediate-level contexts - staves
181
182 @strong{@emph{Staff}}
183
184 La portée prend en charge les clefs, barres de mesure, armures et les
185 altérations accidentelles.  Un contexte @code{Staff} peut contenir
186 plusieurs contextes @code{Voice}.
187
188 @strong{@emph{RhythmicStaff}}
189
190 De même nature qu'un @code{Staff}, mais destiné à n'imprimer que du
191 rythme.  Quelle que soit la hauteur, les notes seront imprimées sur une
192 même et unique ligne.
193
194 @strong{@emph{TabStaff}}
195
196 Ce contexte permet de générer des tablatures.  La mise en forme par
197 défaut correspond à une tablature pour guitare, sur six lignes.
198
199 @strong{@emph{DrumStaff}}
200
201 Contexte dévolu tout spécialement aux parties de percussion ; il
202 peut contenir plusieurs @code{DrumVoice}.
203
204 @strong{@emph{VaticanaStaff}}
205
206 Identique au contexte @code{Staff}, à ceci près qu'il est tout
207 particulièrement adapté au grégorien.
208
209 @strong{@emph{MensuralStaff}}
210
211 Identique au contexte @code{Staff}, à ceci près qu'il est tout
212 particulièrement adapté au style mensural de musique ancienne.
213
214
215 @node Contextes de bas niveau -- les voix
216 @unnumberedsubsubsec Contextes de bas niveau -- les voix
217 @translationof Bottom-level contexts - voices
218
219 Les contextes de niveau @qq{voix} initialisent un certain nombre de
220 propriétés et activent les graveurs appropriés.  S'agissant de contextes
221 du plus bas niveau, ils ne sauraient contenir d'autre contexte.
222
223 @strong{@emph{Voice}}
224
225 Correspond à une voix positionnée sur une portée.  Le contexte
226 @code{Voice} s'occupe des indications de nuance, des hampes, des
227 ligatures, des scripts placés au-dessus ou au-dessous de la portée, des
228 différentes liaisons et des silences.  Lorsque plusieurs voix doivent
229 cohabiter sur la même portée, il est indispensable de les instancier
230 explicitement.
231
232 @strong{@emph{VaticanaVoice}}
233
234 Fonctionnant comme le contexte @code{Voice}, il est tout
235 particulièrement destiné à gérer le grégorien.
236
237 @strong{@emph{MensuralVoice}}
238
239 Fonctionnant comme le contexte @code{Voice}, il est tout
240 particulièrement adapté aux musiques anciennes.
241
242 @strong{@emph{Lyrics}}
243
244 Correspond à une voix contenant des paroles.  Le contexte @code{Lyrics}
245 gère l'impression d'une ligne de paroles.
246
247 @strong{@emph{DrumVoice}}
248
249 Contexte de voix dévolu à une portée de percussions.
250
251 @strong{@emph{FiguredBass}}
252
253 Contexte prenant en charge les objets @code{BassFigure} -- la basse
254 chiffrée -- créés à partir de ce qui a été saisi en mode
255 @code{\figuremode}.
256
257 @strong{@emph{TabVoice}}
258
259 Contexte de voix dévolu au contexte @code{TabStaff}, il est
260 habituellement créé implicitement.
261
262 @strong{@emph{CueVoice}}
263
264 Contexte de voix utilisé essentiellement dans le cadre de citations
265 ajoutées à une portée -- voir @ref{Mise en forme d'une citation}.  Il
266 est habituellement créé implicitement.
267
268 @strong{@emph{ChordNames}}
269
270 Permet d'imprimer des noms d'accord.
271
272 @ignore
273 TODO
274
275 Then the following, which I don't know what to do with:
276
277     * GregorianTranscriptionVoice
278     * GregorianTranscriptionStaff
279
280     * FretBoards
281         Engraves fretboards from chords. Not easy... Not
282 documented.
283         There is now some documentation on FretBoards in the NR, under
284          instrument-specific notation -- cds.
285
286     * NoteNames
287
288     * Global
289         Hard coded entry point for LilyPond. Cannot be tuned.
290     * Devnull
291         Silently discards all musical information given to this
292 context.
293
294 @end ignore
295
296
297 @node Création d'un contexte
298 @subsection Création d'un contexte
299 @translationof Creating contexts
300
301 @c TODO more complete descriptions rather than learning style
302
303 Lorsqu'une partition ne comporte qu'une portée avec une seule voix, les
304 contextes sont créés automatiquement.  Dès que la structure s'étoffe, il
305 devient nécessaire de les créer explicitement, en suivant l'une des
306 trois méthodes suivantes :
307
308 @itemize
309
310 @item
311 La commande la plus simple à utiliser est @code{\new} ; c'est aussi
312 la plus courte.  Elle se place juste avant une expression musicale et se
313 libelle ainsi :
314
315 @funindex \new
316 @cindex nouveau contexte
317 @cindex contexte, création
318
319 @example
320 \new @var{type} @var{expression_musicale}
321 @end example
322
323 @noindent
324 où @var{type} est le nom d'un contexte (par ex. @code{Staff} ou
325 @code{Voice}).  Cette commande crée un nouveau contexte et y interprète
326 le contenu de l'@var{expression_musicale}.
327
328 C'est ce qui se passe lorsqu'une partition comporte plusieurs portées :
329 chaque partie qui doit apparaître sur une portée spécifique est précédée
330 d'un @code{\new Staff}.
331
332 @lilypond[quote,verbatim,relative=2,ragged-right]
333 <<
334   \new Staff { c4 c }
335   \new Staff { d4 d }
336 >>
337 @end lilypond
338
339 La commande @code{\new} vous permet aussi d'attribuer un nom au
340 contexte que vous créez.
341
342 @example
343 \new @var{type} = @var{nom} @var{musique}
344 @end example
345 Le nom que vous spécifiez ne pourra être utilisé que s'il n'a pas déjà
346 été attribué à un autre contexte.
347
348 @funindex \context
349 @item
350 Tout comme @code{\new}, la commande @code{\context} affectera une
351 expression musicale à un objet contextuel ; elle lui attribuera de
352 surcroît un nom.  La commande @code{\context} s'emploie de la façon
353 suivante :
354
355 @example
356 \context @var{type} = @var{nom} @var{musique}
357 @end example
358
359 LilyPond va dans un premier temps vérifier l'existence d'un contexte du
360 type @var{type} appelé @var{nom}.  En l'absence d'un tel contexte,
361 LilyPond crée un nouveau contexte du nom que vous avez spécifié.  Cette
362 procédure est tout à fait pertinente lorsque vous faites appel à ce
363 contexte particulier par la suite.  Prenons le cas d'un chant :
364 nous commençons par nommer la ligne mélodique,
365
366 @example
367 \context Voice = "@b{tenor}" @var{musique}
368 @end example
369
370 @noindent
371 de telle sorte que le texte s'aligne correctement sur les notes :
372
373 @example
374 \new Lyrics \lyricsto "@b{tenor}" @var{paroles}
375 @end example
376
377 @noindent
378
379 L'une des autres utilisations de contextes explicitement nommés consiste
380 à fusionner deux expressions musicales dans un même contexte.  Dans
381 l'exemple qui suit, notes et articulations sont saisies indépendamment.
382
383 @example
384 music = @{ c4 c4 @}
385 arts = @{ s4-. s4-> @}
386 @end example
387
388 Elles sont ensuite fusionnées par affectation au même contexte
389 @code{Voice} :
390
391 @example
392 <<
393   \new Staff \context Voice = "A" \music
394   \context Voice = "A" \arts
395 >>
396 @end example
397 @lilypond[quote,ragged-right]
398 music = { c4 c4 }
399 arts = { s4-. s4-> }
400 \relative c'' <<
401   \new Staff \context Voice = "A" \music
402   \context Voice = "A" \arts
403 >>
404 @end lilypond
405
406 Grâce à ce mécanisme, vous pouvez tout à fait générer une version
407 @qq{Urtext} (édition originale) et optionnellement ajouter distinctement
408 des articulations à ces mêmes notes.
409
410 @cindex création de contextes
411
412 @item
413 Voici une troisième manière de créer un contexte :
414
415 @example
416 \context @var{type} @var{musique}
417 @end example
418
419 @noindent
420 Très comparable à une déclaration @code{\context = @var{nom}},
421 cette méthode permet de s'affranchir du type de contexte.
422
423 Cette variante s'utilise lorsque les expression musicales peuvent être
424 interprétées à différents niveaux, comme par exemple lorsque intervient
425 la commande @code{\applyOutput} -- pour de plus amples détails, voir
426 @rextend{Application d'une fonction à tous les objets de mise en forme}.
427 En l'absence de @code{\context} explicite, LilyPond considère qu'il
428 s'agit de @code{Voice}.
429
430 @example
431 \applyOutput #'@var{contexte} #@var{fonction}   % s'applique à Voice
432 @end example
433
434 Vous devrez respecter ces formulations si la fonction doit
435 s'interpréter au niveau @code{Score} ou @code{Staff} :
436
437 @example
438 \applyOutput #'Score #@var{fonction}
439 \applyOutput #'Staff #@var{fonction}
440 @end example
441
442 @end itemize
443
444
445 @node Conservation d'un contexte
446 @subsection Conservation d'un contexte
447 @translationof Keeping contexts alive
448
449 @cindex contextes, maintien actif
450 @cindex contextes, durée de vie
451
452 En règle générale, un contexte disparaît dès qu'il n'y a plus rien à
453 faire.  Autrement dit, un contexte @code{Voice} disparaît dès après le
454 dernier événement qu'il contient, et un contexte @code{Staff} dès que
455 les contextes @code{Voice} qu'il supporte ne contiennent plus rien.
456 Ceci peut avoir des conséquences néfastes lorsqu'il est fait référence à
457 un contexte alors disparu, comme dans le cas d'un changement de portée
458 introduit par la commande @code{\change}, l'association de paroles à
459 l'aide de la commande @code{\lyricsto} ou si des événements surviennent
460 à nouveau pour ce contexte précédemment actif.
461
462 Une exception cependant à cette règle : en présence d'un contexte
463 @code{Staff} ou dans une construction @code{<<...>>}, un seul des
464 contextes @code{Voice} inclus restera actif jusqu'à la fin du contexte
465 @code{Staff} ou de la construction @code{<<...>>}, y compris s'il y
466 a des @qq{trous}.  Le contexte alors persistant sera le premier
467 rencontré dans la construction @code{@{...@}} sans tenir compte des
468 éventuels @code{<<...>>} qu'elle pourrait contenir.
469
470 Un contexte restera actif dès lors qu'il s'y passera toujours quelque
471 chose.  Un contexte @code{Staff} restera actif si l'une des voix qu'il
472 supporte est toujours active.  L'un des moyens de s'en assurer
473 consiste à ajouter des silences invisibles parallèlement à la musique.
474 Vous devrez les ajouter dans tous les contextes @code{Voice} qui doivent
475 rester actifs.  Nous vous conseillons, lorsque plusieurs voix
476 interviennent de manière sporadique, de toutes les maintenir actives
477 plutôt que de vous fier aux exceptions mentionnées plus haut.
478
479 Dans l'exemple suivant, les deux voix A et B sont maintenues actives
480 jusqu'à la fin du morceau :
481
482 @lilypond[quote,verbatim]
483 musicA = \relative c'' { d4 d d d }
484 musicB = \relative c'' { g4 g g g }
485 keepVoicesAlive = {
486   <<
487     \new Voice = "A" { s1*5 }  % Keep Voice "A" alive for 5 bars
488     \new Voice = "B" { s1*5 }  % Keep Voice "B" alive for 5 bars
489   >>
490 }
491
492 music = {
493   \context Voice = "A" {
494     \voiceOneStyle
495     \musicA
496   }
497   \context Voice = "B" {
498     \voiceTwoStyle
499     \musicB
500   }
501   \context Voice = "A" { \musicA }
502   \context Voice = "B" { \musicB }
503   \context Voice = "A" { \musicA }
504 }
505
506 \score {
507   \new Staff <<
508     \keepVoicesAlive
509     \music
510   >>
511 }
512 @end lilypond
513
514 @cindex paroles, alignement sur une mélodie épisodique
515
516 L'exemple suivant illustre la manière d'écrire selon cette méthode une
517 mélodie discontinue à laquelle se rattachent des paroles.  Dans la
518 réalité, mélodie et accompagnement feraient l'objet de portées séparées.
519
520 @lilypond[quote,verbatim]
521 melody = \relative c'' { a4 a a a }
522 accompaniment = \relative c' { d4 d d d }
523 words = \lyricmode { These words fol -- low the mel -- o -- dy }
524 \score {
525   <<
526     \new Staff = "music" {
527       <<
528         \new Voice = "melody" {
529           \voiceOne
530           s1*4  % Keep Voice "melody" alive for 4 bars
531         }
532         {
533           \new Voice = "accompaniment" {
534             \voiceTwo
535             \accompaniment
536           }
537           <<
538             \context Voice = "melody" { \melody }
539             \context Voice = "accompaniment" { \accompaniment }
540           >>
541           \context Voice = "accompaniment" { \accompaniment }
542           <<
543             \context Voice = "melody" { \melody }
544             \context Voice = "accompaniment" { \accompaniment }
545           >>
546         }
547       >>
548     }
549     \new Lyrics \with { alignAboveContext = #"music" }
550     \lyricsto "melody" { \words }
551   >>
552 }
553 @end lilypond
554
555 Une autre méthode, qui s'avère plus productive dans nombre de cas,
556 consiste à maintenir active la ligne mélodique en y insérant des
557 silences invisibles tout au long de l'accompagnement :
558
559 @lilypond[quote,verbatim]
560 melody = \relative c'' {
561   s1  % skip a bar
562   a4 a a a
563   s1  % skip a bar
564   a4 a a a
565 }
566 accompaniment = \relative c' {
567   d4 d d d
568   d4 d d d
569   d4 d d d
570   d4 d d d
571 }
572 words = \lyricmode { These words fol -- low the mel -- o -- dy }
573
574 \score {
575   <<
576     \new Staff = "music" {
577       <<
578         \new Voice = "melody" {
579           \voiceOne
580           \melody
581         }
582         \new Voice = "accompaniment" {
583           \voiceTwo
584           \accompaniment
585         }
586       >>
587     }
588     \new Lyrics \with { alignAboveContext = #"music" }
589     \lyricsto "melody" { \words }
590   >>
591 }
592 @end lilypond
593
594
595 @node Modification des greffons de contexte
596 @subsection Modification des greffons de contexte
597 @translationof Modifying context plug-ins
598
599 @c TODO Should this be Modifying engravers or Modifying contexts?
600
601 Les contextes, tels que @code{Score} ou @code{Staff}, ne contiennent
602 pas que des propriétés ; ils mettent également en œuvre certains
603 sous-programmes (@emph{plug-ins} pour employer le terme consacré) nommés
604 @qq{graveurs} (@emph{engravers} pour reprendre le terme anglais).
605 Ces sous-programmes sont chargés de créer les différents éléments de
606 notation : on trouve ainsi dans le contexte @code{Voice} un graveur
607 @code{Note_heads_engraver}, chargé des têtes de notes et, dans le
608 contexte @code{Staff}, un graveur @code{Key_engraver}, chargé de
609 l'armure.
610
611 Vous trouverez une description exhaustive de chaque graveur dans
612 @ifhtml
613 @rinternals{Engravers and Performers}.
614 @end ifhtml
615 @ifnothtml
616 Référence des propriétés internes @expansion{} Translation @expansion{} Engravers.
617 @end ifnothtml
618 Chaque contexte mentionné dans
619 @ifhtml
620 @rinternals{Contexts}
621 @end ifhtml
622 @ifnothtml
623 Référence des propriétés internes @expansion{} Translation @expansion{} Context.
624 @end ifnothtml
625 répertorie les graveurs mis en œuvre.
626
627 On peut faire, au moyen de ces graveurs, sa propre @qq{cuisine}, en
628 modifiant les contextes à volonté.
629
630 Lorsqu'un contexte est créé, par la commande @code{\new} ou
631 @code{\context}, on peut y adjoindre un bloc @code{\with} (en anglais
632 @qq{avec}), dans lequel il est possible d'ajouter (commande
633 @code{\consists}) ou d'enlever (commande @code{\remove}) des
634 graveurs :
635
636 @funindex \with
637
638 @example
639 \new @var{contexte} \with @{
640   \consists @dots{}
641   \consists @dots{}
642   \remove @dots{}
643   \remove @dots{}
644   @emph{etc.}
645 @}
646 @{
647   @emph{..musique..}
648 @}
649 @end example
650
651 @noindent
652 Ici les points de suspension @dots{} devront être remplacés par le nom
653 des graveurs désirés.  Dans l'exemple suivant, on enlève du contexte
654 @code{Staff}, la métrique (graveur @code{Time_signature_engraver})
655 et la clef (graveur @code{Clef_engraver}).
656
657 @lilypond[quote,relative=1,verbatim]
658 <<
659   \new Staff {
660     f2 g
661   }
662   \new Staff \with {
663      \remove "Time_signature_engraver"
664      \remove "Clef_engraver"
665   } {
666     f2 g2
667   }
668 >>
669 @end lilypond
670
671 La clef et le chiffre de mesure ont disparu de la deuxième portée.
672 C'est une méthode quelque peu radicale, puisqu'elle affectera toute la
673 portée jusqu'à la fin de la partition.  L'espacement s'en trouve
674 également affecté, ce qui peut être ou non l'effet recherché.  Une
675 méthode plus sophistiquée aurait été de rendre ces objets transparents
676 (voir @rlearning{Visibilité et couleur des objets}).
677
678 Dans l'exemple suivant, voici une mise en pratique plus utile.  En temps
679 normal, les barres de mesure et la métrique sont synchronisées
680 verticalement dans toute la partition.  Les graveurs qui en sont
681 responsables se nomment @code{Timing_translator} et
682 @code{Default_bar_line_engraver}.  En les enlevant du contexte
683 @code{Score} pour les attribuer au contexte @code{Staff}, chaque portée
684 peut désormais avoir sa propre métrique.
685
686 @cindex polymétrique, partition
687 @cindex chiffres de mesure multiples
688
689 @lilypond[quote,verbatim]
690 \score {
691   <<
692     \new Staff \with {
693       \consists "Timing_translator"
694       \consists "Default_bar_line_engraver"
695     } {
696         \time 3/4
697         c4 c c c c c
698     }
699   \new Staff \with {
700     \consists "Timing_translator"
701     \consists "Default_bar_line_engraver"
702   } {
703       \time 2/4
704       c4 c c c c c
705   }
706 >>
707 \layout {
708   \context {
709     \Score
710     \remove "Timing_translator"
711     \remove "Default_bar_line_engraver"
712     }
713   }
714 }
715 @end lilypond
716
717 @knownissues
718
719 En règle générale, l'ordre dans lequel les graveurs sont mentionnés
720 importe peu.  Il se peut toutefois qu'un graveur écrive une propriété
721 qui sera interprétée par un autre, ou qu'un graveur crée un objet
722 graphique qui sera traité par un autre ; l'ordre d'apparition de
723 ces graveurs prendra alors tout son importance.
724
725 Pour information, les ordonnancements suivants sont importants :
726 le @code{Bar_engraver} devrait toujours être le premier ; le
727 @code{New_fingering_engraver} doit toujours précéder le
728 @code{Script_column_engraver}.  Nous vous conseillons, pour les autres,
729 de vérifier les éventuelles dépendances.
730
731
732
733 @node Modification des réglages par défaut d'un contexte
734 @subsection Modification des réglages par défaut d'un contexte
735 @translationof Changing context default settings
736
737 La personnalisation des réglages par défaut d'un contexte, qu'il
738 s'agisse de @code{Score}, @code{Staff} ou @code{Voice}, peut se réaliser
739 indépendamment de la musique dans un bloc @code{\layout} -- placé dans
740 le bloc @code{\score} auquel ces modifications doivent s'appliquer -- au
741 moyen de la commande @code{\context}.
742
743 Point n'est besoin d'utiliser la commande @code{\set @var{contexte}}
744 lorsque les réglages par défaut d'un contexte sont ainsi modifiés :
745
746 @c KEEP LY
747 @lilypond[quote,verbatim]
748 \score {
749   \relative c'' {
750     a4^"Petite police, hampes épaisses, sans métrique" a a a
751     a a a a
752   }
753   \layout {
754     \context {
755       \Staff
756       fontSize = #-4
757       \override Stem #'thickness = #4.0
758       \remove "Time_signature_engraver"
759     }
760   }
761 }
762 @end lilypond
763
764 Le raccourci @code{\Staff} invoque les définitions inhérentes au
765 contexte @code{Staff}, de façon à ce qu'elles puissent être modifiées.
766 Ces nouvelles spécifications affecteront toutes les portées (tous les
767 contextes @code{Staff}) de ce bloc @code{\score}.
768
769 Les adaptations peuvent aussi bien se faire au niveau du contexte
770 @code{Score} qu'au niveau de tous les contextes @code{Voice}.
771
772 Il est possible de stocker des modifications de contexte dans un
773 identificateur. Sa définition devra être précédée de l'instruction
774 @code{\with}.
775
776 @lilypond[quote,verbatim]
777 blubb = \with {
778   fontSize = #-4
779   \override Stem #'thickness = #4.0
780   \remove "Time_signature_engraver"
781 }
782
783 bla = \with {
784   fontSize = #3
785   \override Stem #'thickness = #-2.0
786 }
787
788 melody = \relative c'' {
789   a4 a a a |
790   a4 a a a |
791 }
792
793 \score {
794   <<
795     \new Staff <<
796       \melody
797       s4^"Small, thicker stems, no time signature"
798     >>
799     \new Staff \bla <<
800       \melody
801       s4^"Different"
802     >>
803   >>
804   \layout {
805     \context {
806       \Staff
807       \blubb
808     }
809   }
810 }
811 @end lilypond
812
813 @c TODO: add \with in here.
814
815
816 @node Définition de nouveaux contextes
817 @subsection Définition de nouveaux contextes
818 @translationof Defining new contexts
819
820 @cindex contexte, création
821 @cindex graveur, affectation à un contexte
822
823 @funindex \alias
824 @funindex alias
825 @funindex \name
826 @funindex name
827 @funindex \type
828 @funindex type
829 @funindex \consists
830 @funindex consists
831 @funindex \accepts
832 @funindex accepts
833 @funindex \denies
834 @funindex denies
835
836 Les contextes tels que @code{Staff} ou @code{Voice} sont faits
837 de briques de construction empilées.  En combinant divers graveurs,
838 il est possible de créer de nouveaux types de contextes.
839
840 Dans l'exemple suivant on construit, de zéro, un nouveau contexte très
841 semblable à @code{Voice}, mais qui n'imprime que des têtes de notes en
842 forme de barre oblique au centre de la portée.  Un tel contexte peut
843 servir, par exemple, à indiquer un passage improvisé dans un morceau de
844 jazz.
845
846 @c KEEP LY
847 @lilypond[quote,ragged-right]
848 \layout { \context {
849   \name ImproVoice
850   \type "Engraver_group"
851   \consists "Note_heads_engraver"
852   \consists "Rhythmic_column_engraver"
853   \consists "Text_engraver"
854   \consists Pitch_squash_engraver
855   squashedPosition = #0
856   \override NoteHead #'style = #'slash
857   \override Stem #'transparent = ##t
858   \override Flag #'transparent = ##t
859   \alias Voice
860 }
861 \context { \Staff
862   \accepts "ImproVoice"
863 }}
864
865 \relative c'' {
866   a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
867    c4 c^"dévêtez-vous" c_"tout en jouant :)" c }
868   a1
869 }
870 @end lilypond
871
872 On a rassemblé les réglages dans un bloc @code{\context}, lui-même placé
873 dans le bloc @code{\layout} :
874
875 @example
876 \layout @{
877   \context @{
878     @dots{}
879   @}
880 @}
881 @end example
882
883 En lieu et place des points (@dots{}), voici les éléments à saisir :
884
885 Tout d'abord, il convient de donner un nom à notre nouveau contexte :
886
887 @example
888 \name ImproVoice
889 @end example
890
891 Comme il est très semblable à @code{Voice}, nous souhaitons que
892 toutes les commandes associées au @code{Voice} déjà existant restent
893 valables.  D'où nécessité de la commande @code{\alias}, qui va
894 l'associer au contexte @code{Voice} :
895
896 @example
897 \alias Voice
898 @end example
899
900 Ce contexte doit pouvoir imprimer des notes et des indications
901 textuelles ; on ajoute donc les graveurs appropriés :
902
903 @example
904 \consists Note_heads_engraver
905 \consists Text_engraver
906 @end example
907
908 Cependant, on veut que les notes s'affichent toutes au centre de
909 la portée :
910
911 @example
912 \consists Pitch_squash_engraver
913 squashedPosition = #0
914 @end example
915
916 Le graveur @rinternals{Pitch_squash_engraver} intercepte les notes
917 créées par le @rinternals{Note_heads_engraver}, et les @qq{écrase} pour
918 qu'elles aient toutes la même position verticale, définie par
919 @code{squashedPosition} : ici il s'agit de la valeur @code{0},
920 c'est-à-dire la ligne du milieu.
921
922 On veut que les notes aient la forme d'une barre oblique, sans
923 aucune hampe :
924
925 @example
926 \override NoteHead #'style = #'slash
927 \override Stem #'transparent = ##t
928 \override Flag #'transparent = ##t
929 @end example
930
931 Afin que tous ces graveurs puissent travailler de concert, on leur
932 adjoint un sous-programme spécial, introduit par la commande
933 @code{\type} : il s'agit de @code{Engraver_group},
934
935 @example
936 \type "Engraver_group"
937 @end example
938
939 Récapitulons ; on se retrouve avec le bloc suivant :
940
941 @example
942 \context @{
943   \name ImproVoice
944   \type "Engraver_group"
945   \consists "Note_heads_engraver"
946   \consists "Text_engraver"
947   \consists Pitch_squash_engraver
948   squashedPosition = #0
949   \override NoteHead #'style = #'slash
950   \override Stem #'transparent = ##t
951   \override Flag #'transparent = ##t
952   \alias Voice
953 @}
954 @end example
955
956 @funindex \accepts
957
958 Ce n'est pas tout.  En effet, on veut intégrer le nouveau contexte
959 @code{ImproVoice} dans la hiérarchie des contextes.  Tout comme le
960 contexte @code{Voice}, sa place est au sein du contexte @code{Staff}.
961 Nous allons donc modifier le contexte @code{Staff},
962 au moyen de la commande @code{\accepts} :
963
964 @example
965 \context @{
966   \Staff
967   \accepts ImproVoice
968 @}
969 @end example
970
971 @funindex \denies
972
973 Le contraire de @code{\accepts} est @code{\denies} ; il est parfois
974 utile lorsque l'on recycle des définitions de contextes déjà existantes.
975
976 Enfin, tout cela doit prendre place dans le bloc @code{\layout},
977 comme ici :
978
979 @example
980 \layout @{
981   \context @{
982     \name ImproVoice
983     @dots{}
984   @}
985   \context @{
986     \Staff
987     \accepts "ImproVoice"
988   @}
989 @}
990 @end example
991
992 On peut alors saisir la musique, comme dans l'exemple plus haut :
993
994 @example
995 \relative c'' @{
996   a4 d8 bes8
997   \new ImproVoice @{
998     c4^"ad lib" c
999     c4 c^"dévêtez-vous"
1000     c c_"tout en jouant :)"
1001   @}
1002   a1
1003 @}
1004 @end example
1005
1006
1007 @node Ordonnancement des contextes
1008 @subsection Ordonnancement des contextes
1009 @translationof Context layout order
1010
1011 @cindex contextes, ordonnancement
1012
1013 @funindex \accepts
1014 @funindex \denies
1015
1016 Les contextes viennent en principe se positionner selon leur ordre
1017 d'apparition dans le fichier source.  Lorsque plusieurs contextes sont
1018 imbriqués, le contexte englobant supportera les différents contextes
1019 mentionnés dans le fichier source, à la stricte condition qu'ils soient
1020 dûment @qq{agréés}.  Les contextes imbriqués qui ne font pas partie de
1021 la @qq{liste d'agréments} du contexte englobant se retrouveront en
1022 dessous de celui-ci au lieu d'y être imbriqués.
1023
1024 La liste des @qq{agréments} d'un contexte se gère à l'aide des
1025 instructions @code{\accepts} et @code{\denies} -- @code{\accepts} pour
1026 ajouter un contexte à la liste, et @code{\denies} pour retirer
1027 l'agrément.  Il est par exemple peu conventionnel que les accords nommés
1028 apparaissent dans un contexte @code{Staff} ; autrement dit, le
1029 contexte @code{ChordNames} ne fait pas partie de la @qq{liste
1030 d'agréments} du contexte @code{Staff} par défaut.  Néanmoins, et s'il
1031 devait en être ainsi, vous pourriez le spécifier.
1032
1033 @lilypond[verbatim,quote]
1034 \score {
1035   \new Staff {
1036     c' d' e' f'
1037     \chords { d1:m7 b1:min7.5- }
1038   }
1039 }
1040 @end lilypond
1041
1042 @lilypond[verbatim,quote]
1043 \score {
1044   \new Staff {
1045     c' d' e' f'
1046     \chords { d1:m7 b1:min7.5- }
1047   }
1048   \layout {
1049     \context {
1050       \Staff
1051       \accepts "ChordNames"
1052     }
1053   }
1054 }
1055 @end lilypond
1056
1057 L'instruction @code{\denies} permet, lorsqu'un nouveau contexte reprend
1058 les définitions d'un contexte existant, d'en ajuster les composantes.
1059 C'est par exemple le cas du contexte @code{VaticanaStaff}, réplique du
1060 contexte @code{Staff} au sein duquel le contexte @code{VaticanaVoice} se
1061 substitue au contexte @code{Voice} dans la @qq{liste d'agrément}.
1062
1063 Gardez à l'esprit que, face à une instruction qui ne s'appliquerait à
1064 aucun contexte déjà existant, LilyPond créera un nouveau contexte
1065 implicite.  Ceci peut engendrer une nouvelle portée ou une autre
1066 partition.
1067
1068 @cindex alignAboveContext
1069 @cindex alignBelowContext
1070 @funindex alignAboveContext
1071 @funindex alignBelowContext
1072
1073 Il arrive qu'un contexte ne doive exister que pendant un court instant,
1074 ce qui est le cas par exemple pour une @emph{ossia}.  Le plus simple
1075 consiste alors à initialiser la définition d'un contexte à l'endroit
1076 approprié, en parallèle avec le fragment correspondant dans la musique
1077 principale.  Ce contexte temporaire sera par défaut positionné sous les
1078 autres contextes existants.  Le repositionner au-dessus du contexte
1079 « principal » demande de le définir ainsi :
1080
1081 @example
1082 @code{\new Staff \with @{ alignAboveContext = #"principal" @} }
1083 @end example
1084
1085 Il en va de même pour les contextes temporaires de paroles au sein d'un
1086 système à plusieurs portées comme un @code{ChoirStaff} lorsque, par
1087 exemple, un couplet supplémentaire apparaît à l'occasion d'une
1088 reprise.  Ce contexte de paroles temporaire se place par défaut sous les
1089 portées inférieures.  Lui adjoindre une instruction
1090 @code{alignBelowContext} dès son initialisation permet de l'accoler au
1091 contexte de paroles (nommé) qui contient le premier couplet.
1092
1093 Des exemples de repositionnement de contexte temporaire sont disponibles
1094 aux rubriques @rlearning{Expressions musicales imbriquées},
1095 @ref{Modification de portées individuelles} et
1096 @ref{Situations particulières en matière de paroles}.
1097
1098 @seealso
1099 Manuel d'initiation :
1100 @rlearning{Expressions musicales imbriquées}.
1101
1102 Manuel de notation :
1103 @ref{Modification de portées individuelles},
1104 @ref{Situations particulières en matière de paroles}.
1105
1106 Manuel d'utilisation :
1107 @rprogram{Apparition d'une portée supplémentaire}.
1108
1109 Fichiers d'initialisation :
1110 @file{ly/engraver-init.ly}.
1111
1112
1113 @node En quoi consiste la référence des propriétés internes
1114 @section En quoi consiste la référence des propriétés internes
1115 @translationof Explaining the Internals Reference
1116
1117 @menu
1118 * Navigation dans les références du programme::
1119 * Interfaces de rendu::
1120 * Détermination de la propriété d'un objet graphique (grob)::
1121 * Conventions de nommage::
1122 @end menu
1123
1124
1125 @node Navigation dans les références du programme
1126 @subsection Navigation dans les références du programme
1127 @translationof Navigating the program reference
1128
1129 @c TODO remove this (it's in the LM)
1130 @c Replace with more factual directions
1131
1132 Comment, par exemple, déplacer le doigté dans le fragment suivant ?
1133
1134 @lilypond[quote,relative=2,verbatim]
1135 c-2
1136 \stemUp
1137 f
1138 @end lilypond
1139
1140 Sur la page de la documentation relative aux doigtés, c'est-à-dire
1141 @ref{Doigtés}, se trouve l'indication suivante :
1142
1143 @quotation
1144 @strong{Voir aussi}
1145
1146 Référence des propriétés internes : @rinternals{Fingering}.
1147 @end quotation
1148
1149 @c  outdated info; probably will delete.
1150 @ignore
1151 This fragment points to two parts of the program reference: a page
1152 on @code{FingerEvent} and one on @code{Fingering}.
1153
1154 The page on @code{FingerEvent} describes the properties of the music
1155 expression for the input @code{-2}.  The page contains many links
1156 forward.  For example, it says
1157
1158 @quotation
1159 Accepted by: @rinternals{Fingering_engraver},
1160 @end quotation
1161
1162 @noindent
1163 That link brings us to the documentation for the Engraver, the
1164 plug-in, which says
1165
1166 @quotation
1167 This engraver creates the following layout objects: @rinternals{Fingering}.
1168 @end quotation
1169
1170 In other words, once the @code{FingerEvent}s are interpreted, the
1171 @code{Fingering_engraver} plug-in will process them.
1172 @end ignore
1173
1174 @ignore
1175 @c  I can't figure out what this is supposed to mean.  -gp
1176
1177 The @code{Fingering_engraver} is also listed to create
1178 @rinternals{Fingering} objects,
1179
1180 @c  old info?  it doesn't make any sense to me with our current docs.
1181 This is also the
1182 second bit of information listed under @b{See also} in the Notation
1183 manual.
1184 @end ignore
1185
1186 @ifnothtml
1187 Ladite référence est disponible au format HTML, ce qui rend la
1188 navigation bien plus aisée.  Il est possible soit de la lire en ligne,
1189 soit de la télécharger dans ce format.  La démarche présentée ici sera
1190 plus difficile à comprendre dans un document au format PDF.
1191 @end ifnothtml
1192
1193 Suivons le lien @rinternals{Fingering}.  En haut de la nouvelle page,
1194 on peut lire
1195
1196 @quotation
1197 Fingering objects are created by: @rinternals{Fingering_engraver} and
1198 @rinternals{New_fingering_engraver}.
1199 @end quotation
1200
1201 En d'autres termes, @emph{Les indications de doigtés}
1202 (@code{Fingering} en anglais) @emph{sont créées par les graveurs
1203 @rinternals{Fingering_engraver} et @rinternals{New_fingering_engraver}.}
1204
1205 En suivant derechef les liens propres à la référence du programme, on
1206 suit en fait le cheminement qui aboutit à la création de la partition :
1207
1208 @itemize
1209
1210 @item @rinternals{Fingering}:
1211 @rinternals{Fingering} objects are created by:
1212 @rinternals{Fingering_engraver}
1213
1214 @item @rinternals{Fingering_engraver}:
1215 Music types accepted: @rinternals{fingering-event}
1216
1217 @item @rinternals{fingering-event}:
1218 Music event type @code{fingering-event} is in Music expressions named
1219 @rinternals{FingeringEvent}
1220 @end itemize
1221
1222 Ce cheminement se produit, bien sûr, en sens inverse : nous sommes
1223 ici partis du résultat, et avons abouti aux évènements (en anglais
1224 @emph{Events}) engendrés par le fichier d'entrée.  L'inverse est
1225 également possible : on peut partir d'un évènement, et suivre le
1226 cheminement de LilyPond qui aboutit à la création d'un ou plusieurs
1227 objets graphiques.
1228
1229 La référence des propriétés internes peut également se parcourir comme
1230 un document normal. On y trouve des chapitres tels que
1231 @ifhtml
1232 @rinternals{Music definitions},
1233 @end ifhtml
1234 @ifnothtml
1235 @code{Music definitions}
1236 @end ifnothtml
1237 @rinternals{Translation}, ou encore @rinternals{Backend}.  Chaque
1238 chapitre recense toutes les définitions employées, et les propriétés
1239 sujettes à ajustements.
1240
1241 @c -- what about adding a link to the glossary here ? -vv
1242 La Référence des propriétés internes n'est pas traduite en français --
1243 notamment du fait qu'elle est en évolution constante, tout comme
1244 LilyPond.  En revanche, les termes musicaux font l'objet d'un
1245 @rglosnamed{Top, glossaire} fort utile pour les utilisateurs
1246 francophones.
1247
1248
1249 @node Interfaces de rendu
1250 @subsection Interfaces de rendu
1251 @translationof Layout interfaces
1252
1253 @cindex interfaces de rendu
1254 @cindex rendu, interfaces de
1255 @cindex objets graphiques
1256
1257 Tous les éléments de notation sont considérés comme des objets
1258 graphiques (en anglais @emph{Graphical Object}, d'où le diminutif
1259 @emph{Grob}).  Chaque objet est doté d'un certain nombre de propriétés
1260 (l'épaisseur du trait, l'orientation etc.), et lié à d'autres objets.
1261 Le fonctionnement de ces objets est décrit en détail dans
1262 @rinternals{grob-interface}.
1263
1264 Prenons l'exemple des doigtés (en anglais @emph{Fingering}).  La page
1265 @code{Fingering} de la Référence des propriétés internes établit une
1266 liste de définitions propres à ce type d'objet :
1267
1268 @quotation
1269 @code{padding} (dimension, in staff space):
1270
1271 @code{0.5}
1272 @end quotation
1273
1274 @noindent
1275 Ce qui signifie que les doigtés doivent être maintenus à une certaine
1276 distance (@emph{padding}) des notes : 0,5 unités @emph{staff-space}
1277 (espace de portée).
1278
1279 Chaque objet peut avoir plusieurs attributs, en tant qu'élément
1280 typographique ou musical.  Ainsi, un doigté (objet @emph{Fingering})
1281 possède les attributs suivants :
1282
1283 @itemize
1284 @item
1285 Sa taille ne dépend pas de l'espacement horizontal, contrairement aux
1286 liaisons ou ligatures.
1287
1288 @item
1289 C'est du texte -- un texte vraiment court, certes.
1290
1291 @item
1292 Ce texte est imprimé au moyen d'une fonte, contrairement aux liaisons ou
1293 ligatures.
1294
1295 @item
1296 Sur l'axe horizontal, le centre de ce symbole doit être aligné avec le
1297 centre de la note.
1298
1299 @item
1300 Sur l'axe vertical, le symbole doit être proche de la note et de la
1301 portée.
1302
1303 @item
1304 Sur l'axe vertical encore, il doit également s'ordonner avec les
1305 éventuels autres symboles, ponctuations ou éléments textuels.
1306 @end itemize
1307
1308 Faire appliquer ces différents attributs est le rôle des
1309 @emph{interfaces}, que l'on trouve en bas de la page
1310 @rinternals{Fingering}.
1311
1312 @quotation
1313 This object supports the following interfaces:
1314 @rinternals{item-interface},
1315 @rinternals{self-alignment-interface},
1316 @rinternals{side-position-interface}, @rinternals{text-interface},
1317 @rinternals{text-script-interface}, @rinternals{font-interface},
1318 @rinternals{finger-interface}, and @rinternals{grob-interface}.
1319 @end quotation
1320
1321 @noindent
1322 En français,
1323
1324 @quotation
1325 Cet objet admet les interfaces suivantes :
1326 @end quotation
1327
1328 Suit la liste des interfaces en question, présentées comme autant de
1329 liens qui conduisent aux pages dédiées à chacune d'entre elles.
1330 Chaque interface est dotée d'un certain nombre de propriétés, dont
1331 certaines peuvent être modifiées, et d'autres non (les @emph{Internal
1332 properties}, ou propriétés internes).
1333
1334 Pour aller encore plus loin, plutôt que de simplement parler de l'objet
1335 @code{Fingering}, ce qui ne nous avance pas à grand chose, on peut aller
1336 explorer son âme même, dans les fichiers source de LilyPond (voir
1337 @rlearning{Autres sources de documentation}), en l'occurrence le fichier
1338 @file{scm/define-grobs.scm} :
1339
1340 @example
1341 (Fingering
1342   . ((padding . 0.5)
1343      (avoid-slur . around)
1344      (slur-padding . 0.2)
1345      (staff-padding . 0.5)
1346      (self-alignment-X . 0)
1347      (self-alignment-Y . 0)
1348      (script-priority . 100)
1349      (stencil . ,ly:text-interface::print)
1350      (direction . ,ly:script-interface::calc-direction)
1351      (font-encoding . fetaText)
1352      (font-size . -5)           ; don't overlap when next to heads.
1353      (meta . ((class . Item)
1354      (interfaces . (finger-interface
1355                     font-interface
1356                     text-script-interface
1357                     text-interface
1358                     side-position-interface
1359                     self-alignment-interface
1360                     item-interface))))))
1361 @end example
1362
1363 @noindent
1364 @dots{}où l'on découvre que l'objet @code{Fingering} n'est rien de plus
1365 qu'un amas de variables et de réglages.  La page de la Référence des
1366 propriétés internes est en fait directement engendrée par cette
1367 définition.
1368
1369
1370 @node Détermination de la propriété d'un objet graphique (grob)
1371 @subsection Détermination de la propriété d'un objet graphique (grob)
1372 @translationof Determining the grob property
1373
1374 @c TODO remove this (it's in the LM)
1375 @c Replace with more factual directions
1376
1377 Nous voulions changer la position du chiffre @b{2} dans le fragment
1378 suivant :
1379
1380 @lilypond[quote,relative=2,verbatim]
1381 c-2
1382 \stemUp
1383 f
1384 @end lilypond
1385
1386 Dans la mesure où le @b{2} est placé, verticalement, à proximité de la
1387 note qui lui correspond, nous allons devoir trouver l'interface en
1388 charge de ce placement, qui se trouve être
1389 @code{side-position-interface}.  Sur la page de cette interface, on peut
1390 lire :
1391
1392 @quotation
1393 @code{side-position-interface}
1394
1395 Position a victim object (this one) next to other objects (the
1396 support).  The property @code{direction} signifies where to put the
1397 victim object relative to the support (left or right, up or down?)
1398 @end quotation
1399
1400 @noindent
1401 Ce qui signifie
1402 @quotation
1403 @code{side-position-interface}
1404
1405 Placer l'objet affecté à proximité d'autres objets.  La propriété
1406 @code{direction} indique où positionner l'objet (à droite ou à gauche,
1407 en haut ou en bas).
1408 @end quotation
1409
1410 @cindex padding
1411 @noindent
1412 En dessous de cette description se trouve décrite la variable
1413 @code{padding} :
1414
1415 @quotation
1416 @table @code
1417 @item padding
1418 (dimension, in staff space)
1419
1420 Add this much extra space between objects that are next to each other.
1421 @end table
1422 @end quotation
1423
1424 @noindent
1425 Ce qui signifie
1426 @quotation
1427 Ajouter tel espace supplémentaire entre des objets proches les uns des
1428 autres.
1429 @end quotation
1430
1431 @noindent
1432 En augmentant la valeur de @code{padding}, on peut donc éloigner le
1433 doigté de la note.  La commande suivante insère trois unités d'espace
1434 vide entre la note et le doigté :
1435
1436 @example
1437 \once \override Voice.Fingering #'padding = #3
1438 @end example
1439
1440 En ajoutant cette commande avant la création du doigté (de l'objet
1441 @code{Fingering}), donc avant @code{c2}, on obtient le résultat
1442 suivant :
1443
1444 @lilypond[quote,relative=2,verbatim]
1445 \once \override Voice.Fingering #'padding = #3
1446 c-2
1447 \stemUp
1448 f
1449 @end lilypond
1450
1451 Dans le cas présent, le réglage intervient dans le contexte @code{Voice},
1452 ce qui pouvait également se déduire de la Référence des propriétés
1453 internes, où la page du graveur @rinternals{Fingering_engraver}
1454 indique :
1455
1456 @quotation
1457 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
1458 @end quotation
1459
1460 @noindent
1461 Ce qui signifie
1462 @quotation
1463 Le graveur Fingering_engraver fait partie des contextes : @dots{}
1464 @rinternals{Voice}
1465 @end quotation
1466
1467
1468 @node Conventions de nommage
1469 @subsection Conventions de nommage
1470 @translationof Naming conventions
1471
1472 Afin de s'y retrouver plus aisément et d'éviter les erreurs de frappe,
1473 voici quelques conventions en matière de nommage :
1474
1475 @itemize
1476 @item fonctions scheme :
1477  minuscule-avec-trait-d-union (y compris noms en mot-unique)
1478 @item fonctions scheme :
1479  ly:plus-style-scheme
1480 @item événements, classes et propriétés musicaux :
1481  identique-aux-fonctions-scheme
1482 @item interfaces d'objet graphique :
1483  style-scheme
1484 @item propriétés d'arrière plan :
1485  style-scheme (mais X et Y pour les axes)
1486 @item contextes (ainsi que MusicExpressions et grobs) :
1487  Capitale initiale ou Camélisation (CamelCase)
1488 @item propriétés de contexte :
1489  minusculeSuivieDeCamélisation
1490 @item graveurs :
1491  Capitale_initiale_puis_minuscules_séparées_par_un_souligné
1492 @end itemize
1493
1494 Les questions que vous devez vous poser sont :
1495 @itemize
1496 @item Qu'est-ce qui relève des conventions, et qu'est-ce qui relève de
1497 la règle ?
1498 @item Qu'est-ce qui relève des règles du langage sous-jacent, et
1499 qu'est-ce qui est propre à LilyPond ?
1500 @end itemize
1501
1502
1503 @node Modification de propriétés
1504 @section Modification de propriétés
1505 @translationof Modifying properties
1506
1507 @c TODO change the menu and subsection node names to use
1508 @c backslash once the new macro to handle the refs
1509 @c is available.  Need to find and change all refs at
1510 @c the same time. -td
1511
1512 @menu
1513 * Vue d'ensemble de la modification des propriétés::
1514 * La commande de fixation (set)::
1515 * La commande de dérogation (override)::
1516 * La commande d'affinage (tweak)::
1517 * set ou override::
1518 * Modification de listes associatives::
1519 @end menu
1520
1521
1522 @node Vue d'ensemble de la modification des propriétés
1523 @subsection Vue d'ensemble de la modification des propriétés
1524 @translationof Overview of modifying properties
1525
1526 Chaque contexte est chargé de créer plusieurs types d'objets graphiques.
1527 Il contient également les réglages nécessaires pour chacun de ces
1528 objets.  Si l'on modifie ces réglages, les objets n'auront plus la même
1529 apparence.
1530
1531 Les contextes comportent deux types différents de propriétés : des
1532 propriétés de contexte et des propriétés d'objet graphique.  Les
1533 propriétés de contexte sont celles qui s'appliqueront globalement au
1534 contexte en tant que tel ; elles gèrent la manière dont le contexte
1535 apparaîtra.  Les propriétés d'objet graphique, par contre, s'appliquent
1536 à des types particuliers d'objet qui apparaissent dans le contexte en
1537 question.
1538
1539 Les commandes @code{\set} et @code{\unset} permettent de modifier les
1540 valeurs des propriétés de contexte.  Les commandes @code{\override} et
1541 @code{\revert} permettent de modifier les valeurs des propriétés des
1542 objets graphiques.
1543
1544 @ignore
1545 La syntaxe employée pour ce faire est
1546
1547 @example
1548 \override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur}
1549 @end example
1550
1551 Ici @var{objet} est un objet graphique, tel que @code{Stem} (les hampes)
1552 ou @code{NoteHead} (les têtes de note) ; @var{propriété} est une
1553 variable (désignée par un symbole, ce qui explique l'apostrophe)
1554 employée par le système de mise en page.  La sous-section
1555 @ref{Élaboration d'une retouche} vous aidera à savoir quoi mettre à la
1556 place de @var{objet}, @var{propriété} et @var{valeur} ; notre propos
1557 n'est ici que d'examiner l'emploi de cette commande.
1558
1559 La commande suivante :
1560
1561 @verbatim
1562 \override Staff.Stem #'thickness = #4.0
1563 @end verbatim
1564
1565 @noindent
1566 rend les hampes plus épaisses (la valeur par défaut est 1.3, ce qui
1567 signifie qu'elles sont 1,3 fois plus épaisses que les lignes de la
1568 portée).  Dans la mesure où nous avons indiqué @code{Staff} comme
1569 contexte, ce réglage ne s'appliquera qu'à la portée courante ; les
1570 autres portées demeureront intactes.
1571
1572 @lilypond[quote,verbatim,relative=2,fragment]
1573 c4
1574 \override Staff.Stem #'thickness = #4.0
1575 c4
1576 c4
1577 c4
1578 @end lilypond
1579
1580 La commande @code{\override} modifie donc la définition de l'objet
1581 @code{Stem} dans le contexte @code{Staff} ; toutes les hampes qui
1582 suivent seront affectées.
1583
1584 Tout comme avec la commande @code{\set}, l'argument @var{contexte} peut
1585 être omis, auquel cas le contexte par défaut (ici, @code{Voice}) sera
1586 employé.  La commande @code{\once} permet de n'appliquer la modification
1587 qu'une seule fois.
1588
1589 @lilypond[quote,fragment,verbatim,relative=2]
1590 c4
1591 \once \override Stem #'thickness = #4.0
1592 c4
1593 c4
1594 @end lilypond
1595
1596 La commande @code{\override} doit être entrée @emph{avant} l'objet
1597 concerné.  Ainsi, lorsque l'on veut altérer un objet qui se prolonge,
1598 tel qu'une liaison, une ligature ou tout autre objet dit @emph{Spanner},
1599 la commande @code{\override} doit être saisie avant que l'objet soit
1600 créé.
1601
1602 @lilypond[quote,fragment,verbatim,relative=2]
1603 \override Slur #'thickness = #3.0
1604 c8[( c
1605 \override Beam #'beam-thickness = #0.6
1606 c8 c])
1607 @end lilypond
1608
1609 @noindent
1610 Dans cet exemple, la liaison (@emph{Slur}) est épaissie, mais non la
1611 ligature (@emph{Beam}).  En effet, le code qui lui est relatif n'a pas
1612 été inséré avant le début de la ligature, et demeure donc sans effet.
1613
1614 De même que la commande @code{\unset}, la commande @code{\revert} défait
1615 ce qui a été fait par une commande @code{\override}.  Tout comme avec
1616 @code{\unset}, elle ne peut annuler que les réglages effectués dans le
1617 même contexte.  Ainsi dans l'exemple suivant, la commande @code{\revert}
1618 est sans effet.
1619
1620 @example
1621 \override Voice.Stem #'thickness = #4.0
1622 \revert Staff.Stem #'thickness
1623 @end example
1624
1625 Il existe, à l'intérieur même de certaines propriétés, des options que
1626 l'on nomme @qq{sous-propriétés}.  La syntaxe est alors
1627
1628 @c leave this as a long long
1629 @example
1630 \override @var{contexte}.@var{objet} #'@var{propriété} #'@var{sous-propriété} = #@var{valeur}
1631 @end example
1632
1633 @noindent
1634 Ainsi, par exemple :
1635
1636 @example
1637 \override Stem #'(details beamed-lengths) = #'(4 4 3)
1638 @end example
1639
1640 @end ignore
1641
1642 @seealso
1643 Référence des propriétés internes :
1644 @rinternals{Backend},
1645 @rinternals{All layout objects},
1646 @rinternals{OverrideProperty},
1647 @rinternals{RevertProperty},
1648 @rinternals{PropertySet}.
1649
1650 @knownissues
1651 La sous-couche Scheme ne vérifie pas la saisie des propriétés de façon
1652 très stricte.  Des références cycliques dans des valeurs Scheme peuvent
1653 de ce fait interrompre ou faire planter le programme -- ou bien les
1654 deux.
1655
1656
1657 @node La commande de fixation (set)
1658 @subsection La commande de fixation @code{@bs{}set}
1659 @translationof The set command
1660
1661 @cindex propriétés
1662 @cindex modifier des propriétés
1663 @funindex \set
1664
1665 Chaque contexte peut avoir plusieurs @strong{propriétés}, c'est-à-dire
1666 des variables qu'il inclut.  Ces dernières peuvent être modifiées @qq{à
1667 la volée}, c'est-à-dire pendant que la compilation s'accomplit.  C'est
1668 ici le rôle de la commande @code{\set}.
1669
1670 @example
1671 \set @var{contexte}.@var{propriété} = #@var{valeur}
1672 @end example
1673
1674 Dans la mesure où @var{valeur} est constituée d'un objet Scheme, elle
1675 doit être précédée du caractère @code{#}.
1676
1677 Les propriétés des contextes se libellent sous la forme
1678 @code{minusculeMajuscule}.  Leur rôle consiste principalement à traduire
1679 la musique en notation : par exemple, @code{localKeySignature}
1680 déterminera quand imprimer une altération accidentelle, et
1681 @code{measurePosition} quand imprimer une barre de mesure.  La valeur
1682 des propriétés des contextes peuvent évoluer au fur et à mesure que l'on
1683 avance dans le morceau -- @code{measurePosition} en est l'illustration
1684 parfaite.
1685
1686 Ainsi la propriété de contexte @code{skipBars} permet de condenser les
1687 mesures vides de notes, en des silences multimesures.  Il s'agit d'un
1688 objet Scheme, auquel on attribue la valeur booléenne @qq{vrai},
1689 c'est-à-dire la lettre @code{#t} pour @qq{True} en anglais :
1690
1691 @lilypond[quote,verbatim,relative=2]
1692 R1*2
1693 \set Score.skipBars = ##t
1694 R1*2
1695 @end lilypond
1696
1697 Si l'argument @var{contexte} n'est pas spécifié, alors la propriété
1698 cherchera à s'appliquer dans le contexte le plus restreint où elle est
1699 employée : le plus souvent  @code{ChordNames}, @code{Voice} ou
1700 @code{Lyrics}.
1701
1702 @lilypond[quote,verbatim,relative=2]
1703 \set Score.autoBeaming = ##f
1704 <<
1705   {
1706     e8 e e e
1707     \set autoBeaming = ##t
1708     e8 e e e
1709   } \\ {
1710     c8 c c c c8 c c c
1711   }
1712 >>
1713 @end lilypond
1714
1715 Ce changement étant appliqué @qq{à la volée}, il n'affecte que le second
1716 groupe de notes.
1717
1718 Notez que le contexte le plus restreint n'est pas toujours le bon, et
1719 peut ne pas contenir la propriété qui vous intéresse : ainsi, la
1720 propriété @code{skipBars}, évoquée plus haut, ne relève pas du contexte
1721 @code{Voice}, mais du contexte @code{Score} -- le code suivant ne
1722 fonctionnera pas.
1723
1724 @lilypond[quote,verbatim,relative=2]
1725 R1*2
1726 \set skipBars = ##t
1727 R1*2
1728 @end lilypond
1729
1730 Les contextes s'organisent de façon hiérarchique : aussi, lorsqu'un
1731 contexte de niveau supérieur est spécifié (par exemple @code{Staff}), la
1732 propriété sera modifiée dans tous les contextes inférieurs (tous les
1733 contextes @code{Voice}, par exemple) qu'il contient.
1734
1735 @funindex \unset
1736
1737 La commande @code{\unset} permet d'annuler la définition d'une
1738 propriété :
1739
1740 @example
1741 \unset @var{contexte}.@var{propriété}
1742 @end example
1743
1744 @noindent
1745 si et seulement si cette @var{propriété} a été définie dans ce
1746 @var{contexte} précis.  En d'autres termes, la commande @code{\unset}
1747 doit impérativement affecter le même contexte que la commande
1748 @code{\set} d'origine, même en cas d'imbrication.
1749
1750 @lilypond[quote,verbatim,relative=2]
1751 \set Score.autoBeaming = ##t
1752 <<
1753   {
1754     \unset autoBeaming
1755     e8 e e e
1756     \unset Score.autoBeaming
1757     e8 e e e
1758   } \\ {
1759     c8 c c c c8 c c c
1760   }
1761 >>
1762 @end lilypond
1763
1764 Si l'on se trouve dans le contexte le plus restreint, il n'est pas
1765 obligatoire, là encore, de spécifier le @var{contexte}.  Ainsi, les deux
1766 lignes suivantes
1767
1768 @example
1769 \set Voice.autoBeaming = ##t
1770 \set autoBeaming = ##t
1771 @end example
1772
1773 @noindent
1774 sont équivalentes elles apparaissent dans un contexte @code{Voice}.
1775
1776 @cindex \once
1777
1778 Pour modifier une propriété de façon à ce que l'accommodement ne
1779 s'applique qu'une seule fois, il convient d'adjoindre l'instruction
1780 @code{\once} à la commande @code{\set} :
1781
1782 @lilypond[quote,verbatim,relative=2]
1783 c4
1784 \once \set fontSize = #4.7
1785 c4
1786 c4
1787 @end lilypond
1788
1789 Ici le changement de taille est annulé aussitôt après la note concernée.
1790
1791 La référence des propriétés internes contient une description exhaustive
1792 de toutes les propriétés, contexte par contexte : voir
1793 @ifhtml
1794 @rinternals{Tunable context properties}.
1795 @end ifhtml
1796 @ifnothtml
1797 Translation @expansion{} Tunable context properties.
1798 @end ifnothtml
1799
1800
1801 @seealso
1802 Référence des propriétés internes :
1803 @rinternals{Tunable context properties}.
1804
1805
1806 @node La commande de dérogation (override)
1807 @subsection La commande de dérogation @code{@bs{}override}
1808 @translationof The override command
1809
1810 @cindex grob, propriétés
1811 @cindex objet graphique, propriétés
1812 @cindex propriétés d'un grob
1813 @cindex propriétés d'objet graphique
1814
1815 @funindex \override
1816
1817 La commande @code{\override} permet de modifier la mise en forme des
1818 objets graphiques.  Les descriptions d'objet graphique, dont les noms
1819 commencent par une majuscule, puis comprennent une ou plusieurs
1820 majuscules (de style @code{TotoTata}), contiennent les réglages @qq{par
1821 défaut} pour les objets graphiques.  Ces réglages sont sous forme de
1822 liste Scheme ; on peut les consulter dans le fichier
1823 @file{scm/define-grobs.scm}.
1824
1825 @code{\override} est en fait un raccourci :
1826
1827 @example
1828 \override @var{contexte}.@var{NomObjet} #'@var{propriété} = #@var{valeur}
1829 @end example
1830
1831 @noindent
1832 plus ou moins équivalent à
1833
1834 @c  leave this long line -gp
1835 @example
1836 \set @var{contexte}.@var{NomObjet}  =
1837   #(cons (cons '@var{propriété} @var{valeur})
1838          <valeur antérieure de @var{contexte}.@var{NomObjet}>)
1839 @end example
1840
1841 La valeur de @var{contexte}.@var{NomObjet} (une liste associative, ou
1842 @emph{alist}) permet d'initialiser les propriétés des objets un par un.
1843 Les objets eux-mêmes ont leurs propriétés, dont les noms, dans la
1844 tradition du langage Scheme, comprennent un trait d'union
1845 (@code{toto-titi}).  Ces propriétés internes changent constamment au
1846 cours de la mise en page : en fait, la gravure d'une page n'est autre
1847 que le calcul de toutes ces propriétés au moyen de fonctions de rappel.
1848
1849 Nous pouvons donc par exemple accroître l'épaisseur des hampes en jouant
1850 sur la propriété @code{thickness} de l'objet @code{stem} :
1851
1852 @lilypond[quote,verbatim,relative=2]
1853 c4 c
1854 \override Voice.Stem #'thickness = #3.0
1855 c4 c
1856 @end lilypond
1857
1858 Lorsqu'aucun contexte n'est spécifié dans une clause @code{\override},
1859 celle-ci s'appliquera au contexte le plus bas :
1860
1861 @lilypond[quote,verbatim,relative=2]
1862 { \override Staff.Stem #'thickness = #3.0
1863   <<
1864     {
1865       e4 e
1866       \override Stem #'thickness = #0.5
1867       e4 e
1868     } \\ {
1869       c4 c c c
1870     }
1871   >>
1872 }
1873 @end lilypond
1874
1875 @cindex annulation d'un override
1876 @cindex override, annulation des effets
1877 @funindex \revert
1878
1879 Les effets d'un @code{\override} prennent fin à l'aide de l'instruction
1880 @code{\revert} :
1881
1882 @lilypond[quote,verbatim,relative=2]
1883 c4
1884 \override Voice.Stem #'thickness = #3.0
1885 c4 c
1886 \revert Voice.Stem #'thickness
1887 c4
1888 @end lilypond
1889
1890 Les effets d'un @code{\override} ou d'un @code{\revert} s'appliquent dès
1891 l'endroit où ils apparaissent, et à tous les objets dans le contexte
1892 mentionné :
1893
1894 @lilypond[quote,verbatim,relative=2]
1895 {
1896   <<
1897     {
1898       e4
1899       \override Staff.Stem #'thickness = #3.0
1900       e4 e e
1901     } \\ {
1902       c4 c c
1903       \revert Staff.Stem #'thickness
1904       c4
1905     }
1906   >>
1907 }
1908 @end lilypond
1909
1910 @cindex override ponctuel
1911 @funindex \once
1912
1913 L'instruction @code{\override} doit être précédée d'un @code{\once} dès
1914 lors que les effets de l'accommodement ne concernent que l'événement qui
1915 la suit directement :
1916
1917 @lilypond[quote,verbatim,relative=2]
1918 {
1919   <<
1920     {
1921       \override Stem #'thickness = #3.0
1922       e4 e e e
1923     } \\ {
1924       c4
1925       \once \override Stem #'thickness = #3.0
1926       c4 c c
1927     }
1928   >>
1929 }
1930 @end lilypond
1931
1932 @ignore
1933 Les commandes permettant de modifier l'apparence de la partition
1934 ressemblent en général à
1935
1936 @example
1937 \override Voice.Stem #'thickness = #3.0
1938 @end example
1939
1940 @noindent
1941 Pour élaborer un réglage de ce type, on a besoin de connaître
1942 précisément :
1943
1944 @itemize
1945 @item le contexte : ici @code{Voice} (la voix).
1946 @item l'objet à affecter : ici @code{Stem} (les hampes).
1947 @item la propriété à modifier : ici @code{thickness} (l'épaisseur
1948 du trait).
1949 @item la valeur désirée : ici @code{3.0} (par défaut, elle est de 1.3).
1950 @end itemize
1951
1952 Certaines @qq{sous-propriétés} sont parfois contenues dans une
1953 propriété.  La commande devient alors :
1954
1955 @example
1956 \override Stem #'(details beamed-lengths) = #'(4 4 3)
1957 @end example
1958
1959 @cindex documentation exhaustive
1960 @cindex trouver des objets graphiques
1961 @cindex objets graphiques, description
1962 @cindex régler
1963 @funindex \override
1964
1965 Pour bien des propriétés, quel que soit le type de valeur requise,
1966 attribuer la valeur @qq{faux} (@code{##f} en Scheme) reviendra à
1967 désactiver complètement l'action de la propriété qui se trouve ainsi
1968 purement ignorée par LilyPond.  Cela peut s'avérer fort utile pour des
1969 propriétés causant des désagréments.
1970
1971 @end ignore
1972
1973 @seealso
1974 Référence des propriétés internes :
1975 @rinternals{Backend}
1976
1977
1978 @node La commande d'affinage (tweak)
1979 @subsection La commande d'affinage @code{@bs{}tweak}
1980 @translationof The tweak command
1981
1982 @cindex retouche (tweak)
1983 @cindex affinage (tweak)
1984 @cindex ajustement (tweak)
1985 @cindex tweak (retouche, affinage)
1986 @funindex \tweak
1987
1988 L'utilisation d'un @code{\override} pour modifier les propriétés d'un
1989 objet graphique affectera toutes les instances de l'objet en question au
1990 sein du contexte, et ce dès son apparition.  Il peut parfois être
1991 préférable de n'affecter qu'un seul objet en particulier plutôt que tous
1992 les objets du contexte.  C'est là rôle de l'instruction @code{\tweak},
1993 dont la syntaxe est :
1994
1995 @example
1996 \tweak @var{objet-de-rendu} #'@code{objet-propriété} @code{valeur}
1997 @end example
1998
1999 Mention de l'@var{objet-de-rendu} est optionnel.
2000 La commande @code{\tweak} s'applique à l'objet qui apparaît
2001 immédiatement après @code{valeur}.
2002
2003 @ignore
2004 Dans certains cas, on peut passer par un raccourci pour arranger les
2005 objets graphiques.  Lorsqu'un objet est directement engendré par un
2006 élément distinct du fichier source, on peut utiliser la commande
2007 @code{\tweak}.
2008
2009 Dans l'accord suivant, les notes sont modifiées une par une :
2010
2011 @lilypond[relative=2,verbatim,ragged-right]
2012 <
2013   c
2014   \tweak #'color #red
2015   d
2016   g
2017   \tweak #'duration-log #1 
2018    a
2019 >4
2020 -\tweak #'padding #8
2021 -^
2022 @end lilypond
2023
2024 Comme on peut le voir, les propriétés sont ici modifiées directement
2025 en même temps que les objets sont saisis.  Il n'est plus besoin de
2026 spécifier ni le nom de l'objet (@emph{grob}), ni le contexte dans lequel
2027 cela doit s'appliquer.  Ce procédé ne marche que pour des objets
2028 directement liés aux événements (@rinternals{Event}) du fichier source.
2029 Par exemple :
2030
2031 @itemize
2032 @item Les têtes de notes au sein d'un accord, qui sont directement
2033 engendrées par les hauteurs indiquées
2034
2035 @item Les signes d'articulation, engendrés par les indications de
2036 ponctuation.
2037 @end itemize
2038
2039 En revanche, les hampes ou les altérations sont engendrées par les têtes
2040 de notes, et non par des évènements dans le fichier source.  De même
2041 pour les clés, qui ne sont pas directement engendrées par le fichier
2042 source, mais plutôt par le changement d'une propriété interne.
2043
2044 En fait, très peu d'objets passent @emph{directement} du code source à
2045 la partition. Une note toute simple, par exemple @code{c4}, fait l'objet
2046 d'un traitement et n'est donc pas directement rendue ; c'est
2047 pourquoi le code suivant ne sera d'aucun effet :
2048
2049 @example
2050 \tweak #'color #red c4
2051 @end example
2052
2053 @noindent
2054 Voir pour plus de détails
2055 @rextend{Affichage d'expressions musicales}.
2056 @end ignore
2057
2058 Pour une introduction à la syntaxe et l'utilisation des retouches, voir
2059 le chapitre @rlearning{Méthodes de retouche}.
2060
2061 Lorsque plusieurs éléments de même nature surviennent au même instant,
2062 il devient impossible d'utiliser l'instruction @code{\override} pour
2063 n'en modifier qu'un seul individuellement, d'où l'intérêt de la commande
2064 @code{\tweak}.  Entre autres éléments qui sont susceptibles de se
2065 produire au même instant, nous citerons :
2066
2067 @c TODO expand to include any further uses of \tweak
2068 @itemize
2069 @item les têtes de notes au sein d'un accord,
2070 @item les signes d'articulation,
2071 @item les liaisons de prolongation sur des notes d'un accord,
2072 @item les crochets de nolets démarrant au même instant
2073 @end itemize
2074
2075 @c TODO add examples of these
2076
2077 Dans l'exemple suivant, l'une des têtes de note de l'accord est
2078 colorisée, et l'aspect d'une autre est changé.
2079
2080 @lilypond[relative=2,verbatim,quote]
2081 < c
2082   \tweak #'color #red
2083   d
2084   g
2085   \tweak #'duration-log #1
2086   a
2087 > 4
2088 @end lilypond
2089
2090 L'instruction @code{\tweak} permet aussi de modifier l'aspect d'une
2091 liaison :
2092
2093 @lilypond[verbatim,quote,relative=1]
2094 c-\tweak #'thickness #5 ( d e f)
2095 @end lilypond
2096
2097 La commande @code{\tweak} ne sera pleinement fonctionnelle que si elle
2098 est directement rattachée à l'objet auquel elle doit s'appliquer alors
2099 que le fichier source est converti en flux musical.  Vouloir modifier la
2100 globalité d'un accord est sans résultat dans la mesure où il ne
2101 constitue qu'un conteneur pour des événements musicaux et que tous les
2102 objets seront créés à partir d'événements appartenant à un
2103 @code{EventChord} (un événement d'accord) :
2104
2105 @lilypond[relative=2,verbatim,quote]
2106 \tweak #'color #red c4
2107 \tweak #'color #red <c e>4
2108 <\tweak #'color #red c>4
2109 @end lilypond
2110
2111 La commande @code{\tweak} simple ne saurait servir à modifier un élément
2112 qui ne serait pas explicitement mentionné dans le fichier source.  C'est
2113 notamment le cas des hampes, ligatures automatiques ou altérations, dans
2114 la mesure où elles seront ultérieurement générées et après les têtes de
2115 note (objets @code{NoteHead}, plutôt qu'au fil des éléments musicaux
2116 saisis.
2117
2118 De tels objets créés indirectement peuvent être ajustés que par une
2119 forme dévelppée de la commande @code{\tweak} :
2120
2121 @lilypond[relative=2,verbatim,quote]
2122 \tweak Stem #'color #red
2123 \tweak Beam #'color #green c8 e
2124 <c e \tweak Accidental #'font-size #-3 ges>4
2125 @end lilypond
2126
2127 La commande @code{\tweak} ne peut non plus servir à modifier clefs ou
2128 métriques, puisqu'elles seront immanquablement séparées du @code{\tweak}
2129 par l'insertion automatique d'autres éléments requis pour spécifier le
2130 contexte.
2131
2132 Plusieurs commandes @code{\tweak} en enfilade permettent d'affecter un
2133 même élément de notation :
2134
2135 @lilypond[verbatim,quote,relative=1]
2136 c
2137 -\tweak #'style #'dashed-line
2138 -\tweak #'dash-fraction #0.2
2139 -\tweak #'thickness #3
2140 -\tweak #'color #red
2141  \glissando
2142 f'
2143 @end lilypond
2144
2145 Vous pouvez examiner le flux musical généré par une portion d'un
2146 fichier source, y compris les éléments automatiquement insérés, en
2147 suivant les indications portées à la rubrique
2148 @rextend{Affichage d'expressions musicales}.  Ceci s'avère tout à fait
2149 approprié pour déterminer ce qui peut se modifier à l'aide d'un
2150 @code{\tweak} ou bien aider à rectifier votre source de telle sorte
2151 que le @code{\tweak} produise ses effets.
2152
2153 @seealso
2154 Manuel d'initiation :
2155 @rlearning{Méthodes de retouche}.
2156
2157 Manuel d'extension :
2158 @rextend{Affichage d'expressions musicales}.
2159
2160 @knownissues
2161
2162 @cindex tweak et points de contrôle
2163 @cindex points de contrôle et tweak
2164
2165 Lorsqu'il y a plusieurs liaisons de prolongation dans un accord, la
2166 commande @code{\tweak} ne s'applique qu'à la première.
2167
2168
2169 @node set ou override
2170 @subsection @code{\set} ou @code{\override}
2171 @translationof set versus override
2172
2173 @c TODO -- This section is probably unnecessary now.
2174
2175 @ignore
2176 Si les propriétés peuvent être modifiées de deux façons, par les
2177 commandes @code{\set} et @code{\override}, c'est qu'il y a deux types de
2178 propriétés.
2179
2180 La propriété @code{fontSize} est une exception : c'est un raccourci, qui
2181 équivaudrait à saisir @w{@code{\override @dots{} #'font-size}} pour tous
2182 les objets textuels.  Dans la mesure où il s'agit d'une manipulation
2183 très courante, une propriété spéciale a été créée.  Elle doit être
2184 modifiée avec la commande @code{\set}.
2185
2186 @end ignore
2187
2188
2189 @node Modification de listes associatives
2190 @subsection Modification de listes associatives
2191 @translationof Modifying alists
2192
2193 Certaines propriétés configurables par l'utilisateur se présentent en
2194 interne comme étant des listes associatives -- les puristes diront des
2195 @emph{alists}.  Une @emph{alist} est en fait constituée de plusieurs
2196 paires de @emph{clés} et @emph{valeurs} ; sa structure ressemble à :
2197
2198 @example
2199 '((@var{clé1} . @var{valeur1})
2200   (@var{clé2} . @var{valeur2})
2201   (@var{clé3} . @var{valeur3})
2202   @dots{})
2203 @end example
2204
2205 Dans le cas où cette liste représente les propriétés d'un objet
2206 graphique ou bien l'une des variables du bloc @code{\paper}, chaque clé
2207 peut être modifiée individuellement sans que cela n'affecte les autres.
2208
2209 Par exemple, pour réduire l'espacement entre deux portées adjacentes
2210 d'un même système, on utilisera la propriété @code{staff-staff-spacing}
2211 qui est attachée à l'objet graphique @code{StaffGrouper}.  Cette
2212 propriété est constituée d'une liste de quatre clés :
2213 @code{basic-distance}, @code{minimum-distance}, @code{padding} et
2214 @code{stretchability}.  Ses réglages par défaut tels que mentionnés à la
2215 rubrique @emph{Backend} de la référence des propriétés internes -- voir
2216 @rinternals{StaffGrouper} -- sont :
2217
2218 @example
2219 '((basic-distance . 9)
2220   (minimum-distance . 7)
2221   (padding . 1)
2222   (stretchability . 5))
2223 @end example
2224
2225 Afin de rapprocher nos deux portées, il suffit de réduire la valeur
2226 (@code{9}) de la clé @code{basic-distance} au niveau de celle de la clé
2227 @code{minimum-distance} (@code{7}).  La modification d'une seule clé
2228 individuellement peut se réaliser sous la forme d'une @emph{déclaration
2229 imbriquée} :
2230
2231 @lilypond[quote,verbatim]
2232 % default space between staves
2233 \new PianoStaff <<
2234   \new Staff { \clef treble c''1 }
2235   \new Staff { \clef bass   c1   }
2236 >>
2237
2238 % reduced space between staves
2239 \new PianoStaff \with {
2240   % this is the nested declaration
2241   \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
2242 } <<
2243   \new Staff { \clef treble c''1 }
2244   \new Staff { \clef bass   c1   }
2245 >>
2246 @end lilypond
2247
2248 Le recours à une déclaration imbriquée touchera la clé indiquée
2249 (@code{basic-distance} dans l'exemple ci-dessus) sans pour autant
2250 modifier les autres clés de la propriété considérée.
2251
2252 Considérons maintenant que nous souhaitions que les portées soient le
2253 plus proche possible les unes des autres, à la limite du chevauchement.
2254 Il suffirait de mettre les quatre clés à zéro.  Nous pourrions saisir
2255 quatre déclarations, chacune d'elles touchant une clé.  Nous pouvons
2256 tout aussi bien redéfinir la propriété en une seule clause, sous la
2257 forme d'une liste associative :
2258
2259 @lilypond[quote,verbatim]
2260 \new PianoStaff \with {
2261   \override StaffGrouper #'staff-staff-spacing =
2262     #'((basic-distance . 0)
2263        (minimum-distance . 0)
2264        (padding . 0)
2265        (stretchability . 0))
2266 } <<
2267   \new Staff { \clef treble c''1 }
2268   \new Staff { \clef bass   c1   }
2269 >>
2270 @end lilypond
2271
2272 N'oubliez pas que dès lors qu'une clé n'apparaît pas dans la liste, elle
2273 retourne à sa valeur @emph{sauf-mention-contraire}.  Autrement dit, dans
2274 le cas de @code{staff-staff-spacing} qui nous occupe, toutes les clés
2275 non mentionnées seront ramenées à zéro -- à l'exception de
2276 @code{stretchability} qui prend par défaut la valeur de
2277 @code{basic-distance}.  Les deux assertions suivantes sont donc
2278 équivalentes.
2279
2280 @example
2281 \override StaffGrouper #'staff-staff-spacing =
2282   #'((basic-distance . 7))
2283
2284 \override StaffGrouper #'staff-staff-spacing =
2285   #'((basic-distance . 7)
2286      (minimum-distance . 0)
2287      (padding . 0)
2288      (stretchability . 7))
2289 @end example
2290
2291 L'une des conséquences, parfois involontaire, de ceci est la suppression
2292 de réglages standards effectués par un fichier d'initialisation chargé à
2293 chaque compilation d'un fichier source.  Dans l'exemple précédent, les
2294 réglages standards de @code{padding} et @code{minimum-distance}, tels
2295 que déterminés par @file{scm/define-grobs.scm}, se voient ramenés à leur
2296 valeur @emph{si-non-définie} ; autrement dit, les deux clés sont mises à
2297 zéro.  La définition d'une propriété ou d'une variable sous forme de
2298 liste associative, quelle qu'en soit la taille, réinitialisera toujours
2299 les clés non mentionnées à leur valeur @emph{si-non-définie}.  Si telle
2300 n'est pas votre intention, nous vous recommandons alors de régler la
2301 valeur des clés individuellement par des déclarations imbriquées.
2302
2303 @warning{Les déclarations imbriquées ne sont pas fonctionnelles dans le
2304 cas des listes associatives des propriétés de contexte -- telles
2305 @code{beamExceptions}, @code{keySignature},
2306 @code{timeSignatureSettings}, etc.  Ces propriétés ne sont modifiables
2307 qu'au travers d'une complète redéfinition de leur liste associative.}
2308
2309
2310 @node Propriétés et contextes utiles
2311 @section Propriétés et contextes utiles
2312 @translationof Useful concepts and properties
2313
2314 @menu
2315 * Modes de saisie::
2316 * Direction et positionnement::
2317 * Distances et unités de mesure::
2318 * Propriétés des symboles de la portée::
2319 * Extenseurs et prolongateurs::
2320 * Visibilité des objets::
2321 * Styles de ligne::
2322 * Rotation des objets::
2323 @end menu
2324
2325
2326 @node Modes de saisie
2327 @subsection Modes de saisie
2328 @translationof Input modes
2329
2330 La manière dont sera interprétée la notation contenue dans un fichier
2331 source dépend du mode affecté à la saisie.
2332
2333 @strong{Mode accords}
2334
2335 Ce mode, activé par la commande @code{\chordmode}, permet d'interpréter
2336 les saisies comme étant des accords, qui seront imprimés sous forme
2337 de notes sur une portée -- voir @ref{Notation des accords}.
2338
2339 Le mode accords s'active aussi par la commande @code{\chords}, qui
2340 créera un contexte @code{ChordNames}.  Les saisies, interprétées comme
2341 étant des accords, seront alors rendues sous forme nominale dans ce
2342 contexte @code{ChordNames} -- voir @ref{Impression des noms d'accord}.
2343
2344 @strong{Mode percussions}
2345
2346 Ce mode, activé par la commande @code{\drummode}, permet d'interpréter
2347 les saisies comme étant de la notation pour percussions -- voir
2348 @ref{Notation de base pour percussions}.
2349
2350 Le mode percussions s'active aussi par la commande @code{\drums}, qui
2351 créera un contexte @code{DrumStaff}.  Les saisies, interprétées comme
2352 étant de la notation pour percussions, seront alors rendues sous
2353 forme symbolique sur une portée de percussions -- voir
2354 @ref{Notation de base pour percussions}.
2355
2356 @strong{Mode figures}
2357
2358 Ce mode, activé par la commande @code{\figuremode}, permet d'interpréter
2359 les saisies comme étant de la basse chiffrée (ou figurée) -- voir
2360 @ref{Saisie de la basse chiffrée}.
2361
2362 Le mode figures s'active aussi par la commande @code{\figures}, qui
2363 créera un contexte @code{FiguredBass}.  Les saisies interprétées comme
2364 étant de la basse chiffrée, seront alors rendues sous forme symbolique
2365 dans le contexte @code{FiguredBass} -- voir
2366 @ref{Introduction à la basse chiffrée}.
2367
2368 @strong{Mode frets et tablatures}
2369
2370 Il n'existe pas de mode spécifique pour saisir des symboles de fret ou
2371 de tablature.
2372
2373 Notes ou accords saisis en mode note puis affectés à un contexte
2374 @code{TabStaff} seront rendus sous forme de diagramme de tablature --
2375 voir @ref{Tablatures par défaut}.
2376
2377 Deux options différentes permettent d'obtenir des diagrammes de fret en
2378 surplomb d'une portée : directement à l'aide d'un contexte
2379 @code{FretBoards} -- voir @ref{Tablatures automatiques} -- ou en
2380 attachant aux notes des @emph{markups} créés par la commande
2381 @code{\fret-diagram} -- voir @ref{Tablatures sous forme d'étiquette}.
2382
2383 @strong{Mode paroles}
2384
2385 Ce mode, activé par la commande @code{\lyricmode}, permet d'interpréter
2386 les saisies comme étant des syllabes, ayant éventuellement une durée, et
2387 des indications habituelles aux paroles -- voir @ref{Musique vocale}.
2388
2389 Le mode paroles s'active aussi par la commande @code{\addlyrics}, qui
2390 créera un contexte @code{Lyrics} et ajoutera implicitement une commande
2391 @code{\lyricsto} afin d'associer les paroles qui suivent à la musique
2392 précédemment saisie.
2393
2394 @strong{Mode @emph{markup}}
2395
2396 Ce mode, activé par la commande @code{\markup}, permet d'interpréter les
2397 saisies comme étant des @emph{markups} (annotations ou étiquettes) --
2398 voir @rusernamed{Text markup commands,Commandes pour le mode markup}.
2399
2400
2401 @c silly work-around for texinfo broken-ness
2402 @c (@strong{Note...} causes a spurious cross-reference in Info)
2403 @b{Mode notes}
2404
2405 Le mode notes est le mode par défaut dans LilyPond.  Il peut aussi
2406 s'activer par la commande @code{\notemode}.  Les saisies seront
2407 interprétées comme étant des hauteurs, durées, @emph{markups} etc. qui
2408 seront rendues sous forme de notation musicale sur une portée.
2409
2410 Nul n'est besoin de spécifier le mode notes de manière explicite, hormis
2411 dans certaines situations particulières, notamment lorsque vous êtes en
2412 mode paroles, accords, ou tout autre mode, et que vous deviez insérer
2413 un élément qui ne serait disponible que grâce à la syntaxe du mode
2414 notes.
2415
2416 Il en va ainsi lorsque, par exemple, vous voulez ajouter une indication
2417 de nuance au numéro de couplet d'un chant choral :
2418
2419 @lilypond[verbatim,relative=2,quote]
2420 { c4 c4 c4 c4 }
2421 \addlyrics {
2422   \notemode{\set stanza = \markup{ \dynamic f 1. } }
2423   To be sung loudly
2424 }
2425 \addlyrics {
2426   \notemode{\set stanza = \markup{ \dynamic p 2. } }
2427   To be sung quietly
2428 }
2429 @end lilypond
2430
2431
2432 @node Direction et positionnement
2433 @subsection Direction et positionnement
2434 @translationof Direction and placement
2435
2436 En matière de typographie musicale, l'orientation et le positionnement
2437 de nombreux éléments est affaire de goût.  Par exemple, les hampes
2438 peuvent être ascendantes ou descendantes, les paroles, nuances ou autres
2439 indications d'expression peuvent apparaître au-dessus ou en dessous de
2440 la portée, les indications textuelles s'alignent tantôt par la gauche,
2441 tantôt par la droite, ou être centrées.  La plupart de ces choix peuvent
2442 être laissés à l'appréciation de LilyPond.  Il peut être préférable,
2443 dans certains cas, d'imposer l'orientation ou le positionnement des
2444 éléments.
2445
2446 @strong{Indicateurs de position d'une articulation}
2447
2448 Certains positionnements sont opérés par défaut -- toujours au-dessus ou
2449 toujours en dessous (nuances ou points d'orgue) -- alors que d'autres
2450 alterneront selon l'orientation des hampes (liaisons ou accents).
2451
2452 @c TODO Add table showing these
2453
2454 Le positionnement par défaut peut être outrepassé à l'aide d'un
2455 @emph{indicateur de positionnement}, qui vient s'insérer juste avant
2456 l'articulation.  LilyPond met à votre disposition trois indicateurs de
2457 positionnement : @code{^} (pour @qq{au-dessus}), @code{_} (pour
2458 @qq{au-dessous}), et @code{-} (pour @qq{appliquer le positionnement par
2459 défaut}).  L'indicateur de positionnement n'est pas obligatoire ;
2460 LilyPond considère alors qu'il y a un @code{-}.  Un indicateur de
2461 positionnement est cependant @strong{obligatoire} dans les cas
2462 suivants :
2463
2464 @itemize
2465 @item une commande @code{\tweak},
2466 @item une commande @code{\markup},
2467 @item une commande @code{\tag},
2468 @item les indications de corde, par exemple @code{-"corde"},
2469 @item les indications de doigté, par exemple @w{@code{-1}},
2470 @item les raccourcis d'articulation, par exemple @w{@code{-.}},
2471 @w{@code{->}} ou @w{@code{--}}.
2472 @end itemize
2473
2474 Les indicateurs de positionnement n'affectent que la note qui suit :
2475
2476 @lilypond[verbatim,quote,relative=2]
2477 c2( c)
2478 c2_( c)
2479 c2( c)
2480 c2^( c)
2481 @end lilypond
2482
2483 @strong{La propriété @code{direction}}
2484
2485 Le positionnement ou l'orientation de nombreux objets de rendu sont
2486 gérés par la propriété @code{direction}.
2487
2488 La propriété @code{direction} peut prendre la valeur @code{1}, qui
2489 signifie @qq{ascendant} ou @qq{au-dessus}, ou @w{@code{-1}}, qui
2490 signifie @qq{descendant} ou @qq{au-dessous}.  Les symboliques @code{UP}
2491 et @code{DOWN} peuvent remplacer respectivement @code{1} et
2492 @w{@code{-1}}.  Les valeurs @code{0} ou @code{CENTER} permettent de
2493 réaffecter à la propriété @code{direction} son comportement par défaut.
2494 Certaines commandes prédéfinies permettent par ailleurs de spécifier un
2495 comportement en matière d'orientation ou positionnement ; elles
2496 sont de la forme
2497
2498 @example
2499 @code{\xxxUp}, @code{\xxxDown} et @code{\xxxNeutral}
2500 @end example
2501
2502 @noindent
2503 auquel cas @code{\xxxNeutral} signifie @qq{retour au comportement par
2504 défaut} -- voir @rlearning{Objets inclus dans la portée}.
2505
2506 Dans quelques cas particuliers, comme l'indication d'un @emph{arpeggio},
2507 la valeur affectée à la propriété @code{direction} déterminera si
2508 l'objet doit se placer à gauche ou à droite de son parent.  Un
2509 @w{@code{-1}} ou @code{LEFT} signifiera alors @qq{sur la gauche}, et un
2510 @code{1} ou @code{RIGHT} @qq{sur la droite}.  Comme de bien entendu, un
2511 @code{0} ou @code{CENTER} signifiera @qq{appliquer le positionnement par
2512 défaut}.
2513
2514 @ignore
2515 These all have side-axis set to #X
2516 AmbitusAccidental - direction has no effect
2517 Arpeggio - works
2518 StanzaNumber - not tried
2519 TrillPitchAccidental - not tried
2520 TrillPitchGroup - not tried
2521 @end ignore
2522
2523 Notez que ces commandes resteront effectives jusqu'à ce qu'elles soient
2524 annulées.
2525
2526 @lilypond[verbatim,quote,relative=2]
2527 c2( c)
2528 \slurDown
2529 c2( c)
2530 c2( c)
2531 \slurNeutral
2532 c2( c)
2533 @end lilypond
2534
2535 En matière de musique polyphonique, il est souvent plus judicieux
2536 d'utiliser des contextes @code{Voice} explicites que de modifier
2537 l'orientation des objets.  Pour de plus amples informations, voir
2538 @ref{Plusieurs voix}.
2539
2540 @seealso
2541 Manuel d'initiation :
2542 @rlearning{Objets inclus dans la portée}.
2543
2544 Manuel de notation :
2545 @ref{Plusieurs voix}.
2546
2547
2548 @node Distances et unités de mesure
2549 @subsection Distances et unités de mesure
2550 @translationof Distances and measurements
2551
2552 @cindex distance absolue
2553 @cindex distance relative
2554 @cindex distance extensible
2555
2556 @funindex \mm
2557 @funindex \cm
2558 @funindex \in
2559 @funindex \pt
2560
2561 LilyPond considère deux types de distances : les distances absolues
2562 et les distances relatives ou extensibles.
2563
2564 Les distances absolues permettent de spécifier les marges, indentations
2565 et autres détails de mise en page ; elles s'expriment par défaut en
2566 millimètres.  Vous pouvez utiliser d'autres systèmes de mesure, dès lors
2567 que la quantité est suivie de la mesure : @code{\mm}, @code{\cm},
2568 @code{\in} (pouces) ou @code{\pt} (points, 1/72,27 pouce).
2569 Les mesures de mise en page peuvent aussi s'exprimer en unité extensible
2570 de portée @code{\staff-space} (voir ci-après).  Pour plus d'information
2571 concernant la mise en page, voir la rubrique
2572 @ref{Mise en forme de la page}.
2573
2574 Les distances relatives ou extensibles s'expriment toujours en
2575 @qq{espace de portée} ou, plus rarement, en @qq{demi espace de portée}.
2576 L'espace de portée correspond à la distance qui sépare deux lignes
2577 adjacentes d'une portée.  Sa valeur par défaut est déterminée
2578 globalement par la taille de portée.  Elle peut aussi s'ajuster
2579 ponctuellement en jouant sur la propriété @code{staff-space} de l'objet
2580 @code{StaffSymbol}.  Les distances relatives s'ajustent automatiquement
2581 dès qu'une modification de la taille globale de portée ou bien de la
2582 propriété @code{staff-space} du @code{StaffSymbol} intervient.
2583 Cependant, les tailles de fonte ne s'ajusteront automatiquement que si
2584 la modification touche la taille globale des portées.  La taille globale
2585 de portée permet ainsi de gérer l'aspect général de la partition --
2586 voir @ref{Définition de la taille de portée}.
2587
2588 @funindex magstep
2589
2590 Lorsque seulement une portion de partition doit apparaître dans une
2591 taille, comme par exemple une portée d'ossia ou une note de bas de page,
2592 influer sur la taille globale de portée affecterait l'intégralité de la
2593 partition.  Il convient donc dans ce cas de modifier à la fois la
2594 propriété @code{staff-space} du @code{StaffSymbol} et la taille des
2595 fontes.  La fonction Scheme @code{magstep} est tout spécialement chargée
2596 d'adapter une modification du @code{staff-space} aux fontes.  Pour de
2597 plus amples informations, reportez-vous à la rubrique
2598 @rlearning{Longueur et épaisseur des objets}.
2599
2600 @seealso
2601 Manuel d'initiation :
2602 @rlearning{Longueur et épaisseur des objets}.
2603
2604 Manuel de notation :
2605 @ref{Définition de la taille de portée},
2606 @ref{Mise en forme de la page}.
2607
2608
2609 @node Propriétés des symboles de la portée
2610 @subsection Propriétés des symboles de la portée
2611 @translationof Staff symbol properties
2612
2613 @cindex ajustement des symboles de portée
2614 @cindex dessin des symboles de portée
2615 @cindex symboles de portée, dessin
2616
2617 @c TODO Extend or remove this section.  See also NR 1.6.2 Staff symbol
2618 @c      Need to think of uses for these properties.  Eg 'line-positions
2619 @c      is used in a snippet to thicken centre line.
2620 @c      If retained, add @ref to here in 1.6.2  -td
2621
2622 L'emplacement vertical et le nombre de lignes d'une portée se
2623 définissent conjointement.  Comme l'illustre l'exemple suivant, le
2624 positionnement des notes n'est en rien influencé par le positionnement
2625 des lignes de la portée.
2626
2627 @warning{La propriété @code{'line-positions} écrase la propriété
2628 @code{'line-count}.  Le nombre de lignes d'une portée est implicitement
2629 défini par le nombre d'éléments dans la liste des valeurs de
2630 @code{'line-positions}.}
2631
2632 @lilypond[verbatim,quote,relative=1]
2633 \new Staff \with {
2634   \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
2635 }
2636 { a4 e' f b | d1 }
2637 @end lilypond
2638
2639 La largeur d'une portée, exprimée en espace de portée, peut être figée.
2640 L'espacement des objets inclus dans cette portée ne sera en rien affecté
2641 par ce réglage.
2642
2643 @lilypond[verbatim,quote,relative=1]
2644 \new Staff \with {
2645   \override StaffSymbol #'width = #23
2646 }
2647 { a4 e' f b | d1 }
2648 @end lilypond
2649
2650
2651 @node Extenseurs et prolongateurs
2652 @subsection Extenseurs et prolongateurs
2653 @translationof Spanners
2654
2655 De nombreux objets de notation musicale s'étendent sur plusieurs notes,
2656 voire même sur plusieurs mesures.  Il en va ainsi des liaisons,
2657 ligatures, crochets de nolet, crochets de reprise, crescendos, trilles
2658 ou glissandos.  Ces objets, que l'on englobe sous l'appellation
2659 @qq{d'extenseur}, sont pourvus de propriétés spécifiques destinées à
2660 contrôler leur apparence et leur comportement.  Un certain nombre de ces
2661 propriétés sont communes à tous les extenseurs, d'autres n'affectent que
2662 certains d'entre eux.
2663
2664 Tout extenseur dispose de la @code{spanner-interface}.  Quelques uns,
2665 tout particulièrement ceux chargés de dessiner une ligne droite entre
2666 deux objets, disposent aussi de la @code{line-spanner-interface}.
2667
2668
2669 @unnumberedsubsubsec Utilisation de @code{spanner-interface}
2670 @translationof Using the @code{spanner-interface}
2671
2672 Cette interface fournit deux propriétés qui s'appliquent à certains
2673 extenseurs.
2674
2675 @strong{@i{La propriété @code{minimum-length}}}
2676
2677 La longueur minimale d'un extenseur est déterminée par la propriété
2678 @code{minimum-length}.  Au plus sa valeur est élevée, au plus
2679 l'espacement des notes qui le bornent sera grand.  Forcer sa valeur
2680 restera néanmoins sans effet pour un certain nombre d'extenseurs dont la
2681 longueur dépend d'autres considérations.  Voici quelques exemples de
2682 mise en œuvre de cette propriété.
2683
2684 @ignore
2685 Cette propriété est pleinement fonctionnelle pour :
2686   Tie (liaison de prolongation)
2687   MultiMeasureRest (silence multimesures)
2688   Hairpin (soufflet)
2689   Slur (liaison d'articulation)
2690   PhrasingSlur (liaison de phrasé)
2691
2692 Cette propriété est fonctionnelle en présence d'un @emph{callback} :
2693   Glissando
2694   Beam (ligature)
2695
2696 Cette propriété est sans effet sur :
2697   LyricSpace
2698   LyricHyphen
2699   LyricExtender
2700   TextSpanner
2701   System
2702
2703 @end ignore
2704
2705 @lilypond[verbatim,quote,relative=2]
2706 a~a
2707 a
2708 % increase the length of the tie
2709 -\tweak #'minimum-length #5
2710 ~a
2711 @end lilypond
2712
2713 @lilypond[verbatim,quote,relative=2]
2714 a1
2715 \compressFullBarRests
2716 R1*23
2717 % increase the length of the rest bar
2718 \once \override MultiMeasureRest #'minimum-length = #20
2719 R1*23
2720 a1
2721 @end lilypond
2722
2723 @lilypond[verbatim,quote,relative=2]
2724 a \< a a a \!
2725 % increase the length of the hairpin
2726 \override Hairpin #'minimum-length = #20
2727 a \< a a a \!
2728 @end lilypond
2729
2730 Cette propriété permet aussi de jouer sur l'envergure d'une liaison
2731 d'articulation ou de phrasé.
2732
2733 @lilypond[verbatim,quote,relative=2]
2734 a( a)
2735 a
2736 -\tweak #'minimum-length #5
2737 ( a)
2738
2739 a\( a\)
2740 a
2741 -\tweak #'minimum-length #5
2742 \( a\)
2743 @end lilypond
2744
2745 Certains objets requièrent un appel explicite à la procédure
2746 @code{set-spacing-rods} pour que la propriété @code{minimum-length}
2747 produise ses effets.  La propriété @code{set-spacing-rods} doit alors
2748 prendre pour valeur @code{ly:spanner::set-spacing-rods}. Par exemple, la
2749 longueur minimale d'un glissando ne pourra être forcée tant que la
2750 propriété @code{springs-and-rods} n'est pas définie :
2751
2752 @lilypond[verbatim,quote,relative=1]
2753 % default
2754 e \glissando c'
2755
2756 % not effective alone
2757 \once \override Glissando #'minimum-length = #20
2758 e, \glissando c'
2759
2760 % effective only when both overrides are present
2761 \once \override Glissando #'minimum-length = #20
2762 \once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
2763 e, \glissando c'
2764 @end lilypond
2765
2766 Il en va de même pour l'objet @code{Beam} (ligature) :
2767
2768 @lilypond[verbatim,quote,relative=1]
2769 % not effective alone
2770 \once \override Beam #'minimum-length = #20
2771 e8 e e e
2772
2773 % effective only when both overrides are present
2774 \once \override Beam #'minimum-length = #20
2775 \once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
2776 e8 e e e
2777 @end lilypond
2778
2779 @strong{@i{La propriété @code{to-barline}}}
2780
2781 La seconde propriété fournie par la @code{spanner-interface} est 
2782 @code{to-barline}.  Elle est activée par défaut, raison pour laquelle
2783 les soufflets et autres extenseurs finissant sur la première note d'une
2784 mesure s'arrêtent visuellement au niveau de la barre de mesure qui la
2785 précède.  Le fait de désactiver la propriété @code{to-barline} aura pour
2786 effet de prolonger l'extenseur au delà de la barre de mesure et jusqu'à
2787 la note qui le borne :
2788
2789 @lilypond[verbatim,quote,relative=2]
2790 a \< a a a a \! a a a \break
2791 \override Hairpin #'to-barline = ##f
2792 a \< a a a a \! a a a
2793 @end lilypond
2794
2795 Cette propriété n'est pas opérationnelle pour tous les extenseurs.  Il
2796 serait en effet quelque peu surprenant de l'activer (lui
2797 affecter @code{#t}) dans le cas d'une liaison d'articulation ou de
2798 phrasé !
2799
2800
2801 @unnumberedsubsubsec Utilisation de @code{line-spanner-interface}
2802 @translationof Using the @code{line-spanner-interface}
2803
2804 Un certain nombre d'objets disposent de la propriété
2805 @code{line-spanner-interface}, entre autres :
2806
2807 @itemize
2808 @item @code{DynamicTextSpanner}
2809 @item @code{Glissando}
2810 @item @code{TextSpanner}
2811 @item @code{TrillSpanner}
2812 @item @code{VoiceFollower}
2813 @end itemize
2814
2815 La routine en charge de dessiner le stencil de ces extenseurs est
2816 @code{ly:line-interface::print}.  Elle va déterminer les deux points
2817 extrêmes et dessiner entre eux une ligne du style requis.  Bien que la
2818 localisation des deux bornes de l'extenseur soit calculée à la volée,
2819 vous pouvez cependant forcer leur ordonnée (coordonnée-Y).  Les
2820 propriétés que vous devrez ajuster résident au deuxième niveau dans la
2821 hiérarchie, mais la syntaxe de la commande @code{\override} nécessaire
2822 demeure relativement simple :
2823
2824 @lilypond[relative=2,quote,verbatim]
2825 e2 \glissando b
2826 \once \override Glissando #'(bound-details left Y) = #3
2827 \once \override Glissando #'(bound-details right Y) = #-2
2828 e2 \glissando b
2829 @end lilypond
2830
2831 La propriété @code{Y} est valorisée en unités de @code{staff-space}, la
2832 ligne médiane de la portée correspondant au point zéro.  Pour le
2833 glissando qui nous occupe, il s'agit du @code{Y} à l'aplomb
2834 (coordonnée-X) du centre de la tête de chacune des deux notes, si tant
2835 est que la ligne doive s'étendre entre ces deux points.
2836
2837 Si le @code{Y} n'est pas défini, sa valeur sera calculée en fonction de
2838 la position verticale du point d'attachement de l'extenseur.
2839
2840 Dans le cas où l'extenseur est interrompu par un saut de ligne, les
2841 terminaisons à cet endroit se gèrent grâce aux sous-clés
2842 @code{left-broken} et @code{right-broken} de @code{bound-details}, comme
2843 ci-dessous :
2844
2845 @lilypond[relative=2,ragged-right,verbatim,quote]
2846 \override Glissando #'breakable = ##t
2847 \override Glissando #'(bound-details right-broken Y) = #-3
2848 c1 \glissando \break
2849 f1
2850 @end lilypond
2851
2852 Les sous-propriétés @code{left} et @code{right} du @code{bound-details}
2853 disposent d'autres clés modifiables de la même manière que @code{Y} :
2854
2855 @table @code
2856 @item Y
2857 Détermine l'ordonnée (coordonnée-Y) de la terminaison, avec un
2858 décalage en @code{staff-space} par rapport à la ligne médiane de la
2859 portée.  Il s'agit par défaut du centre de l'objet d'attachement, qui
2860 est le centre vertical de la tête de note pour un glissando.
2861
2862 En ce qui concerne les extenseurs horizontaux, tels ceux comportant du
2863 texte ou les trilles, il est fixé à @code{0}.
2864
2865 @item attach-dir
2866 Détermine le début et la fin de la ligne sur l'axe des abscisses,
2867 relativement à l'objet de rattachement.  Une valeur de @w{@code{-1}} (ou
2868 @code{LEFT}) aura pour effet de commencer ou terminer la ligne sur la
2869 gauche de la tête de note de rattachement.
2870
2871 @item X
2872 Il s'agit de l'abscisse (coordonnée-X) absolue de la terminaison.  Elle
2873 se calcule à la volée, et son forçage n'apporte rien de plus.
2874
2875 @item stencil
2876 Les extenseurs linéaires peuvent commencer ou finir par un symbole,
2877 enregistré dans cette sous-propriété.  Elle est conçue pour un usage
2878 interne, aussi nous vous conseillons de plutôt recourir à @code{text}.
2879
2880 @item text
2881 Il s'agit d'un @emph{markup} qui se poursuivra par l'extenseur. C'est la
2882 sous-propriété utilisée pour ajouter @i{cresc.}, @i{tr} ou autre texte à
2883 un extenseur horizontal.
2884
2885 @lilypond[quote,ragged-right,relative=2,verbatim]
2886 \override TextSpanner #'(bound-details left text)
2887    = \markup { \small \bold Slower }
2888 c2\startTextSpan b c a\stopTextSpan
2889 @end lilypond
2890
2891 @item stencil-align-dir-y
2892 @item stencil-offset
2893 Lorsqu'aucune de ces deux sous-propriétés n'est définie, le stencil est
2894 simplement positionné à l'extrémité, centré sur la ligne telle que
2895 définie par les sous-propriétés @code{X} et @code{Y}.  L'utilisation de
2896 @code{stencil-align-dir-y} ou @code{stencil-offset} permettra d'aligner
2897 le symbole verticalement par rapport au coin de la ligne :
2898
2899 @lilypond[relative=1,quote,verbatim]
2900 \override TextSpanner
2901   #'(bound-details left stencil-align-dir-y) = #-2
2902 \override TextSpanner
2903   #'(bound-details right stencil-align-dir-y) = #UP
2904
2905 \override TextSpanner
2906   #'(bound-details left text) = #"ggg"
2907 \override TextSpanner
2908   #'(bound-details right text) = #"hhh"
2909 c4^\startTextSpan c c c \stopTextSpan
2910 @end lilypond
2911
2912 Vous n'aurez pas manqué de constater qu'une valeur négative place le
2913 texte @emph{en haut} -- contrairement à ce que l'on serait en droit
2914 d'attendre.  Ceci est dû au fait que la valeur @w{@code{-1}} ou
2915 @code{DOWN} signifie @qq{aligner le bord @emph{inférieur} du texte sur
2916 la ligne d'extension}.  Une valeur égale à @code{1} ou @code{UP}
2917 alignera le sommet du texte sur cette ligne d'extension.
2918
2919 @item arrow
2920 L'activation de cette sous-propriété (lui affecter @code{#t}) ajoutera
2921 à l'extenseur une terminaison en flèche.
2922
2923 @item padding
2924 Cette sous-propriété contrôle l'espace qui doit séparer l'extrémité de
2925 la ligne et la fin réelle de l'extenseur.  Sans ce @qq{décalage}, le
2926 trait indiquant un glissando commencerait et finirait au beau milieu de
2927 chacune des têtes de note.
2928
2929 @end table
2930
2931 La fonction @code{\endSpanners} permet d'interrompre l'extenseur qui
2932 vient dès la note suivante.  Autrement dit, il ne s'étendra que sur une
2933 seule note, ou jusqu'à la prochaine barre de mesure si @code{to-barline}
2934 a été activé et que survient une barre avant la note suivante.
2935
2936 @lilypond[verbatim,quote,ragged-right,relative=2]
2937 \endSpanners
2938 c2 \startTextSpan c2 c2
2939 \endSpanners
2940 c2 \< c2 c2
2941 @end lilypond
2942
2943 L'utilisation de @code{\endSpanners} permet de s'affranchir d'insérer un
2944 @code{\stopTextSpan} pour clôturer un @code{\startTextSpan} ou un
2945 @code{\!} pour terminer un soufflet.
2946
2947 @seealso
2948 Référence des propriétés internes :
2949 @rinternals{Glissando},
2950 @rinternals{line-spanner-interface},
2951 @rinternals{TextSpanner},
2952 @rinternals{TrillSpanner},
2953 @rinternals{VoiceFollower}.
2954
2955
2956 @node Visibilité des objets
2957 @subsection Visibilité des objets
2958 @translationof Visibility of objects
2959
2960 @cindex objets, visibilité
2961 @cindex grobs, visibilité
2962 @cindex visibilité d'objets
2963
2964 La visibilité des objets de rendu se contrôle de quatre façons
2965 différentes : vous pouvez supprimer leur stencil, les rendre
2966 transparents, les coloriser en blanc ou bien encore forcer leur
2967 propriété @code{break-visibility}.  Les trois premières options peuvent
2968 s'appliquer à tous les objets, la dernière étant réservée aux objets
2969 @emph{changeables}.  Le Manuel d'initiation contient une introduction à
2970 ces quatre techniques, à la rubrique
2971 @rlearning{Visibilité et couleur des objets}.
2972
2973 LilyPond met en œuvre quelques techniques particulières adaptées à
2974 certains objets ; elles sont couvertes par une rubrique spécifique.
2975
2976 @menu
2977 * Suppression des stencils::
2978 * Transparence des objets::
2979 * Blanchiment des objets::
2980 * Utilisation de break-visibility::
2981 * Considérations spécifiques::
2982 @end menu
2983
2984
2985 @node Suppression des stencils
2986 @unnumberedsubsubsec Suppression des stencils
2987 @translationof Removing the stencil
2988
2989 @cindex stencil, suppression
2990
2991 Tout objet de rendu se voit attribuer une propriété @code{stencil}.
2992 Elle est par défaut définie par la fonction chargée de dessiner cet
2993 objet.  Lorsque cette propriété est désactivée de force -- en lui
2994 attribuant la valeur @code{#f} -- aucune fonction ne sera appelée ;
2995 l'objet ne sera donc pas dessiné.  Le retour au comportement par défaut
2996 s'opère à l'aide d'un @code{\revert}.
2997
2998 @lilypond[quote,verbatim,relative=1]
2999 a1 a
3000 \override Score.BarLine #'stencil = ##f
3001 a a
3002 \revert Score.BarLine #'stencil
3003 a a a
3004 @end lilypond
3005
3006
3007 @node Transparence des objets
3008 @unnumberedsubsubsec Transparence des objets
3009 @translationof Making objects transparent
3010
3011 @cindex transparent, objet
3012
3013 Tout objet de rendu dispose d'une propriété de transparence, qui est par
3014 défaut définie à @code{#f}.  Le fait de l'activer rendra l'objet
3015 transparent tout en préservant la place qu'il occupe.
3016
3017 @lilypond[quote,verbatim,relative=2]
3018 a4 a
3019 \once \override NoteHead #'transparent = ##t
3020 a a
3021 @end lilypond
3022
3023
3024 @node Blanchiment des objets
3025 @unnumberedsubsubsec Blanchiment des objets
3026 @translationof Painting objects white
3027
3028 @cindex objets, couleur
3029 @cindex couleur d'objet
3030 @cindex layers
3031 @cindex calque
3032 @cindex impression, ordre
3033 @cindex surimpression d'objets
3034 @cindex objets, surimpression
3035 @cindex grobs, superposition
3036
3037 Tout objet de rendu dispose d'une propriété couleur, par défaut définie
3038 à @code{black} (noir).  Le fait de la forcer à @code{white} (blanc)
3039 rendra l'objet indistinct du fond blanc.  Néanmoins, lorsque cet objet
3040 en recouvre d'autres, la couleur de leurs points de jonction dépendra de
3041 l'ordre dans lequel ils sont dessinés, ce qui peut laisser apparaître
3042 un fantôme de l'objet blanchi comme ci-dessous :
3043
3044 @lilypond[quote,verbatim,relative=2]
3045 \override Staff.Clef #'color = #white
3046 a1
3047 @end lilypond
3048
3049 Cet inconvénient peut être évité en modifiant l'ordre dans lequel les
3050 objets sont dessinés.  Chaque objet de rendu dispose d'une propriété
3051 @code{layer} (calque ou niveau) à laquelle est affecté un nombre entier.
3052 Les objets ayant la plus faible valeur sont dessinés en premier, puis
3053 les autres, de telle sorte qu'un objet ayant une valeur plus élevée les
3054 recouvrira.  La plupart des objet ont un @code{layer} valorisé
3055 à @code{1} -- quelques uns, dont @code{StaffSymbol} et
3056 @code{BarLine}, ont une valeur à @code{0}.  L'ordre d'impression
3057 d'objets ayant une même valeur de @code{layer} est indéterminé.
3058
3059 La clef de l'exemple précédent a par défaut un @code{layer}
3060 à @code{1} ; elle est donc dessinée après les lignes de la
3061 portée -- @code{layer} valorisé par défaut à @code{0} -- et donc
3062 les recouvre.  Pour changer cet état de fait, l'objet @code{Clef} doit
3063 avoir un @code{layer} de valeur inférieure, disons @w{@code{-1}}, pour
3064 pouvoir être dessiné avant.
3065
3066 @lilypond[quote,verbatim,relative=2]
3067 \override Staff.Clef #'color = #white
3068 \override Staff.Clef #'layer = #-1
3069 a1
3070 @end lilypond
3071
3072
3073 @node Utilisation de break-visibility
3074 @unnumberedsubsubsec Utilisation de break-visibility
3075 @translationof Using break-visibility
3076
3077 @c TODO Add making other objects breakable
3078
3079 @cindex break-visibility
3080
3081 La plupart des objets de rendu ne sont imprimés qu'une seule fois ;
3082 certains cependant, tels les barres de mesure, clefs, métriques ou
3083 armures, apparaîtront deux fois lors d'un saut de ligne -- une première
3084 fois en fin de ligne, puis à nouveau au début de la ligne suivante.  Ces
3085 objets, que l'on peut traiter de @emph{changeables} (@emph{breakable} en
3086 anglais) disposent de la propriété @code{break-visibility} spécialement
3087 chargée de contrôler leur visibilité aux trois endroits où il sont
3088 susceptibles d'apparaître : en début de ligne, en cours de ligne ou
3089 en fin de ligne -- si tant est qu'un changement s'y produise.
3090
3091 Par exemple, la métrique est imprimée par défaut au début de la première
3092 ligne, et nulle part ailleurs.  En cas de modification, une nouvelle
3093 métrique sera imprimée à l'endroit du changement.  Dans le cas où ce
3094 changement intervient en fin de ligne, la nouvelle métrique s'imprime au
3095 début de la ligne suivante, et une métrique @qq{de précaution} viendra
3096 se placer au bout de la ligne précédente.
3097
3098 Ce comportement est géré par la propriété @code{break-visibility}, dont
3099 vous trouverez une explication à la rubrique
3100 @rlearning{Visibilité et couleur des objets}.  Cette propriété est
3101 constituée d'un vecteur de trois booléens qui, dans l'ordre, déterminent
3102 si l'objet sera imprimé à la fin, en cours, et au début d'une ligne --
3103 on pourrait aussi dire avant un saut de ligne, là où il n'y a pas de
3104 saut de ligne, et après un saut de ligne.
3105
3106 Les huit combinaisons possibles sont aussi disponibles sous la forme de
3107 fonctions prédéfinies, regroupées dans le fichier
3108 @file{scm/output-lib.scm}.  Le tableau suivant vous les présente ;
3109 les trois dernières colonnes indiquent l'endroit où l'objet sera visible.
3110
3111 @multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t. )}} {apres} {apres} {apres}
3112 @headitem Forme                      @tab Forme                  @tab Avant @tab Hors    @tab Après
3113 @headitem fonctionnelle              @tab vectorielle            @tab saut  @tab saut    @tab saut
3114
3115 @item @code{all-visible}             @tab @code{'#(#t #t #t)}    @tab oui    @tab oui    @tab oui
3116 @item @code{begin-of-line-visible}   @tab @code{'#(#f #f #t)}    @tab non    @tab non    @tab oui
3117 @item @code{center-visible}          @tab @code{'#(#f #t #f)}    @tab non    @tab oui    @tab non
3118 @item @code{end-of-line-visible}     @tab @code{'#(#t #f #f)}    @tab oui    @tab non    @tab non
3119 @item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)}    @tab oui    @tab oui    @tab non
3120 @item @code{center-invisible}        @tab @code{'#(#t #f #t)}    @tab oui    @tab non    @tab oui
3121 @item @code{end-of-line-invisible}   @tab @code{'#(#f #t #t)}    @tab non    @tab oui    @tab oui
3122 @item @code{all-invisible}           @tab @code{'#(#f #f #f)}    @tab non    @tab non    @tab non
3123 @end multitable
3124
3125 Les réglages par défaut de la propriété @code{break-visibility}
3126 diffèrent selon l'objet de rendu.  Le tableau suivant présente, pour la
3127 plupart des  objets comportant la propriété @code{break-visibility},
3128 ces réglages par défaut.
3129
3130 @multitable @columnfractions .3 .3 .4
3131
3132 @headitem Objet de rendu   @tab Contexte habituel  @tab Réglage par défaut
3133
3134 @c omit Ambitus as it appears not to be affected by break-visibility -td
3135 @c @item @code{Ambitus}          @tab as specified   @tab @code{begin-of-line-visible}
3136 @item @code{BarLine}             @tab @code{Score}          @tab calculé
3137 @item @code{BarNumber}           @tab @code{Score}          @tab @code{begin-of-line-visible}
3138 @c omit the following item until it can be explained -td
3139 @c @item @code{BreakAlignGroup}  @tab @code{Score}          @tab calculé
3140 @item @code{BreathingSign}       @tab @code{Voice}          @tab @code{begin-of-line-invisible}
3141 @item @code{Clef}                @tab @code{Staff}          @tab @code{begin-of-line-visible}
3142 @item @code{Custos}              @tab @code{Staff}          @tab @code{end-of-line-visible}
3143 @item @code{DoublePercentRepeat} @tab @code{Voice}          @tab @code{begin-of-line-invisible}
3144 @c omit KeyCancellation until it can be explained -td
3145 @c @item @code{KeyCancellation}  @tab ??             @tab @code{begin-of-line-invisible}
3146 @item @code{KeySignature}        @tab @code{Staff}          @tab @code{begin-of-line-visible}
3147 @c omit LeftEdge until it can be explained -td
3148 @c @item @code{LeftEdge}         @tab @code{Score}          @tab @code{center-invisible}
3149 @item @code{OctavateEight}       @tab @code{Staff}          @tab @code{begin-of-line-visible}
3150 @item @code{RehearsalMark}       @tab @code{Score}          @tab @code{end-of-line-invisible}
3151 @item @code{TimeSignature}       @tab @code{Staff}          @tab @code{all-visible}
3152
3153 @end multitable
3154
3155 Voici un exemple d'utilisation de la forme vectorielle pour contrôler la
3156 visibilité des barres de mesure :
3157
3158 @lilypond[quote,verbatim,relative=1,ragged-right]
3159 f4 g a b
3160 f4 g a b
3161 % Remove bar line at the end of the current line
3162 \once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
3163 \break
3164 f4 g a b
3165 f4 g a b
3166 @end lilypond
3167
3168 Lors d'un forçage de @code{break-visibility} sous une forme vectorielle,
3169 les trois éléments doivent impérativement être mentionnés.  Ces formes
3170 vectorielles ne sont d'ailleurs pas prises en charge par tous les objets
3171 de rendu, et certaines combinaisons peuvent entraîner des erreurs ;
3172 nous citerons entre autres :
3173
3174 @itemize @bullet
3175 @item Une barre de mesure ne peut s'imprimer en début de ligne.
3176 @item Un numéro de mesure ne peut apparaître au début de la première
3177 ligne, à moins d'être différent de 1.
3178 @item Clef -- voir ci-après.
3179 @item Les répétitions en pourcentage sont soit toutes imprimées, soit
3180 aucune.  Vous devrez utiliser @code{begin-of-line-invisible} pour les
3181 voir et @code{all-invisible} pour les masquer.
3182 @item Armure -- voir ci-après.
3183 @item Indication d'octaviation -- voir ci-après.
3184 @end itemize
3185
3186
3187 @node Considérations spécifiques
3188 @unnumberedsubsubsec Considérations spécifiques
3189 @translationof Special considerations
3190
3191 @strong{@emph{Visibilité après changement explicite}}
3192
3193 @cindex armure, visibilité après changement explicite
3194 @cindex explicitKeySignatureVisibility
3195 @cindex clef, visibilité après changement explicite
3196 @cindex explicitClefVisibility
3197
3198 La propriété @code{break-visibility} contrôle la visibilité des armures
3199 ou changements de clef en début de ligne uniquement, donc après un saut.
3200 Elle ne produit aucun effet sur la visibilité d'une armure ou d'une clef
3201 après un changement explicite de tonalité ou de clef, ni en cours, ni en
3202 fin de ligne.  Dans l'exemple suivant, l'armure est présente même après
3203 le passage en si bémol majeur malgré l'activation de
3204 @code{all-invisible} (@emph{tous invisibles}).
3205
3206 @lilypond[quote,verbatim,relative=1,ragged-right]
3207 \key g \major
3208 f4 g a b
3209 % Try to remove all key signatures
3210 \override Staff.KeySignature #'break-visibility = #all-invisible
3211 \key bes \major
3212 f4 g a b
3213 \break
3214 f4 g a b
3215 f4 g a b
3216 @end lilypond
3217
3218 La visibilité lors de ces changements explicites d'armure ou de clef est
3219 géré respectivement par les propriétés
3220 @code{explicitKeySignatureVisibility} et @code{explicitClefVisibility}.
3221 Leur fonctionnement est en tout point identique à celui de la propriété
3222 @code{break-visibility} -- forme vectorielle à trois éléments ou forme
3223 fonctionnelle comme indiqué ci-avant.  Toutes deux sont attachées au
3224 contexte @code{Staff} (la portée) et non directement aux objets de
3225 rendu ; elles sont de ce fait introduites par une instruction
3226 @code{\set}.  Leur valeur par défaut est de toujours imprimer les objets
3227 -- réglage sur @code{all-visible}.  Ces deux propriétés gèrent
3228 uniquement la visibilité des armures et clefs lors d'un changement
3229 explicite, et en dehors d'un début de ligne ; il faudra en pareil
3230 cas forcer la @code{break-visibility} de ces objets pour les supprimer.
3231
3232 @lilypond[quote,verbatim,relative=1,ragged-right]
3233 \key g \major
3234 f4 g a b
3235 \set Staff.explicitKeySignatureVisibility = #all-invisible
3236 \override Staff.KeySignature #'break-visibility = #all-invisible
3237 \key bes \major
3238 f4 g a b \break
3239 f4 g a b
3240 f4 g a b
3241 @end lilypond
3242
3243 @strong{@emph{Visibilité des altérations de précaution}}
3244
3245 L'impression d'altérations de précaution au moment d'un changement
3246 explicite de tonalité sera annulée dès lors que vous aurez désactivé la
3247 propriété @code{printKeyCancellation} du contexte @code{Staff} :
3248
3249 @lilypond[quote,verbatim,relative=1,ragged-right]
3250 \key g \major
3251 f4 g a b
3252 \set Staff.explicitKeySignatureVisibility = #all-invisible
3253 \set Staff.printKeyCancellation = ##f
3254 \override Staff.KeySignature #'break-visibility = #all-invisible
3255 \key bes \major
3256 f4 g a b \break
3257 f4 g a b
3258 f4 g a b
3259 @end lilypond
3260
3261 Avec de tels réglages particuliers, seules les altérations accidentelles
3262 permettront d'indiquer le changement de tonalité.
3263
3264 @c TODO Add visibility of cautionary accidentals before notes
3265
3266 @strong{@emph{Barres de mesure automatiques}}
3267
3268 @cindex automaticBars
3269 @cindex barres de mesure, suppression
3270
3271 La désactivation de la propriété @code{automaticBars}, qui réside dans
3272 le contexte @code{Score}, permet de s'affranchir d'imprimer
3273 automatiquement les barres de mesure ; seules seront imprimées les
3274 barres explicitées à l'aide de la commande @code{\bar}.  Néanmoins, et
3275 contrairement à ce qui se passe avec la commande @code{\cadenzaOn}, le
3276 compteur de numéro de mesure continuera de s'incrémenter.  Les barres
3277 s'imprimeront à nouveau, au niveau où en est le compteur, dès que la
3278 propriété @code{automaticBars} sera réactivée.  Gardez à l'esprit que
3279 les sauts de ligne, lorsque cette propriété est désactivée,  ne peuvent
3280 intervenir qu'à l'occasion d'un @code{\bar} explicite.
3281
3282 @c TODO Add example
3283
3284 @strong{@emph{Clefs octaviées}}
3285
3286 @cindex octaviation, visibilité de la clef
3287 @cindex visibilité d'un clef octaviée
3288 @cindex clef, visibilité de l'octaviation
3289
3290 L'indication d'octaviation d'une clef est produite par l'objet de rendu
3291 @code{OctavateEight}.  Sa visibilité étant gérée par héritage direct de
3292 l'objet @code{Clef}, nul n'est besoin de forcer un quelconque
3293 @code{break-visibility} au niveau des objets @code{OctavateEight} pour
3294 éliminer une indication d'octaviation lorsque la clef est invisible.
3295
3296 Lors d'un changement explicite de clef, la propriété
3297 @code{explicitClefVisibility} gère à la fois le symbole de la clef et
3298 l'indication d'octaviation qui lui est attachée.
3299
3300 @seealso
3301 Manuel d'initiation :
3302 @rlearning{Visibilité et couleur des objets}
3303
3304
3305 @node Styles de ligne
3306 @subsection Styles de ligne
3307 @translationof Line styles
3308
3309 Certaines indications portées à l'attention de l'exécutant -- tels 
3310 @i{rallentando}, @i{accelerando} et @i{trilles} -- apparaissent sous la
3311 forme d'un texte qui peut s'étendre sur plusieurs mesures à l'aide d'une
3312 ligne parfois pointillée ou ondulée.
3313
3314 En matière de dessin du texte et des lignes, ces indications font appel
3315 aux mêmes routines que le glissando ; leur comportement peut donc
3316 être affiné selon les mêmes préceptes, au moyen de la routine
3317 @code{ly:line-interface::print} qui est tout spécialement chargée de
3318 dessiner les extenseurs.  Cette routine détermine l'emplacement exact
3319 des deux points extrêmes de l'extenseur, puis trace une ligne du style
3320 demandé entre ces deux points.
3321
3322 L'exemple ci-dessous indique les différents styles de ligne disponibles,
3323 ainsi que la manière de les spécifier.
3324
3325 @lilypond[relative=2,ragged-right,verbatim,quote]
3326 d2 \glissando d'2
3327 \once \override Glissando #'style = #'dashed-line
3328 d,2 \glissando d'2
3329 \override Glissando #'style = #'dotted-line
3330 d,2 \glissando d'2
3331 \override Glissando #'style = #'zigzag
3332 d,2 \glissando d'2
3333 \override Glissando #'style = #'trill
3334 d,2 \glissando d'2
3335 @end lilypond
3336
3337 Les points d'ancrage de l'extension sont calculés à la volée pour chaque
3338 objet graphique, mais rien ne vous empêche de les forcer :
3339
3340 @c TODO Complete
3341 @lilypond[relative=2,ragged-right,verbatim,quote]
3342 e2 \glissando f
3343 \once \override Glissando #'(bound-details right Y) = #-2
3344 e2 \glissando f
3345 @end lilypond
3346
3347 La valeur de @code{Y} est ainsi fixée à @w{@code{-2}} en ce qui concerne
3348 la borne droite.  Il en irait de même pour la borne gauche en spécifiant
3349 @code{left} (gauche) au lieu de @code{right} (droite).
3350
3351 En l'absence de réglage du @code{Y}, celui-ci est calculé à partir de
3352 l'emplacement vertical des points d'attache gauche et droit de
3353 l'extenseur.
3354
3355 De plus amples informations quant à l'ajustement des extenseurs font
3356 l'objet de la rubrique @ref{Extenseurs et prolongateurs}.
3357
3358
3359 @node Rotation des objets
3360 @subsection Rotation des objets
3361 @translationof Rotating objects
3362
3363 Qu'il s'agisse des objets de rendu ou d'éléments textuels sous forme de
3364 @emph{markup}, vous pouvez les faire pivoter selon vos désirs et à
3365 partir de n'importe quel point.  La méthode diffère cependant selon ce
3366 que vous désirez manipuler.
3367
3368 @menu
3369 * Rotation des objets de mise en forme::
3370 * Rotation des étiquettes::
3371 @end menu
3372
3373
3374 @node Rotation des objets de mise en forme
3375 @unnumberedsubsubsec Rotation des objets de mise en forme
3376 @translationof Rotating layout objects
3377
3378 Tout objet de rendu disposant de la @code{grob-interface} est
3379 susceptible de pivoter, grâce à la propriété @code{rotation}.  Celle-ci
3380 prend en argument une liste de trois éléments : l'angle de rotation
3381 -- dans le sens inverse des aiguilles d'une montre -- ainsi que les
3382 coordonnées @code{x} et @code{y} du point appartenant à l'objet en
3383 question et à partir duquel doit s'effectuer cette rotation.  L'angle
3384 est exprimé en degrés, les coordonnées en espaces de portée.
3385
3386 L'angle et les coordonnées ne peuvent se déterminer que par tâtonnement.
3387
3388 @cindex soufflet penché
3389
3390 Il existe assez peu de situation où faire pivoter un objet de mise en
3391 forme soit réellement opportun ; en voici une :
3392
3393 @lilypond[quote,verbatim,relative=1]
3394 g4\< e' d' f\!
3395 \override Hairpin #'rotation = #'(20 -1 0)
3396 g,,4\< e' d' f\!
3397 @end lilypond
3398
3399
3400 @node Rotation des étiquettes
3401 @unnumberedsubsubsec Rotation des étiquettes
3402 @translationof Rotating markup
3403
3404 Tout texte faisant l'objet d'un @emph{markup} peut pivoter selon
3405 n'importe quel angle, à l'aide de la commande @code{\rotate}.  Celle-ci
3406 prend deux arguments : l'angle de rotation exprimé en degrés --
3407 dans le sens inverse des aiguilles d'une montre -- et le texte à
3408 basculer.  Il ne s'agit pas ici de faire pivoter les extrémités du
3409 texte ; celles-ci récupéreront leurs coordonnées x et y du@emph{markup}
3410 pivoté.  Dans l'exemple ci-dessous, la propriété
3411 @code{outside-staff-priority} à été fixée à @code{#f} afin de désactiver
3412 l'évitement automatique des collisions qui pourrait repousser certains
3413 textes trop haut.
3414
3415 @c KEEP LY
3416 @lilypond[quote,verbatim,relative=1]
3417 \override TextScript #'outside-staff-priority = ##f
3418 g4^\markup { \rotate #30 "un sol" }
3419 b^\markup { \rotate #30 "un si" }
3420 des^\markup { \rotate #30 "un ré bémol" }
3421 fis^\markup { \rotate #30 "un fa dièse" }
3422 @end lilypond
3423
3424
3425 @node Retouches avancées
3426 @section Retouches avancées
3427 @translationof Advanced tweaks
3428
3429 Nous allons voir, au fil des paragraphes qui suivent, différentes
3430 approches permettant de fignoler l'apparence d'une partition.
3431
3432 @menu
3433 * Alignement des objets::
3434 * Regroupement vertical d'objets graphiques::
3435 * Modification des stencils::
3436 * Modification de l'allure des éléments::
3437 * Conteneurs requalifiants::
3438 @end menu
3439
3440 @seealso
3441 Manuel d'initiation :
3442 @rlearning{Autres sources de documentation},
3443 @rlearning{Retouche de partition}.
3444
3445 Manuel de notation :
3446 @ref{En quoi consiste la référence des propriétés internes},
3447 @ref{Modification de propriétés}.
3448
3449 Manuel d'extension :
3450 @rextend{Interfaces pour programmeurs}.
3451
3452 Fichiers d'initialisation :
3453 @file{scm/define-grobs.scm}.
3454
3455 Morceaux choisis :
3456 @rlsrnamed{Tweaks and overrides,Retouches}.
3457
3458 Référence des propriétés internes :
3459 @rinternals{All layout objects}.
3460
3461
3462 @node Alignement des objets
3463 @subsection Alignement des objets
3464 @translationof Aligning objects
3465
3466 Les objets graphiques disposant des interfaces
3467 @code{self-alignment-interface} ou @code{side-position-interface}
3468 peuvent s'aligner par rapport à un objet précédemment positionné, ce de
3469 différentes manières.  Ces objets sont référencés aux rubriques
3470 @rinternals{self-alignment-interface} et
3471 @rinternals{side-position-interface}.
3472
3473 Tous les objets graphiques ont un point de référence, une étendue
3474 horizontale et une étendue verticale.  L'étendue horizontale est
3475 représentée par une paire de nombres indiquant l'écart entre le point de
3476 référence et les bords gauche et droit -- l'écart à gauche étant
3477 négatif.  L'étendue verticale est représentée par une paire de nombres
3478 indiquant l'écart entre le point de référence et les bords inférieur et
3479 supérieur -- l'écart vers le bas étant négatif.
3480
3481 La position d'un objet sur la portée est donnée par la valeur des
3482 propriétés @code{X-offset} et @code{Y-offset}.  La valeur de
3483 @code{X-offset} indique l'écart en abscisse (coordonnée X) par rapport
3484 au point de référence de l'objet parent ; la valeur de
3485 @code{Y-offset} indique l'écart par rapport à la ligne médiane de la
3486 portée.  Les valeurs de @code{X-offset} et @code{Y-offset} peuvent être
3487 fournies arbitrairement, ou bien être calculé par des procédures
3488 spécifiques qui détermineront l'alignement par rapport à l'objet parent.
3489
3490 @warning{Nombre d'objets sont affectés par des considérations
3491 spécifiques en matière de positionnement ; jouer sur les valeurs de
3492 @code{X-offset} ou @code{Y-offset} se révélera inefficace en pareil
3493 cas, même si l'objet dispose de la @code{self-alignment-interface}.
3494 Fixer arbitrairement les propriétés @code{X-offset} ou @code{Y-offset}
3495 annihilera alors les effets de la propriété @code{self-alignment}
3496 correspondante.}
3497
3498 Par exemple, une altération peut se repositionner verticalement grâce à
3499 son @code{Y-offset} ; toute modification de son @code{X-offset}
3500 restera par contre sans effet.
3501
3502 Les indications de repère s'alignent sur des objets de rupture -- tels
3503 les barres de mesure, clefs, métriques et armures.  Certaines propriétés
3504 spécifiques -- dépendant de la @code{break-aligned-interface} --
3505 permettent de gérer le positionnement des indications de repère sur ces
3506 objets.
3507
3508 @menu
3509 * Détermination directe de X-offset et Y-offset::
3510 * Utilisation de side-position-interface::
3511 * Utilisation de self-alignment-interface::
3512 * Utilisation de break-aligned-interface::
3513 @end menu
3514
3515 @seealso
3516 Manuel de notation :
3517 @ref{Utilisation de break-aligned-interface}.
3518
3519 Manuel d'extension :
3520 @rextend{Fonctions de rappel}.
3521
3522
3523 @node Détermination directe de X-offset et Y-offset
3524 @unnumberedsubsubsec Détermination directe de @code{X-offset} et @code{Y-offset}
3525 @translationof Setting X-offset and Y-offset directly
3526
3527 Vous pouvez fournir, pour de nombreux objets, des valeurs numériques aux
3528 propriétés @code{X-offset} et @code{Y-offset}.  Voici par exemple une
3529 note avec indication du doigté tout d'abord avec un positionnement par
3530 défaut, puis repositionnement par modification successive du
3531 @code{X-offset} et du @code{Y-offset}.
3532
3533 @lilypond[verbatim,quote,relative=2]
3534 a-3
3535 a
3536 -\tweak #'X-offset #0
3537 -\tweak #'Y-offset #0
3538 -3
3539 a
3540 -\tweak #'X-offset #-1
3541 -\tweak #'Y-offset #1
3542 -3
3543 @end lilypond
3544
3545 @c TODO write more
3546
3547
3548 @node Utilisation de side-position-interface
3549 @unnumberedsubsubsec Utilisation de @code{side-position-interface}
3550 @translationof Using the side-position-interface
3551
3552 Un objet disposant de la @code{side-position-interface} peut se voir
3553 accolé à son voisin de telle sorte que les bords des deux objets se
3554 touchent.  Un tel objet peut se positionner au-dessus, en dessous, à
3555 droite ou à gauche de son parent.  Ce parent ne saurait être
3556 stipulé ; il est déterminé par l'ordre d'apparition des éléments
3557 dans le flux des saisies.  La plupart de ces objets ont pour parent une
3558 tête de note.
3559
3560 Les valeurs des propriétés @code{side-axis} et @code{direction}
3561 détermineront l'endroit où viendra se positionner l'objet, selon les
3562 préceptes suivants :
3563
3564 @c TODO add an example of each to the table
3565
3566 @multitable @columnfractions .3 .3 .3
3567 @headitem Propriété         @tab Propriété         @tab Positionnement
3568 @headitem @code{side-axis}  @tab @code{direction}  @tab
3569
3570 @item     @code{0}          @tab @code{-1}         @tab gauche
3571 @item     @code{0}          @tab @code{1}          @tab droite
3572 @item     @code{1}          @tab @code{-1}         @tab en dessous
3573 @item     @code{1}          @tab @code{1}          @tab au-dessus
3574
3575 @end multitable
3576
3577 Pour un @code{side-axis} à @code{0}, le @code{X-offset} devrait engager
3578 la procédure @code{ly:side-position-interface::x-aligned-side}.
3579 Celle-ci renverra la valeur adéquate de @code{X-offset} permettant
3580 d'accoler l'objet sur la droite ou sur la gauche de son parent, selon la
3581 valeur de @code{direction}.
3582
3583 Pour un @code{side-axis} à @code{1}, le @code{Y-offset} devrait engager
3584 la procédure @code{ly:side-position-interface::y-aligned-side}.
3585 Celle-ci renverra la valeur adéquate de @code{Y-offset} permettant
3586 d'accoler l'objet au-dessus ou en dessous de son parent, selon la
3587 valeur de @code{direction}.
3588
3589 @c TODO Add examples
3590
3591
3592 @node Utilisation de self-alignment-interface
3593 @unnumberedsubsubsec Utilisation de @code{self-alignment-interface}
3594 @translationof Using the self-alignment-interface
3595
3596 @emph{Réalignement d'objets horizontalement}
3597
3598 L'alignement horizontal d'un objet disposant de la
3599 @code{self-alignment-interface} dépend de la valeur de sa propriété
3600 @code{self-alignment-X}, si tant est que la propriété @code{X-offset} de
3601 cet objet engage la procédure
3602 @code{ly:self-alignment-interface::x-aligned-on-self}.
3603 La propriété @code{self-alignment-X} peut contenir un nombre réel,
3604 l'unité de base étant la moitié de l'étendue horizontale de l'objet.
3605 Une valeur négative décalera l'objet vers la droite, une valeur positive
3606 vers la gauche.  La valeur @code{0} permet de centrer l'objet sur
3607 le point de référence de son parent.  Une valeur de @w{@code{-1}}
3608 alignera le bord gauche de l'objet sur le point de référence de son
3609 parent, et une valeur de @code{1} alignera le bord droit de l'objet
3610 sur le point de référence de son parent.  Les valeurs symboliques
3611 @code{LEFT}, @code{CENTER} et @code{RIGHT} correspondent respectivement
3612 à @w{@code{-1}}, @code{0} et @code{1}.
3613
3614 En règle générale, la valeur de @code{self-alignment-X} se modifie à
3615 l'aide d'une commande @code{\override}.  Le recours à la commande
3616 @code{\tweak} permet de traiter séparément plusieurs annotations
3617 affectées à une même note :
3618
3619 @lilypond[quote,verbatim,relative=1]
3620 a'
3621 -\tweak #'self-alignment-X #-1
3622 ^"left-aligned"
3623 -\tweak #'self-alignment-X #0
3624 ^"center-aligned"
3625 -\tweak #'self-alignment-X #RIGHT
3626 ^"right-aligned"
3627 -\tweak #'self-alignment-X #-2.5
3628 ^"aligned further to the right"
3629 @end lilypond
3630
3631
3632 @emph{Réalignement d'objets verticalement}
3633
3634 L'alignement vertical suit le même principe : la propriété
3635 @code{Y-offset} doit alors engager la procédure
3636 @code{ly:self-alignment-interface::y-aligned-on-self}.  Toutefois, il
3637 arrive bien souvent que d'autres mécanismes interviennent dans
3638 l'alignement vertical.  La valeur de @code{Y-offset} n'étant que
3639 l'une des variables qui seront prises en compte, l'ajustement pour
3640 certains objets peut se révéler fastidieux.  L'unité de base est
3641 relativement réduite, puisqu'elle est de la moitié de l'étendue
3642 verticale de l'objet ; le nombre à fournir en argument pourrait
3643 donc être relativement élevé.  Une valeur de @w{@code{-1}}
3644 alignera le bord inférieur de l'objet sur le point de référence de son
3645 parent, et une valeur de @code{1} alignera le bord supérieur de
3646 l'objet sur le point de référence de son parent.  La
3647 valeur @code{0} permet de centrer l'objet sur le point de référence
3648 de son parent.  Les valeurs symboliques @code{DOWN}, @code{CENTER} et
3649 @code{UP} correspondent respectivement à @w{@code{-1}}, @code{0}
3650 et @code{1}.
3651
3652
3653 @emph{Réalignement d'objets sur les deux axes}
3654
3655 Définir à la fois @code{X-offset} et @code{Y-offset} permet de réaligner
3656 un objet sur les deux axes.
3657
3658 Dans l'exemple ci-dessous, nous ajustons l'indication de doigté de telle
3659 sorte qu'elle se place au plus près de la tête de note.
3660
3661 @lilypond[quote,verbatim,relative=2]
3662 a
3663 -\tweak #'self-alignment-X #0.5  % move horizontally left
3664 -\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
3665 -\tweak #'self-alignment-Y #-1  % move vertically up
3666 -3  % third finger
3667 @end lilypond
3668
3669
3670 @ignore
3671 @unnumberedsubsubsec Utilisation de @code{aligned-on-parent}
3672
3673 @c Cannot document as they do not seem to operate consistently on all objects -td
3674 @c TODO investigate further
3675
3676 The @code{aligned-on-parent} procedures are used in the same way
3677 as the @code{aligned-on-self} procedures, they difference being
3678 that they permit an object to be aligned with the @emph{edges} of
3679 the parent rather than the parent's reference point.  The following
3680 example shows the difference:
3681
3682 @c TODO Add example
3683
3684 @lilypond[verbatim,quote]
3685 @end lilypond
3686
3687 @end ignore
3688
3689
3690 @ignore
3691 @c unnumberedsubsubsec Utilisation de @code{centered-on-parent}
3692
3693 @c Cannot document as they do not seem to operate consistently on all objects -td
3694 @c TODO investigate further
3695
3696 @end ignore
3697
3698 @c TODO The align-interface, BassFigureAlignment and VerticalAlignment
3699
3700
3701 @node Utilisation de break-aligned-interface
3702 @unnumberedsubsubsec Utilisation de @code{break-aligned-interface}
3703 @translationof Using the break-alignable-interface
3704
3705 @cindex alignement sur un objet
3706 @cindex break-align-symbols
3707
3708 Indications de repère et numéros de mesure peuvent s'aligner sur des
3709 objets de notation autres qu'une barre de mesure.  Parmi ces objets,
3710 nous citerons @code{ambitus}, @code{breathing-sign}, @code{clef},
3711 @code{custos}, @code{staff-bar}, @code{left-edge},
3712 @code{key-cancellation}, @code{key-signature}, et @code{time-signature}.
3713
3714 Ces indications et numéros de mesure sont par défaut centrés
3715 horizontalement au-dessus de l'objet :
3716
3717 @lilypond[verbatim,quote,relative=1]
3718 % The rehearsal mark will be centered above the Clef
3719 \override Score.RehearsalMark #'break-align-symbols = #'(clef)
3720 \key a \major
3721 \clef treble
3722 \mark "↓"
3723 e1
3724 % The rehearsal mark will be centered above the Time Signature
3725 \override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
3726 \key a \major
3727 \clef treble
3728 \time 3/4
3729 \mark "↓"
3730 e2.
3731 % The rehearsal mark will be centered above the Breath Mark
3732 \override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
3733 \key a \major
3734 \clef treble
3735 \time 4/4
3736 e1
3737 \breathe
3738 \mark "↓"
3739 @end lilypond
3740
3741 Les différents objets sur lesquels l'alignement pourrait intervenir
3742 seront regroupés dans une liste.  Si l'un des objets est invisible à
3743 l'endroit voulu, en raison d'un réglage de @code{break-visibility} ou
3744 bien par forçage de la visibilité des armures et clefs, le repère ou le
3745 numéro de mesure viendra s'aligner sur le premier élément de cette liste
3746 qui soit visible.  Dans le cas où aucun objet de la liste n'est visible,
3747 l'alignement se fera sur la barre de mesure ou, dans le cas où la barre
3748 de mesure est invisible, à l'endroit même où la barre prendrait place.
3749
3750 @lilypond[verbatim,quote,relative=1]
3751 % The rehearsal mark will be centered above the Key Signature
3752 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3753 \key a \major
3754 \clef treble
3755 \mark "↓"
3756 e1
3757 % The rehearsal mark will be centered above the Clef
3758 \set Staff.explicitKeySignatureVisibility = #all-invisible
3759 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3760 \key a \major
3761 \clef bass
3762 \mark "↓"
3763 gis,,1
3764 % The rehearsal mark will be centered above the Bar Line
3765 \set Staff.explicitKeySignatureVisibility = #all-invisible
3766 \set Staff.explicitClefVisibility = #all-invisible
3767 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3768 \key a \major
3769 \clef treble
3770 \mark "↓"
3771 e''1
3772 @end lilypond
3773
3774 L'alignement d'un repère sur un objet de notation peut se modifier,
3775 comme l'illustre l'exemple suivant.  Toutefois, si la partition comporte
3776 plusieurs portées, ce réglage devra apparaître dans chacune des portées.
3777
3778 @lilypond[verbatim,quote,relative=1]
3779 % The RehearsalMark will be centered above the Key Signature
3780 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
3781 \key a \major
3782 \clef treble
3783 \time 4/4
3784 \mark "↓"
3785 e1
3786 % The RehearsalMark will be aligned with the left edge of the Key Signature
3787 \once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
3788 \mark "↓"
3789 \key a \major
3790 e1
3791 % The RehearsalMark will be aligned with the right edge of the Key Signature
3792 \once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
3793 \key a \major
3794 \mark "↓"
3795 e1
3796 @end lilypond
3797
3798 Le bord gauche d'un repère peut se décaler arbitrairement sur la gauche
3799 ou la droite.  La valeur est exprimée en espaces de portée.
3800
3801 @lilypond[verbatim,quote,relative=1]
3802 % The RehearsalMark will be aligned with the left edge of the Key Signature
3803 % and then shifted right by 3.5 staff-spaces
3804 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
3805 \once \override Score.KeySignature #'break-align-anchor = #3.5
3806 \key a \major
3807 \mark "↓"
3808 e1
3809 % The RehearsalMark will be aligned with the left edge of the Key Signature
3810 % and then shifted left by 2 staff-spaces
3811 \once \override Score.KeySignature #'break-align-anchor = #-2
3812 \key a \major
3813 \mark "↓"
3814 e1
3815 @end lilypond
3816
3817
3818 @node Regroupement vertical d'objets graphiques
3819 @subsection Regroupement vertical d'objets graphiques
3820 @translationof Vertical grouping of grobs
3821
3822 @c TODO Expand this section
3823
3824 Les objets @code{VerticalAlignment} et @code{VerticalAxisGroup}
3825 travaillent de concert.  Comme leur nom anglais l'indiquent,
3826 @code{VerticalAxisGroup} regroupe différents objets tels que les portées
3827 (@code{Staff}), les paroles (@code{Lyrics}) et ainsi de suite ;
3828 puis @code{VerticalAlignment} synchronise verticalement ces différents
3829 groupes.  En général, il n'y a qu'un seul @code{VerticalAlignment} pour
3830 l'ensemble de la partition, mais chaque contexte @code{Staff},
3831 @code{Lyrics} etc. possède son propre @code{VerticalAxisGroup}.
3832
3833
3834 @node Modification des stencils
3835 @subsection Modification des stencils
3836 @translationof Modifying stencils
3837
3838 Tout objet de rendu dispose d'une propriété @code{stencil} attachée à la
3839 @code{grob-interface}.  En règle générale, cette propriété référence
3840 par défaut une fonction spécifique à l'objet et taillée sur mesure pour
3841 fournir le symbole qui va le représenter dans l'output.  Par exemple,
3842 le réglage standard de la propriété @code{stencil} de l'objet
3843 @code{MultiMeasureRest} est @code{ly:multi-measure-rest::print}.
3844
3845 Le symbole standard d'un objet quel qu'il soit peut être remplacé à
3846 partir du moment où la propriété @code{stencil} référence une procédure
3847 différente et écrite à cet effet.  Ceci requiert une bonne maîtrise du
3848 fonctionnement interne de LilyPond, mais est grandement facilité dans
3849 bien des cas et permet d'obtenir le résultat escompté.
3850
3851 En effet, rien ne nous interdit, à partir de la propriété
3852 @code{stencil}, d'appeler la procédure qui génère du texte,
3853 @code{ly:text-interface::print} en l'occurrence, et d'adjoindre à l'objet
3854 une propriété @code{text} qui contiendra, sous forme de @emph{markup},
3855 le symbole à dessein.  Grâce à l'extrême flexibilité des @emph{markups},
3856 vous pourrez parvenir à bien des choses -- voir à ce sujet
3857 @ref{Éléments graphiques dans du texte formaté}.
3858
3859 C'est la technique employée ici, où l'une des têtes de note est
3860 remplacée par une croix inscrite dans un cercle :
3861
3862 @lilypond[verbatim,quote]
3863 XinO = {
3864   \once \override NoteHead  #'stencil = #ly:text-interface::print
3865   \once \override NoteHead #'text = \markup {
3866     \combine
3867       \halign #-0.7 \draw-circle #0.85 #0.2 ##f
3868       \musicglyph #"noteheads.s2cross"
3869   }
3870 }
3871 \relative c'' {
3872   a a \XinO a a
3873 }
3874 @end lilypond
3875
3876 Tous les glyphes de la fonte Feta sont accessibles à l'aide de la
3877 commande de @emph{markup} @code{\musicglyph} -- voir
3878 @ref{La fonte Feta}.
3879
3880 @c TODO Add inserting eps files or ref to later
3881
3882 @c TODO Add inserting Postscript or ref to later
3883
3884 @seealso
3885 Manuel de notation :
3886 @ref{Text markup commands},
3887 @ref{Éléments graphiques dans du texte formaté},
3888 @ref{La fonte Feta},
3889 @ref{Mise en forme du texte}.
3890
3891
3892 @node Modification de l'allure des éléments
3893 @subsection Modification de l'allure des éléments
3894 @translationof Modifying shapes
3895
3896 @menu
3897 * Modification des liaisons::
3898 @end menu
3899
3900
3901 @node Modification des liaisons
3902 @unnumberedsubsubsec Modification des liaisons
3903 @translationof Modifying ties and slurs
3904
3905 @cindex liaison, modification
3906 @cindex Bézier, points de contrôle d'une courbe
3907 @cindex points de contrôle, courbe de Bézier
3908
3909 Les liaisons, qu'elles soient de prolongation, d'articulation ou de
3910 phrasé, sont dessinées sous la forme de courbes de Bézier de degré
3911 trois.  Lorsque l'aspect de la liaison automatiquement calculé n'est pas
3912 satisfaisant,  il peut être modifié manuellement, en fournissant
3913 explicitement les quatre points de contrôle qui permettront de définir
3914 cette courbe.
3915
3916 Quatre points définissent une courbe de Bézier cubique. Les premier et
3917 quatrième points sont les points de départ et d'arrivée de la
3918 courbe ; les deux autres points de contrôle -- P1 et P2 -- en
3919 détermineront l'allure.  La courbe se trace en partant du point P0, en
3920 se dirigeant vers P1 et en arrivant au point P3 selon la direction
3921 @w{P2-P3}.  La courbe est à l'intérieur de l'enveloppe convexe des
3922 points de contrôle.
3923
3924 Voici par exemple une liaison de prolongation dont l'allure n'est pas
3925 des plus heureuses, même en optant pour un @code{\tieDown}.
3926
3927 @lilypond[verbatim,quote,relative=1]
3928 <<
3929   { e1~ e }
3930 \\
3931   { r4 <g c,> <g c,> <g c,> }
3932 >>
3933 @end lilypond
3934
3935 L'un des moyens d'améliorer cette liaison consiste à modifier
3936 manuellement ses quatre points de contrôle.
3937
3938 Les coordonnées des points de contrôle sont données en unités d'espace
3939 de portée.  L'abscisse est relative au point de référence de la note de
3940 départ de la liaison ; l'ordonnée est relative à la ligne médiane
3941 de la portée.  Les différentes coordonnées sont entrées sous la forme
3942 d'une liste de quatre paires de nombres décimaux (ou nombres réels).
3943 L'une des manières de procéder consiste à tout d'abord estimer les
3944 coordonnées des deux extrémités puis, par tâtonnement, déterminer les
3945 deux points intermédiaires.
3946
3947 Remarque intéressante au sujet des courbes : une courbe sera
3948 symétrique si ses points de contrôle sont symétriques.  L'une des
3949 propriétés avantageuses des courbes de Bézier est que leur
3950 transformation -- déplacement, rotation ou échelonnement -- est
3951 réalisable en simplement corrigeant de manière identique ses points de
3952 contrôle.
3953
3954 Pour l'exemple qui nous occupe, l'adaptation suivante nous permet
3955 d'obtenir un résultat plutôt satisfaisant.  Notez bien l'endroit où
3956 cette adaptation est stipulée : juste avant la note de départ de la
3957 liaison.
3958
3959 @lilypond[verbatim,quote,relative=1]
3960 <<
3961   {
3962     \once \override Tie
3963       #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
3964      e1 ~ e
3965   }
3966 \\
3967   { r4 <g c,> <g c,> <g c,> }
3968 >>
3969 @end lilypond
3970
3971 @knownissues
3972 Lorsque plusieurs liaisons, quelle qu'en soit la nature, commencent au
3973 même moment, jouer sur la propriété @code{control-points} est
3974 impossible, et la commande @code{\tweak} inefficace.  Vous pouvez
3975 néanmoins influer sur la propriété @code{tie-configuration} de l'objet
3976 @code{TieColumn} pour déterminer la ligne de départ et l'orientation.
3977
3978 @seealso
3979 Référence des propriétés internes :
3980 @rinternals{TieColumn}.
3981
3982
3983 @node Conteneurs requalifiants
3984 @subsection Conteneurs requalifiants
3985 @translationof Unpure-pure containers
3986
3987 @cindex Scheme, pure containers
3988 @cindex Scheme, unpure containers
3989 @cindex pure containers, Scheme
3990 @cindex unpure containers, Scheme
3991 @cindex espacement horizontal, affinage
3992
3993 Les conteneurs requalifiants permettent de faciliter le calcul des
3994 espacements en cas de modification du @emph{Y-axis} -- plus
3995 particulièrement les composantes @code{Y-offset} et @code{Y-extent} -- à
3996 l'aide d'une fonction scheme en lieu et place de valeurs.
3997
3998 L'envergure verticale (@code{Y-extent}) de certains objets dépend de la
3999 propriété @code{stencil} ; jouer sur leur stencil requiert alors une
4000 intervention supplémentaire au niveau du @code{Y-extent} à l'aide d'un
4001 conteneur transitoire.  Lorsqu'une fonction affecte un @code{Y-offset} ou
4002 un @code{Y-extent}, cela déclenche la détermination des sauts de ligne
4003 de manière anticipée dans la séquence des traitements.  Il en résulte
4004 que cette opération n'est en fait pas exécutée ; elle renvoie
4005 habituellement @code{0} ou @code{'(0 . 0)}, ce qui peut engendrer des
4006 collisions.  Une fonction @qq{pure} évitera d'avorter la construction
4007 des propriétés ou objets, qui de ce fait verront leurs arguments liés à
4008 la verticalité (@code{Y-axis}) correctement évalués.
4009
4010 Il existe actuellement une trentaine de fonctions que l'on peut
4011 qualifier de @qq{pures}.  Le recours à un conteneur transitoire permet
4012 de requalifier une fonction de telle sorte qu'elle soit reconnue comme
4013 @qq{pure} et soit donc évaluée @strong{avant} détermination des sauts de
4014 ligne -- l'espacement horizontal sera de fait ajusté en temps et en heure.
4015 La fonction @qq{impure} sera ensuite évaluée @strong{après} le
4016 positionnement des sauts de ligne.
4017
4018 @warning{Il n'est pas toujours facile d'avoir l'assurance qu'une
4019 fonction soit qualifiée de @qq{pure} ; aussi nous vous recommandons
4020 d'éviter d'utiliser les objets @code{Beam} or @code{VerticalAlignment}
4021 lorsque vous désirez en créer une.}
4022
4023 Un conteneur requalifiant se construit selon la syntaxe
4024
4025 @code{(ly:make-unpure-pure-container f0 f1)}
4026
4027 où @code{f0} est une fonction prenant @var{n} arguments (@var{n_>=_1}),
4028 le premier devant être l'objet en question ; il s'agit de la
4029 fonction dont le résultat sera réutilisé.  @var{f1} est la fonction qui
4030 sera qualifiée de @qq{pure}.  Elle prend @var{n_+_2} arguments, le
4031 premier devant être lui aussi l'objet en question, et les second et
4032 troisième étant respectivement les @qq{point de départ} (@var{start}) et
4033 @qq{point d'arrivée} (@var{end}).
4034
4035 @var{start} et @var{end} sont dans tous les cas des valeurs fictives qui
4036 trouveront leur utilité dans le cas d'objets de type @code{Spanner},
4037 tels les soufflets (@code{Hairpin}) ou barres de ligature (@code{Beam}),
4038 en retournant les différentes estimations de hauteur basées sur leurs
4039 début et fin d'extension.
4040
4041 Viennent ensuite les autres arguments de la fonction initiale @code{f0}
4042 -- autrement dit aucun si @var{n_=_1}.
4043
4044 Les résultats de la deuxième fonction (@code{f1}) permettent une
4045 approximation des valeurs qui seront ensuite utilisées par la fonction
4046 initiale aux fins d'ajustement lors des phases ultérieures d'espacement.
4047
4048 @lilypond[verbatim,quote,ragged-right]
4049 #(define (square-line-circle-space grob)
4050 (let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
4051       (notename (ly:pitch-notename pitch)))
4052  (if (= 0 (modulo notename 2))
4053      (make-circle-stencil 0.5 0.0 #t)
4054      (make-filled-box-stencil '(0 . 1.0)
4055                               '(-0.5 . 0.5)))))
4056
4057 squareLineCircleSpace = {
4058   \override NoteHead #'stencil = #square-line-circle-space
4059 }
4060
4061 smartSquareLineCircleSpace = {
4062   \squareLineCircleSpace
4063   \override NoteHead #'Y-extent =
4064    #(ly:make-unpure-pure-container
4065       ly:grob::stencil-height
4066       (lambda (grob start end) (ly:grob::stencil-height grob)))
4067 }
4068
4069 \new Voice \with { \remove "Stem_engraver" }
4070 \relative c'' {
4071   \squareLineCircleSpace
4072   cis4 ces cisis c
4073   \smartSquareLineCircleSpace
4074   cis4 ces cisis c
4075 }
4076 @end lilypond
4077
4078 La première mesure de l'exemple ci-dessus ne fait pas appel à un
4079 conteneur requalifiant ; le moteur d'espacement n'a donc aucune
4080 connaissance de la largeur des têtes de note et ne peut empêcher
4081 qu'elles chevauchent les altérations.  Dans la deuxième mesure, par
4082 contre, le recours à un conteneur requalifiant informe le moteur
4083 d'espacement de la largeur des têtes de note ; les collisions sont
4084 alors évitées du fait de l'espace réservé à chacune des têtes.
4085
4086 Lorsqu'il s'agit de calculs simples, les fonctions, tant pour la partie
4087 @qq{pure} que pour la partie @qq{impure}, peuvent être identiques au
4088 détail près du nombre d'arguments utilisés ou du domaine d'intervention.
4089
4090 @warning{Le fait de qualifier une fonction de @qq{pure} alors qu'elle ne
4091 l'est pas peut générer des résultats imprévisibles.}
4092
4093
4094 @node Utilisation de fonctions musicales
4095 @section Utilisation de fonctions musicales
4096 @translationof Using music functions
4097
4098 @c TODO -- add @seealso, etc. to these subsections
4099
4100 Une adaptation ou un affinage qui devient récurrent parce que doit
4101 s'appliquer à différentes expressions musicales peut faire l'objet d'une
4102 @emph{fonction musicale}.  Nous ne traiterons ici que des fonctions de
4103 @emph{substitution}, dont le but est de substituer une variable en un
4104 bout de code LilyPond.  D'autres fonctions, plus complexes, sont
4105 abordées au chapitre @rextend{Fonctions musicales}.
4106
4107 @menu
4108 * Syntaxe d'une fonction de substitution::
4109 * Exemples de fonction de substitution::
4110 @end menu
4111
4112
4113 @node Syntaxe d'une fonction de substitution
4114 @subsection Syntaxe d'une fonction de substitution
4115 @translationof Substitution function syntax
4116
4117 La rédaction d'une fonction chargée de substituer du code LilyPond à une
4118 variable est chose relativement aisée.  Une telle fonction est de la
4119 forme
4120
4121 @example
4122 fonction =
4123 #(define-music-function
4124      (parser location @var{arg1} @var{arg2} @dots{})
4125      (@var{type1?} @var{type2?} @dots{})
4126    #@{
4127      @var{@dots{}musique@dots{}}
4128    #@})
4129 @end example
4130
4131 @noindent
4132
4133
4134 @multitable @columnfractions .33 .66
4135 @item @code{@var{argN}}
4136 @tab @var{n}ième argument.
4137
4138 @item @code{@var{typeN?}}
4139 @tab un @emph{type de prédicat} Scheme pour lequel @code{@var{argN}}
4140 doit renvoyer @code{#t}.
4141
4142 @item @code{@var{@dots{}musique@dots{}}}
4143 @tab du code LilyPond tout ce qu'il y a de plus ordinaire, avec des
4144 @code{$} (là où seule une construction LilyPond est autorisée) et des
4145 @code{#} (lorsqu'il s'agit d'une valeur en Scheme ou d'un argument de
4146 fonction musicale) pour référencer les arguments (par ex. @samp{#arg1}).
4147 @end multitable
4148
4149 Les arguments @code{parser} et @code{location} sont obligatoires ;
4150 ils sont utilisés dans certaines situations évoluées, comme indiqué dans
4151 le manuel d'extension des fonctionnalités à au chapitre
4152 @rextend{Fonctions musicales}.  Assurez-vous bien de ne pas les omettre
4153 dans vos fonctions de substitution.
4154
4155 La liste des types de prédicat est elle aussi obligatoire.  Voici
4156 quelques uns des types de prédicat les plus utilisés dans les fonctions
4157 musicales :
4158
4159 @example
4160 boolean?
4161 cheap-list?  @emph{(au lieu de }@qq{list?}@emph{, pour accélérer le traitement)}
4162 ly:duration?
4163 ly:music?
4164 ly:pitch?
4165 markup?
4166 number?
4167 pair?
4168 string?
4169 symbol?
4170 @end example
4171
4172 @noindent
4173 Une liste plus fournie est disponible à l'annexe
4174 @ref{Types de prédicats prédéfinis}.  Vous pouvez par ailleurs définir
4175 vos propres types de prédicat.
4176
4177 @seealso
4178 Manuel de notation :
4179 @ref{Types de prédicats prédéfinis}.
4180
4181 Manuel d'extension :
4182 @rextend{Fonctions musicales}.
4183
4184 Fichiers d'initialisation :
4185 @file{lily/music-scheme.cc},
4186 @file{scm/c++.scm},
4187 @file{scm/lily.scm}.
4188
4189
4190 @node Exemples de fonction de substitution
4191 @subsection Exemples de fonction de substitution
4192 @translationof Substitution function examples
4193
4194 La présente rubrique regroupe quelques exemples de fonction
4195 substitutive.  Le propos est ici d'illustrer les possibilités qu'offrent
4196 les fonctions de substitution simple.
4197
4198 Dans ce premier exemple, nous définissons une fonction dans le but de
4199 simplifier le réglage du décalage d'une annotation (un
4200 @code{TextScript}).
4201
4202 @lilypond[quote,verbatim,ragged-right]
4203 padText =
4204 #(define-music-function
4205      (parser location padding)
4206      (number?)
4207    #{
4208      \once \override TextScript #'padding = #padding
4209    #})
4210
4211 \relative c''' {
4212   c4^"piu mosso" b a b
4213   \padText #1.8
4214   c4^"piu mosso" d e f
4215   \padText #2.6
4216   c4^"piu mosso" fis a g
4217 }
4218 @end lilypond
4219
4220 Nous pouvons utiliser autre chose que des nombres au sein d'une
4221 fonction, y compris une expression musicale :
4222
4223 @lilypond[quote,verbatim,ragged-right]
4224 custosNote =
4225 #(define-music-function
4226      (parser location note)
4227      (ly:music?)
4228    #{
4229      \tweak NoteHead #'stencil #ly:text-interface::print
4230      \tweak NoteHead #'text
4231         \markup \musicglyph #"custodes.mensural.u0"
4232      \tweak Stem #'stencil ##f
4233      $note
4234    #})
4235
4236 \relative c' { c4 d e f \custosNote g }
4237 @end lilypond
4238
4239 Une fonction de substitution peut traiter plusieurs arguments :
4240
4241 @lilypond[quote,verbatim,ragged-right]
4242 tempoPadded =
4243 #(define-music-function
4244      (parser location padding tempotext)
4245      (number? markup?)
4246    #{
4247      \once \override Score.MetronomeMark #'padding = #padding
4248      \tempo \markup { \bold #tempotext }
4249    #})
4250
4251 \relative c'' {
4252   \tempo \markup { "Low tempo" }
4253   c4 d e f g1
4254   \tempoPadded #4.0 "High tempo"
4255   g4 f e d c1
4256 }
4257 @end lilypond
4258
4259 @c TODO: add appropriate @@ref's here.
4260