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