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