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