1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
4 Translation of GIT committish: 1ac60f7a65210612bcb5a6e508fee4986d8c2701
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..
13 @c Translators: Valentin Villenave, Jean-Charles Malahieude
14 @c Translation checkers: Gilles Thibault
17 @node Modification des réglages prédéfinis
18 @chapter Modification des réglages prédéfinis
19 @translationof Changing defaults
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
32 @cindex Référence des propriétés internes
34 Les moyens de contrôle des différents réglages sont décrits dans un
35 document séparé, @rinternalsnamed{Top,la référence des propriétés
36 internes}. Ce guide répertorie toutes les variables, fonctions et
37 autres options que LilyPond met à votre disposition. Il est consultable
38 @c leave the @uref as one long line.
39 @uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/internals/,en@tie{}ligne},
40 au format HTML@tie{}; il est également inclus dans la documentation
41 fournie avec le logiciel.
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
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::
63 @node Contextes d'interprétation
64 @section Contextes d'interprétation
65 @translationof Interpretation contexts
67 Cette section traite des contextes.
70 * Tout savoir sur les contextes::
71 * Création d'un contexte::
72 * Conservation d'un contexte::
73 * Modification des greffons de contexte::
74 * Modification des réglages par défaut d'un contexte::
75 * Définition de nouveaux contextes::
76 * Ordonnancement des contextes::
82 @rlearning{Contextes et graveurs}.
84 Fichiers d'initialisation :
85 @file{ly/engraver-init.ly},
86 @file{ly/performer-init.ly}.
89 @rlsrnamed{Contexts and engravers, Contextes et graveurs}.
91 Référence des propriétés internes :
92 @rinternals{Contexts},
93 @rinternals{Engravers and Performers}.
96 @node Tout savoir sur les contextes
97 @subsection Tout savoir sur les contextes
98 @translationof Contexts explained
101 @c TODO Rethink and rewrite
103 >> > > - list of contexts: my *danger unmaintainable*
104 >> > > alarm just went off. I'm
106 I knew it would... And leaving out some of them is perfectly fine
108 I do think that a list like this, with the main contexts and a
110 description of what they do (perhaps also with a note about what
112 behavior is associated with each of them, but this may be
114 should be there, and then we could simply list the remaining ones
116 further explanation and with links to the IR.
119 @c TODO Improve layout, order and consistency of wording -td
121 @c TODO Add introduction which explains contexts in generality -td
123 @c TODO Describe propagation of property values -td
125 Les contextes sont hiérarchisés :
128 * Score -- le père de tous les contextes::
129 * Contextes de haut niveau -- les systèmes::
130 * Contextes de niveau intermédiaire -- les portées::
131 * Contextes de bas niveau -- les voix::
134 @node Score -- le père de tous les contextes
135 @unnumberedsubsubsec Score -- le père de tous les contextes
136 @translationof Score - the master of all contexts
138 Il s'agit en l'occurrence du contexte le plus élevé, autrement dit le
139 plus important, en matière de notation. En effet, c'est au niveau de la
140 partition -- @emph{score} en anglais -- que se gèrent le temps et la
141 tonalité@tie{}; c'est donc là qu'il faut s'assurer que les différents
142 éléments, tels les clefs, métriques et armures sont bien répercutés sur
145 Dès lors que LilyPond rencontre un bloc @code{\score@tie{}@{@dots{}@}}
146 ou @code{\layout@tie{}@{@dots{}@}}, se crée implicitement un contexte
150 @node Contextes de haut niveau -- les systèmes
151 @unnumberedsubsubsec Contextes de haut niveau -- les systèmes
152 @translationof Top-level contexts - staff containers
154 De nombreuses partitions sont écrites sur plus d'une portée. Ces
155 portées peuvent être regroupées de différentes manières.
157 @strong{@emph{StaffGroup}}
159 Le groupe de portées est attaché par un crochet, et les barres de mesure
160 sont d'un seul tenant, de la première à la dernière portée. Le
161 @code{StaffGroup} constitue le regroupement le plus simple.
163 @strong{@emph{ChoirStaff}}
165 Ce regroupement est identique au @code{StaffGroup}, à ceci près que les
166 barres de mesure ne traversent pas l'espace inter-portées.
168 @strong{@emph{GrandStaff}}
170 Le groupe de portées est attaché par une accolade sur la gauche, et les
171 barres de mesure sont d'un seul tenant.
173 @strong{@emph{PianoStaff}}
175 Ce regroupement est identique au @code{GrandStaff}, à ceci près que le
176 nom de l'instrument sera directement attaché au système.
179 @node Contextes de niveau intermédiaire -- les portées
180 @unnumberedsubsubsec Contextes de niveau intermédiaire -- les portées
181 @translationof Intermediate-level contexts - staves
183 @strong{@emph{Staff}}
185 La portée prend en charge les clefs, barres de mesure, armures et les
186 altérations accidentelles. Un contexte @code{Staff} peut contenir
187 plusieurs contextes @code{Voice}.
189 @strong{@emph{RhythmicStaff}}
191 De même nature qu'un @code{Staff}, mais destiné à n'imprimer que du
192 rythme. Quelle que soit la hauteur, les notes seront imprimées sur une
193 même et unique ligne.
195 @strong{@emph{TabStaff}}
197 Ce contexte permet de générer des tablatures. La mise en forme par
198 défaut correspond à une tablature pour guitare, sur six lignes.
200 @strong{@emph{DrumStaff}}
202 Contexte dévolu tout spécialement aux parties de percussion@tie{}; il
203 peut contenir plusieurs @code{DrumVoice}.
205 @strong{@emph{VaticanaStaff}}
207 Identique au contexte @code{Staff}, à ceci près qu'il est tout
208 particulièrement adapté au grégorien.
210 @strong{@emph{MensuralStaff}}
212 Identique au contexte @code{Staff}, à ceci près qu'il est tout
213 particulièrement adapté au style mensural de musique ancienne.
216 @node Contextes de bas niveau -- les voix
217 @unnumberedsubsubsec Contextes de bas niveau -- les voix
218 @translationof Bottom-level contexts - voices
220 Les contextes de niveau @qq{voix} initialisent un certain nombre de
221 propriétés et activent les graveurs appropriés. S'agissant de contextes
222 du plus bas niveau, ils ne sauraient contenir d'autre contexte.
224 @strong{@emph{Voice}}
226 Correspond à une voix positionnée sur une portée. Le contexte
227 @code{Voice} s'occupe des indications de nuance, des hampes, des
228 ligatures, des scripts placés au-dessus ou au-dessous de la portée, des
229 différentes liaisons et des silences. Lorsque plusieurs voix doivent
230 cohabiter sur la même portée, il est indispensable de les instancier
233 @strong{@emph{VaticanaVoice}}
235 Fonctionnant comme le contexte @code{Voice}, il est tout
236 particulièrement destiné à gérer le grégorien.
238 @strong{@emph{MensuralVoice}}
240 Fonctionnant comme le contexte @code{Voice}, il est tout
241 particulièrement adapté aux musiques anciennes.
243 @strong{@emph{Lyrics}}
245 Correspond à une voix contenant des paroles. Le contexte @code{Lyrics}
246 gère l'impression d'une ligne de paroles.
248 @strong{@emph{DrumVoice}}
250 Contexte de voix dévolu à une portée de percussions.
252 @strong{@emph{FiguredBass}}
254 Contexte prenant en charge les objets @code{BassFigure} -- la basse
255 chiffrée -- créés à partir de ce qui a été saisi en mode
258 @strong{@emph{TabVoice}}
260 Contexte de voix dévolu au contexte @code{TabStaff}, il est
261 habituellement créé explicitement.
263 @strong{@emph{CueVoice}}
265 Contexte de voix utilisé essentiellement dans le cadre de citations
266 ajoutées à une portée -- voir @ref{Mise en forme d'une citation}. Il
267 est habituellement créé explicitement.
269 @strong{@emph{ChordNames}}
271 Permet d'imprimer des noms d'accord.
276 Then the following, which I don't know what to do with:
278 * GregorianTranscriptionVoice
279 * GregorianTranscriptionStaff
282 Engraves fretboards from chords. Not easy... Not
284 There is now some documentation on FretBoards in the NR, under
285 instrument-specific notation -- cds.
290 Hard coded entry point for LilyPond. Cannot be tuned.
292 Silently discards all musical information given to this
298 @node Création d'un contexte
299 @subsection Création d'un contexte
300 @translationof Creating contexts
302 @c TODO more complete descriptions rather than learning style
304 Lorsqu'une partition ne comporte qu'une portée avec une seule voix, les
305 contextes sont créés automatiquement. Dès que la structure s'étoffe, il
306 devient nécessaire de les créer explicitement, en suivant l'une des
307 trois méthodes suivantes@tie{}:
312 La commande la plus simple à utiliser est @code{\new}@tie{}; c'est aussi
313 la plus courte. Elle se place juste avant une expression musicale et se
317 @cindex nouveau contexte
318 @cindex contexte, création
321 \new @var{type} @var{expression_musicale}
325 où @var{type} est le nom d'un contexte (par ex. @code{Staff} ou
326 @code{Voice}). Cette commande crée un nouveau contexte et y interprète
327 le contenu de l'@var{expression_musicale}.
329 C'est ce qui se passe lorsqu'une partition comporte plusieurs
330 portées@tie{}: chaque partie qui doit apparaître sur une portée
331 spécifique est précédée d'un @code{\new@tie{}Staff}.
333 @lilypond[quote,verbatim,relative=2,ragged-right]
340 La commande @code{\new} vous permet aussi d'attribuer un nom au
341 contexte que vous créez.
344 \new @var{type} = @var{nom} @var{musique}
346 Le nom que vous spécifiez ne pourra être utilisé que s'il n'a pas déjà
347 été attribué à un autre contexte.
351 Tout comme @code{\new}, la commande @code{\context} affectera une
352 expression musicale à un objet contextuel@tie{}; elle lui attribuera de
353 surcroît un nom. La commande @code{\context} s'emploie de la façon
357 \context @var{type} = @var{nom} @var{musique}
360 LilyPond va dans un premier temps vérifier l'existence d'un contexte du
361 type @var{type} appelé @var{nom}. En l'absence d'un tel contexte,
362 LilyPond crée un nouveau contexte du nom que vous avez spécifié. Cette
363 procédure est tout à fait pertinente lorsque vous faites appel à ce
364 contexte particulier par la suite. Prenons le cas d'un chant@tie{}:
365 nous commençons par nommer la ligne mélodique,
368 \context Voice = "@b{tenor}" @var{musique}
372 de telle sorte que le texte s'aligne correctement sur les notes@tie{}:
375 \new Lyrics \lyricsto "@b{tenor}" @var{paroles}
380 L'une des autres utilisations de contextes explicitement nommés consiste
381 à fusionner deux expressions musicales dans un même contexte. Dans
382 l'exemple qui suit, notes et articulations sont saisies indépendamment.
386 arts = @{ s4-. s4-> @}
389 Elles sont ensuite fusionnées par affectation au même contexte
394 \new Staff \context Voice = "A" \music
395 \context Voice = "A" \arts
398 @lilypond[quote,ragged-right]
402 \new Staff \context Voice = "A" \music
403 \context Voice = "A" \arts
407 Grâce à ce mécanisme, vous pouvez tout à fait générer une version
408 @qq{Urtext} (édition originale) et optionnellement ajouter distinctement
409 des articulations à ces mêmes notes.
411 @cindex création de contextes
414 Voici une troisième manière de créer un contexte@tie{}:
417 \context @var{type} @var{musique}
421 Très comparable à une déclaration @code{\context@tie{}=@tie{}@var{nom}},
422 cette méthode permet de s'affranchir du type de contexte.
424 Cette variante s'utilise lorsque les expression musicales peuvent être
425 interprétées à différents niveaux, comme par exemple lorsque intervient
426 la commande @code{\applyOutput} -- pour de plus amples détails, voir
427 @rextend{Application d'une fonction à tous les objets de mise en forme}.
428 En l'absence de @code{\context} explicite, LilyPond considère qu'il
429 s'agit de @code{Voice}.
432 \applyOutput #'@var{contexte} #@var{fonction} % s'applique à Voice
435 Vous devrez respecter ces formulations si votre fonction doit
436 s'interpréter au niveau @code{Score} ou @code{Staff}@tie{}:
439 \applyOutput #'Score #@var{fonction}
440 \applyOutput #'Staff #@var{fonction}
446 @node Conservation d'un contexte
447 @subsection Conservation d'un contexte
448 @translationof Keeping contexts alive
450 @cindex contextes, maintien actif
451 @cindex contextes, durée de vie
453 En règle générale, un contexte disparaît dès qu'il n'y a plus rien à
454 faire. Autrement dit, un contexte @code{Voice} disparaît dès après le
455 dernier événement qu'il contient, et un contexte @code{Staff} dès que
456 les contextes @code{Voice} qu'il supporte ne contiennent plus rien.
457 Ceci peut avoir des conséquences néfastes lorsqu'il est fait référence à
458 un contexte alors disparu, comme dans le cas d'un changement de portée
459 introduit par la commande @code{\change}, l'association de paroles à
460 l'aide de la commande @code{\lyricsto} ou si des événements surviennent
461 à nouveau pour ce contexte précédemment actif.
463 Une exception cependant à cette règle@tie{}: en présence d'un contexte
464 @code{Staff} ou dans une construction @code{<<...>>}, un seul des
465 contextes @code{Voice} inclus restera actif jusqu'à la fin du contexte
466 @code{Staff} ou de la construction @code{<<...>>}, y compris s'il y
467 a des @qq{trous}. Le contexte alors persistant sera le premier
468 rencontré dans la construction @code{@{...@}} sans tenir compte des
469 éventuels @code{<<...>>} qu'elle pourrait contenir.
471 Un contexte restera actif dès lors qu'il s'y passera toujours quelque
472 chose. Un contexte @code{Staff} restera actif si l'une des voix qu'il
473 supporte est toujours active. L'un des moyens de s'en assurer
474 consiste à ajouter des silences invisibles parallèlement à la musique.
475 Vous devrez les ajouter dans tous les contextes @code{Voice} qui doivent
476 rester actifs. Nous vous conseillons, lorsque plusieurs voix
477 interviennent de manière sporadique, de toutes les maintenir actives
478 plutôt que de vous fier aux exceptions mentionnées plus haut.
480 Dans l'exemple suivant, les deux voix A et B sont maintenues actives
481 jusqu'à la fin du morceau@tie{}:
483 @lilypond[quote,verbatim]
484 musicA = \relative c'' { d4 d d d }
485 musicB = \relative c'' { g4 g g g }
488 \new Voice = "A" { s1*5 } % Keep Voice "A" alive for 5 bars
489 \new Voice = "B" { s1*5 } % Keep Voice "B" alive for 5 bars
494 \context Voice = "A" {
498 \context Voice = "B" {
502 \context Voice = "A" { \musicA }
503 \context Voice = "B" { \musicB }
504 \context Voice = "A" { \musicA }
515 @cindex paroles, alignement sur une mélodie épisodique
517 L'exemple suivant illustre la manière d'écrire selon cette méthode une
518 mélodie discontinue à laquelle se rattachent des paroles. Dans la
519 réalité, mélodie et accompagnement feraient l'objet de portées séparées.
521 @lilypond[quote,verbatim]
522 melody = \relative c'' { a4 a a a }
523 accompaniment = \relative c' { d4 d d d }
524 words = \lyricmode { These words fol -- low the mel -- o -- dy }
527 \new Staff = "music" {
529 \new Voice = "melody" {
531 s1*4 % Keep Voice "melody" alive for 4 bars
534 \new Voice = "accompaniment" {
539 \context Voice = "melody" { \melody }
540 \context Voice = "accompaniment" { \accompaniment }
542 \context Voice = "accompaniment" { \accompaniment }
544 \context Voice = "melody" { \melody }
545 \context Voice = "accompaniment" { \accompaniment }
550 \new Lyrics \with { alignAboveContext = #"music" }
551 \lyricsto "melody" { \words }
556 Une autre méthode, qui s'avère plus productive dans nombre de cas,
557 consiste à maintenir active la ligne mélodique en y insérant des
558 silences invisibles tout au long de l'accompagnement@tie{}:
560 @lilypond[quote,verbatim]
561 melody = \relative c'' {
567 accompaniment = \relative c' {
573 words = \lyricmode { These words fol -- low the mel -- o -- dy }
577 \new Staff = "music" {
579 \new Voice = "melody" {
583 \new Voice = "accompaniment" {
589 \new Lyrics \with { alignAboveContext = #"music" }
590 \lyricsto "melody" { \words }
596 @node Modification des greffons de contexte
597 @subsection Modification des greffons de contexte
598 @translationof Modifying context plug-ins
600 @c TODO Should this be Modifying engravers or Modifying contexts?
602 Les contextes, tels que @code{Score} ou @code{Staff}, ne contiennent
603 pas que des propriétés@tie{}; ils mettent également en œuvre certains
604 sous-programmes (@emph{plug-ins} pour employer le terme consacré) nommés
605 @qq{graveurs} (@emph{engravers} pour reprendre le terme anglais).
606 Ces sous-programmes sont chargés de créer les différents éléments de
607 notation@tie{}: on trouve ainsi dans le contexte @code{Voice} un graveur
608 @code{Note_heads_engraver}, chargé des têtes de notes et, dans le
609 contexte @code{Staff}, un graveur @code{Key_signature_engraver}, chargé
612 Vous trouverez une description exhaustive de chaque graveur dans
614 @rinternals{Engravers and Performers}.
617 Référence des propriétés internes @expansion{} Translation @expansion{} Engravers.
619 Chaque contexte mentionné dans
621 @rinternals{Contexts}
624 Référence des propriétés internes @expansion{} Translation @expansion{} Context.
626 répertorie les graveurs mis en œuvre.
628 On peut faire, au moyen de ces graveurs, sa propre @qq{cuisine}, en
629 modifiant les contextes à volonté.
631 Lorsqu'un contexte est créé, par la commande @code{\new} ou
632 @code{\context}, on peut y adjoindre un bloc @code{\with} (en anglais
633 @qq{avec}), dans lequel il est possible d'ajouter (commande
634 @code{\consists}) ou d'enlever (commande @code{\remove}) des
640 \new @var{contexte} \with @{
653 Ici les points de suspension @dots{} devront être remplacés par le nom
654 des graveurs désirés. Dans l'exemple suivant, on enlève du contexte
655 @code{Staff}, la métrique (graveur @code{Time_signature_engraver})
656 et la clé (graveur @code{Clef_engraver}).
658 @lilypond[quote,relative=1,verbatim]
664 \remove "Time_signature_engraver"
665 \remove "Clef_engraver"
672 La clé et le chiffre de mesure ont disparu de la deuxième portée. C'est
673 une méthode quelque peu radicale, puisqu'elle affectera toute la portée
674 jusqu'à la fin de la partition. L'espacement s'en trouve également
675 affecté, ce qui peut être ou non l'effet recherché. Une méthode plus
676 sophistiquée aurait été de rendre ces objets transparents (voir
677 @rlearning{Visibilité et couleur des objets}).
679 Dans l'exemple suivant, voici une mise en pratique plus utile. En temps
680 normal, les barres de mesure et la métrique sont synchronisées
681 verticalement dans toute la partition. Les graveurs qui en sont
682 responsables se nomment @code{Timing_translator} et
683 @code{Default_bar_line_engraver}. En les enlevant du contexte
684 @code{Score} pour les attribuer au contexte @code{Staff}, chaque portée
685 peut désormais avoir sa propre métrique.
687 @cindex polymétrique, partition
688 @cindex chiffres de mesure multiples
690 @lilypond[quote,verbatim]
694 \consists "Timing_translator"
695 \consists "Default_bar_line_engraver"
701 \consists "Timing_translator"
702 \consists "Default_bar_line_engraver"
711 \remove "Timing_translator"
712 \remove "Default_bar_line_engraver"
718 En règle générale, l'ordre dans lequel les graveurs sont mentionnés
719 importe peu. Il se peut toutefois qu'un graveur écrive une propriété
720 qui sera interprétée par un autre, ou qu'un graveur crée un objet
721 graphique qui sera traité par un autre@tie{}; l'ordre d'apparition de
722 ces graveurs prendra alors tout son importance.
724 Pour information, les ordonnancements suivants sont importants@tie{}:
725 le @code{Bar_engraver} devrait toujours être le premier@tie{}; le
726 @code{New_fingering_engraver} doit toujours précéder le
727 @code{Script_column_engraver}. Nous vous conseillons, pour les autres,
728 de vérifier les éventuelles dépendances.
732 @node Modification des réglages par défaut d'un contexte
733 @subsection Modification des réglages par défaut d'un contexte
734 @translationof Changing context default settings
736 La personnalisation des réglages par défaut d'un contexte, qu'il
737 s'agisse de @code{Score}, @code{Staff} ou @code{Voice}, peut se réaliser
738 indépendamment de la musique dans un bloc @code{\layout} -- placé dans
739 le bloc @code{\score} auquel ces modifications doivent s'appliquer -- au
740 moyen de la commande @code{\context}.
742 Point n'est besoin d'utiliser la commande
743 @code{\set@tie{}@var{contexte}} lorsque les réglages par défaut d'un
744 contexte sont ainsi modifiés@tie{}:
747 @lilypond[quote,verbatim]
750 a4^"Petite police, hampes épaisses, sans métrique" a a a
757 \override Stem #'thickness = #4.0
758 \remove "Time_signature_engraver"
764 Le raccourci @code{\Staff} invoque les définitions inhérentes au
765 contexte @code{Staff}, de façon à ce qu'elles puissent être modifiées.
766 Ces nouvelles spécifications affecteront toutes les portées (tous les
767 contextes @code{Staff}) de ce bloc @code{\score}.
769 Les adaptations peuvent aussi bien se faire au niveau du contexte
770 @code{Score} qu'au niveau de tous les contextes @code{Voice}.
772 Il est possible de stocker des modifications de contexte dans un
773 identificateur. Sa définition devra être précédée de l'instruction
776 @lilypond[quote,verbatim]
779 \override Stem #'thickness = #4.0
780 \remove "Time_signature_engraver"
785 \override Stem #'thickness = #-2.0
788 melody = \relative c'' {
797 s1*0^"Small, thicker stems, no time signature"
813 @c TODO: add \with in here.
816 @node Définition de nouveaux contextes
817 @subsection Définition de nouveaux contextes
818 @translationof Defining new contexts
820 @cindex contexte, création
821 @cindex graveur, affectation à un contexte
836 Les contextes tels que @code{Staff} ou @code{Voice} sont faits
837 de briques de construction empilées. En combinant divers graveurs,
838 il est possible de créer de nouveaux types de contextes.
840 Dans l'exemple suivant on construit, de zéro, un nouveau contexte très
841 semblable à @code{Voice}, mais qui n'imprime que des têtes de notes en
842 forme de barre oblique au centre de la portée. Un tel contexte peut
843 servir, par exemple, à indiquer un passage improvisé dans un morceau de
847 @lilypond[quote,ragged-right]
850 \type "Engraver_group"
851 \consists "Note_heads_engraver"
852 \consists "Rhythmic_column_engraver"
853 \consists "Text_engraver"
854 \consists Pitch_squash_engraver
855 squashedPosition = #0
856 \override NoteHead #'style = #'slash
857 \override Stem #'transparent = ##t
858 \override Flag #'transparent = ##t
862 \accepts "ImproVoice"
866 a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
867 c4 c^"dévêtez-vous" c_"tout en jouant :)" c }
873 On a rassemblé les réglages dans un bloc @code{\context}, lui-même placé
874 dans le bloc @code{\layout}@tie{}:
884 En lieu et place des points (@dots{}), voici les éléments à
887 Tout d'abord, il convient de donner un nom à notre nouveau
894 Comme il est très semblable à @code{Voice}, nous souhaitons que
895 toutes les commandes associées au @code{Voice} déjà existant restent
896 valables. D'où nécessité de la commande @code{\alias}, qui va
897 l'associer au contexte @code{Voice}@tie{}:
903 Ce contexte doit pouvoir imprimer des notes et des indications
904 textuelles@tie{}; on ajoute donc les graveurs appropriés@tie{}:
907 \consists Note_heads_engraver
908 \consists Text_engraver
911 Cependant, on veut que les notes s'affichent toutes au centre de
915 \consists Pitch_squash_engraver
916 squashedPosition = #0
919 Le graveur @rinternals{Pitch_squash_engraver} intercepte les notes
920 créées par le @rinternals{Note_heads_engraver}, et les @qq{écrase} pour
921 qu'elles aient toutes la même position verticale, définie par
922 @code{squashedPosition}@tie{}: ici il s'agit de la valeur@tie{}@code{0},
923 c'est-à-dire la ligne du milieu.
925 On veut que les notes aient la forme d'une barre oblique, sans
929 \override NoteHead #'style = #'slash
930 \override Stem #'transparent = ##t
931 \override Flag #'transparent = ##t
934 Afin que tous ces graveurs puissent travailler de concert, on leur
935 adjoint un sous-programme spécial, introduit par la commande
936 @code{\type}@tie{}: il s'agit de @code{Engraver_group},
939 \type "Engraver_group"
942 Récapitulons@tie{}; on se retrouve avec le bloc suivant@tie{}:
947 \type "Engraver_group"
948 \consists "Note_heads_engraver"
949 \consists "Text_engraver"
950 \consists Pitch_squash_engraver
951 squashedPosition = #0
952 \override NoteHead #'style = #'slash
953 \override Stem #'transparent = ##t
954 \override Flag #'transparent = ##t
961 Ce n'est pas tout. En effet, on veut intégrer le nouveau contexte
962 @code{ImproVoice} dans la hiérarchie des contextes. Tout comme le
963 contexte @code{Voice}, sa place est au sein du contexte @code{Staff}.
964 Nous allons donc modifier le contexte @code{Staff},
965 au moyen de la commande @code{\accepts}@tie{}:
976 Le contraire de @code{\accepts} est @code{\denies}@tie{}; il est parfois
977 utile lorsque l'on recycle des définitions de contextes déjà existantes.
979 Enfin, tout cela doit prendre place dans le bloc @code{\layout},
990 \accepts "ImproVoice"
995 On peut alors saisir la musique, comme dans l'exemple plus haut@tie{}:
1003 c c_"tout en jouant :)"
1010 @node Ordonnancement des contextes
1011 @subsection Ordonnancement des contextes
1012 @translationof Context layout order
1014 @cindex contextes, ordonnancement
1019 Les contextes viennent en principe se positionner selon leur ordre
1020 d'apparition dans le fichier source. Lorsque plusieurs contextes sont
1021 imbriqués, le contexte englobant supportera les différents contextes
1022 mentionnés dans le fichier source, à la stricte condition qu'ils soient
1023 dûment @qq{agréés}. Les contextes imbriqués qui ne font pas partie de
1024 la @qq{liste d'agréments} du contexte englobant se retrouveront en
1025 dessous de celui-ci au lieu d'y être imbriqués.
1027 La liste des @qq{agréments} d'un contexte se gère à l'aide des
1028 instructions @code{\accepts} et @code{\denies} -- @code{\accepts} pour
1029 ajouter un contexte à la liste, et @code{\denies} pour retirer
1030 l'agrément. Il est par exemple peu conventionnel que les accords nommés
1031 apparaissent dans un contexte @code{Staff}@tie{}; autrement dit, le
1032 contexte @code{ChordNames} ne fait pas partie de la @qq{liste
1033 d'agréments} du contexte @code{Staff} par défaut. Néanmoins, et s'il
1034 devait en être ainsi, vous pourriez le spécifier.
1037 @lilypond[verbatim,quote]
1041 \chords { d1:m7 b1:min7.5- }
1046 @lilypond[verbatim,quote]
1050 \chords { d1:m7 b1:min7.5- }
1055 \accepts "ChordNames"
1061 L'instruction @code{\denies} permet, lorsqu'un nouveau contexte reprend
1062 les définitions d'un contexte existant, d'en ajuster les composantes.
1063 C'est par exemple le cas du contexte @code{VaticanaStaff}, réplique du
1064 contexte @code{Staff} au sein duquel le contexte @code{VaticanaVoice} se
1065 substitue au contexte @code{Voice} dans la @qq{liste d'agrément}.
1067 Gardez à l'esprit que, face à une instruction qui ne s'appliquerait à
1068 aucun contexte déjà existant, LilyPond créera un nouveau contexte
1069 implicite. Ceci peut engendrer une nouvelle portée ou une autre
1074 Manuel d'utilisation :
1075 @rprogram{Apparition d'une portée supplémentaire}.
1077 Fichiers d'initialisation :
1078 @file{ly/engraver-init.ly}.
1081 @node En quoi consiste la référence des propriétés internes
1082 @section En quoi consiste la référence des propriétés internes
1083 @translationof Explaining the Internals Reference
1086 * Navigation dans les références du programme::
1087 * Interfaces de rendu::
1088 * Détermination de la propriété d'un objet graphique (grob)::
1089 * Conventions de nommage::
1092 @node Navigation dans les références du programme
1093 @subsection Navigation dans les références du programme
1094 @translationof Navigating the program reference
1096 @c TODO remove this (it's in the LM)
1097 @c Replace with more factual directions
1099 Comment, par exemple, déplacer le doigté dans le fragment suivant@tie{}?
1101 @lilypond[quote,relative=2,verbatim]
1107 Sur la page de la documentation relative aux doigtés, c'est-à-dire
1108 @ref{Doigtés}, se trouve l'indication suivante@tie{}:
1114 Référence des propriétés internes : @rinternals{Fingering}.
1117 @c outdated info; probably will delete.
1119 This fragment points to two parts of the program reference: a page
1120 on @code{FingerEvent} and one on @code{Fingering}.
1122 The page on @code{FingerEvent} describes the properties of the music
1123 expression for the input @code{-2}. The page contains many links
1124 forward. For example, it says
1127 Accepted by: @rinternals{Fingering_engraver},
1131 That link brings us to the documentation for the Engraver, the
1135 This engraver creates the following layout objects: @rinternals{Fingering}.
1138 In other words, once the @code{FingerEvent}s are interpreted, the
1139 @code{Fingering_engraver} plug-in will process them.
1143 @c I can't figure out what this is supposed to mean. -gp
1145 The @code{Fingering_engraver} is also listed to create
1146 @rinternals{Fingering} objects,
1148 @c old info? it doesn't make any sense to me with our current docs.
1150 second bit of information listed under @b{See also} in the Notation
1155 Ladite référence est disponible au format HTML, ce qui rend la
1156 navigation bien plus aisée. Il est possible soit de la lire en ligne,
1157 soit de la télécharger dans ce format. La démarche présentée ici sera
1158 plus difficile à comprendre dans un document au format PDF.
1161 Suivons le lien @rinternals{Fingering}. En haut de la nouvelle page,
1165 Fingering objects are created by: @rinternals{Fingering_engraver} and
1166 @rinternals{New_fingering_engraver}.
1169 En d'autres termes, @emph{Les indications de doigtés}
1170 (@code{Fingering} en anglais) @emph{sont créées par les graveurs
1171 @rinternals{Fingering_engraver} et @rinternals{New_fingering_engraver}.}
1173 En suivant derechef les liens propres à la référence du programme, on
1174 suit en fait le cheminement qui aboutit à la création de la
1179 @item @rinternals{Fingering}:
1180 @rinternals{Fingering} objects are created by:
1181 @rinternals{Fingering_engraver}
1183 @item @rinternals{Fingering_engraver}:
1184 Music types accepted: @rinternals{fingering-event}
1186 @item @rinternals{fingering-event}:
1187 Music event type @code{fingering-event} is in Music expressions named
1188 @rinternals{FingeringEvent}
1191 Ce cheminement se produit, bien sûr, en sens inverse@tie{}: nous sommes
1192 ici partis du résultat, et avons abouti aux évènements (en anglais
1193 @emph{Events}) engendrés par le fichier d'entrée. L'inverse est
1194 également possible@tie{}: on peut partir d'un évènement, et suivre le
1195 cheminement de LilyPond qui aboutit à la création d'un ou plusieurs
1198 La référence des propriétés internes peut également se parcourir comme
1199 un document normal. On y trouve des chapitres tels que
1201 @rinternals{Music definitions},
1204 @code{Music definitions}
1206 @rinternals{Translation}, ou encore @rinternals{Backend}. Chaque
1207 chapitre recense toutes les définitions employées, et les propriétés
1208 sujettes à ajustements.
1210 @c -- what about adding a link to the glossary here ? -vv
1211 La Référence des propriétés internes n'est pas traduite en français --
1212 notamment du fait qu'elle est en évolution constante, tout comme
1213 LilyPond. En revanche, les termes musicaux font l'objet d'un
1214 @rglosnamed{Top, glossaire} fort utile pour les utilisateurs
1218 @node Interfaces de rendu
1219 @subsection Interfaces de rendu
1220 @translationof Layout interfaces
1222 @cindex interfaces de rendu
1223 @cindex rendu, interfaces de
1224 @cindex objets graphiques
1226 Tous les éléments de notation sont considérés comme des objets
1227 graphiques (en anglais @emph{Graphical Object}, d'où le diminutif
1228 @emph{Grob}). Chaque objet est doté d'un certain nombre de propriétés
1229 (l'épaisseur du trait, l'orientation, etc.), et lié à d'autres objets.
1230 Le fonctionnement de ces objets est décrit en détail dans
1231 @rinternals{grob-interface}.
1233 Prenons l'exemple des doigtés (en anglais @emph{Fingering}). La page
1234 @code{Fingering} de la Référence des propriétés internes établit une
1235 liste de définitions propres à ce type d'objet@tie{}:
1238 @code{padding} (dimension, in staff space):
1244 Ce qui signifie que les doigtés doivent être maintenus à une certaine
1245 distance (@emph{padding}) des notes@tie{}: 0,5 unités @emph{staff-space}
1248 Chaque objet peut avoir plusieurs attributs, en tant qu'élément
1249 typographique ou musical. Ainsi, un doigté (objet @emph{Fingering})
1250 possède les attributs suivants@tie{}:
1255 Sa taille ne dépend pas de l'espacement horizontal, contrairement aux
1256 liaisons ou ligatures.
1259 C'est du texte -- un texte vraiment court, certes.
1262 Ce texte est imprimé au moyen d'une fonte, contrairement aux liaisons ou
1266 Sur l'axe horizontal, le centre de ce symbole doit être aligné avec le
1270 Sur l'axe vertical, le symbole doit être proche de la note et de la
1274 Sur l'axe vertical encore, il doit également s'ordonner avec les
1275 éventuels autres symboles, ponctuations ou éléments textuels.
1278 Faire appliquer ces différents attributs est le rôle des
1279 @emph{interfaces}, que l'on trouve en bas de la page
1280 @rinternals{Fingering}.
1283 This object supports the following interfaces:
1284 @rinternals{item-interface},
1285 @rinternals{self-alignment-interface},
1286 @rinternals{side-position-interface}, @rinternals{text-interface},
1287 @rinternals{text-script-interface}, @rinternals{font-interface},
1288 @rinternals{finger-interface}, and @rinternals{grob-interface}.
1295 Cet objet admet les interfaces suivantes@tie{}:
1298 Suit la liste des interfaces en question, présentées comme autant de
1299 liens qui conduisent aux pages dédiées à chacune d'entre elles.
1300 Chaque interface est dotée d'un certain nombre de propriétés, dont
1301 certaines peuvent être modifiées, et d'autres non (les @emph{Internal
1302 properties}, ou propriétés internes).
1304 Pour aller encore plus loin, plutôt que de simplement parler de l'objet
1305 @code{Fingering}, ce qui ne nous avance pas à grand chose, on peut aller
1306 explorer son âme même, dans les fichiers source de LilyPond (voir
1307 @rlearning{Autres sources de documentation}), en l'occurrence le fichier
1308 @file{scm/define-grobs.scm}@tie{}:
1313 (avoid-slur . around)
1314 (slur-padding . 0.2)
1315 (staff-padding . 0.5)
1316 (self-alignment-X . 0)
1317 (self-alignment-Y . 0)
1318 (script-priority . 100)
1319 (stencil . ,ly:text-interface::print)
1320 (direction . ,ly:script-interface::calc-direction)
1321 (font-encoding . fetaText)
1322 (font-size . -5) ; don't overlap when next to heads.
1323 (meta . ((class . Item)
1324 (interfaces . (finger-interface
1326 text-script-interface
1328 side-position-interface
1329 self-alignment-interface
1330 item-interface))))))
1334 @dots{}où l'on découvre que l'objet @code{Fingering} n'est rien de plus
1335 qu'un amas de variables et de réglages. La page de la Référence des
1336 propriétés internes est en fait directement engendrée par cette
1340 @node Détermination de la propriété d'un objet graphique (grob)
1341 @subsection Détermination de la propriété d'un objet graphique (grob)
1342 @translationof Determining the grob property
1344 @c TODO remove this (it's in the LM)
1345 @c Replace with more factual directions
1347 Nous voulions changer la position du chiffre @b{2} dans le fragment
1350 @lilypond[quote,relative=2,verbatim]
1356 Dans la mesure où le @b{2} est placé, verticalement, à proximité de la
1357 note qui lui correspond, nous allons devoir trouver l'interface en
1358 charge de ce placement, qui se trouve être
1359 @code{side-position-interface}. Sur la page de cette interface, on peut
1363 @code{side-position-interface}
1365 Position a victim object (this one) next to other objects (the
1366 support). The property @code{direction} signifies where to put the
1367 victim object relative to the support (left or right, up or down?)
1373 @code{side-position-interface}
1375 Placer l'objet affecté à proximité d'autres objets. La propriété
1376 @code{direction} indique où positionner l'objet (à droite ou à gauche,
1382 En dessous de cette description se trouve décrite la variable
1383 @code{padding}@tie{}:
1388 (dimension, in staff space)
1390 Add this much extra space between objects that are next to each other.
1397 Ajouter tel espace supplémentaire entre des objets proches les uns des
1402 En augmentant la valeur de @code{padding}, on peut donc éloigner le
1403 doigté de la note. La commande suivante insère trois unités d'espace
1404 vide entre la note et le doigté@tie{}:
1407 \once \override Voice.Fingering #'padding = #3
1410 En ajoutant cette commande avant la création du doigté (de l'objet
1411 @code{Fingering}), donc avant @code{c2}, on obtient le résultat
1414 @lilypond[quote,relative=2,verbatim]
1415 \once \override Voice.Fingering #'padding = #3
1421 Dans le cas présent, le réglage intervient dans le contexte @code{Voice},
1422 ce qui pouvait également se déduire de la Référence des propriétés
1423 internes, où la page du graveur @rinternals{Fingering_engraver}
1427 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
1433 Le graveur Fingering_engraver fait partie des contextes@tie{}: @dots{}
1438 @node Conventions de nommage
1439 @subsection Conventions de nommage
1440 @translationof Naming conventions
1442 Afin de s'y retrouver plus aisément et d'éviter les erreurs de frappe,
1443 voici quelques conventions en matière de nommage@tie{}:
1446 @item fonctions scheme :
1447 minuscule-avec-trait-d-union (y compris noms en mot-unique)
1448 @item fonctions scheme :
1449 ly:plus-style-scheme
1450 @item événements, classes et propriétés musicaux :
1451 identique-aux-fonctions-scheme
1452 @item interfaces d'objet graphique :
1454 @item propriétés d'arrière plan :
1455 style-scheme (mais X et Y pour les axes)
1456 @item contextes (ainsi que MusicExpressions et grobs) :
1457 Capitale initiale ou Camélisation (CamelCase)
1458 @item propriétés de contexte :
1459 minusculeSuivieDeCamélisation
1461 Capitale_initiale_puis_minuscules_séparées_par_un_souligné
1464 Les questions que vous devez vous poser sont@tie{}:
1466 @item Qu'est-ce qui relève des conventions, et qu'est-ce qui relève de
1468 @item Qu'est-ce qui relève des règles du langage sous-jacent, et
1469 qu'est-ce qui est propre à LilyPond@tie{}?
1473 @node Modification de propriétés
1474 @section Modification de propriétés
1475 @translationof Modifying properties
1477 @c TODO change the menu and subsection node names to use
1478 @c backslash once the new macro to handle the refs
1479 @c is available. Need to find and change all refs at
1480 @c the same time. -td
1483 * Vue d'ensemble de la modification des propriétés::
1484 * La commande de fixation (set)::
1485 * La commande de dérogation (override)::
1486 * La commande d'affinage (tweak)::
1488 * Modification de listes associatives::
1491 @node Vue d'ensemble de la modification des propriétés
1492 @subsection Vue d'ensemble de la modification des propriétés
1493 @translationof Overview of modifying properties
1495 Chaque contexte est chargé de créer plusieurs types d'objets graphiques.
1496 Il contient également les réglages nécessaires pour chacun de ces
1497 objets. Si l'on modifie ces réglages, les objets n'auront plus la même
1500 Les contextes comportent deux types différents de propriétés@tie{}: des
1501 propriétés de contexte et des propriétés d'objet graphique. Les
1502 propriétés de contexte sont celles qui s'appliqueront globalement au
1503 contexte en tant que tel@tie{}; elles gèrent la manière dont le contexte
1504 apparaîtra. Les propriétés d'objet graphique, par contre, s'appliquent
1505 à des types particuliers d'objet qui apparaissent dans le contexte en
1508 Les commandes @code{\set} et @code{\unset} permettent de modifier les
1509 valeurs des propriétés de contexte. Les commandes @code{\override} et
1510 @code{\revert} permettent de modifier les valeurs des propriétés des
1514 La syntaxe employée pour ce faire est
1517 \override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur}
1520 Ici @var{objet} est un objet graphique, tel que @code{Stem} (les hampes)
1521 ou @code{NoteHead} (les têtes de note)@tie{}; @var{propriété} est une
1522 variable (désignée par un symbole, ce qui explique l'apostrophe)
1523 employée par le système de mise en page. La sous-section
1524 @ref{Élaboration d'une retouche} vous aidera à savoir quoi mettre à la
1525 place de @var{objet}, @var{propriété} et @var{valeur}@tie{}; notre
1526 propos n'est ici que d'examiner l'emploi de cette commande.
1528 La commande suivante@tie{}:
1531 \override Staff.Stem #'thickness = #4.0
1535 rend les hampes plus épaisses (la valeur par défaut est 1.3, ce qui
1536 signifie qu'elles sont 1,3 fois plus épaisses que les lignes de la
1537 portée). Dans la mesure où nous avons indiqué @code{Staff} comme
1538 contexte, ce réglage ne s'appliquera qu'à la portée courante@tie{}; les
1539 autres portées demeureront intactes.
1542 @lilypond[quote,verbatim,relative=2,fragment]
1544 \override Staff.Stem #'thickness = #4.0
1550 La commande @code{\override} modifie donc la définition de l'objet
1551 @code{Stem} dans le contexte @code{Staff}@tie{}; toutes les hampes qui
1552 suivent seront affectées. Tout comme avec la commande @code{\set},
1553 l'argument @var{contexte} peut être omis, auquel cas le contexte par
1554 défaut (ici, @code{Voice}) sera employé. La commande @code{\once}
1555 permet de n'appliquer la modification qu'une seule fois.
1557 @lilypond[quote,fragment,verbatim,relative=2]
1559 \once \override Stem #'thickness = #4.0
1564 La commande @code{\override} doit être entrée @emph{avant} l'objet
1565 concerné. Ainsi, lorsque l'on veut altérer un objet qui se prolonge,
1566 tel qu'une liaison, une ligature ou tout autre objet dit @emph{Spanner},
1567 la commande @code{\override} doit être saisie avant que l'objet soit
1570 @lilypond[quote,fragment,verbatim,relative=2]
1571 \override Slur #'thickness = #3.0
1573 \override Beam #'beam-thickness = #0.6
1578 Dans cet exemple, la liaison (@emph{Slur}) est épaissie, mais non la
1579 ligature (@emph{Beam}). En effet, le code qui lui est relatif n'a pas
1580 été inséré avant le début de la ligature, et demeure donc sans effet.
1582 De même que la commande @code{\unset}, la commande @code{\revert} défait
1583 ce qui a été fait par une commande @code{\override}. Tout comme avec
1584 @code{\unset}, elle ne peut annuler que les réglages effectués dans le
1585 même contexte. Ainsi dans l'exemple suivant, la commande @code{\revert}
1589 \override Voice.Stem #'thickness = #4.0
1590 \revert Staff.Stem #'thickness
1593 Il existe, à l'intérieur même de certaines propriétés, des options que
1594 l'on nomme @q{sous-propriétés}. La syntaxe est alors
1596 @c leave this as a long long
1598 \override @var{contexte}.@var{objet} #'@var{propriété} #'@var{sous-propriété} = #@var{valeur}
1602 Ainsi, par exemple@tie{}:
1605 \override Stem #'(details beamed-lengths) = #'(4 4 3)
1611 Référence des propriétés internes :
1612 @rinternals{Backend},
1613 @rinternals{All layout objects},
1614 @rinternals{OverrideProperty},
1615 @rinternals{RevertProperty},
1616 @rinternals{PropertySet}.
1621 La sous-couche Scheme ne vérifie pas la saisie des propriétés de façon
1622 très stricte. Des références cycliques dans des valeurs Scheme peuvent
1623 de ce fait interrompre ou faire planter le programme -- ou bien les
1627 @node La commande de fixation (set)
1628 @subsection La commande de fixation @code{@bs{}set}
1629 @translationof The set command
1632 @cindex modifier des propriétés
1635 Chaque contexte peut avoir plusieurs @emph{propriétés}, c'est-à-dire
1636 des variables qu'il inclut. Ces dernières peuvent être modifiées @qq{à
1637 la volée}, c'est-à-dire pendant que la compilation s'accomplit. C'est
1638 là le rôle de la commande @code{\set}.
1641 \set @var{contexte}.@var{propriété} = #@var{valeur}
1644 Dans la mesure où @var{valeur} est constituée d'un objet Scheme, elle
1645 doit être précédée du caractère@tie{}@code{#}.
1647 Les propriétés des contextes se libellent sous la forme
1648 @code{minusculeMajuscule}. Leur rôle consiste principalement à traduire
1649 la musique en notation@tie{}: par exemple, @code{localKeySignature}
1650 déterminera quand imprimer une altération accidentelle, et
1651 @code{measurePosition} quand imprimer une barre de mesure. La valeur
1652 des propriétés des contextes peuvent évoluer au fur et à mesure que l'on
1653 avance dans le morceau -- @code{measurePosition} en est l'illustration
1656 Ainsi la propriété de contexte @code{skipBars} permet de condenser les
1657 mesures vides de notes, en des silences multimesures. Il s'agit d'un
1658 objet Scheme, auquel on attribue la valeur booléenne @qq{vrai},
1659 c'est-à-dire la lettre @code{#t} pour @qq{True} en anglais@tie{}:
1661 @lilypond[quote,verbatim,relative=2]
1663 \set Score.skipBars = ##t
1667 Si l'argument @var{contexte} n'est pas spécifié, alors la propriété
1668 cherchera à s'appliquer dans le contexte le plus restreint où elle est
1669 employée@tie{}: le plus souvent @code{ChordNames}, @code{Voice} ou
1672 @lilypond[quote,verbatim,relative=2]
1673 \set Score.autoBeaming = ##f
1677 \set autoBeaming = ##t
1685 Ce changement étant appliqué @qq{à la volée}, il n'affecte que le second
1688 Notez que le contexte le plus restreint n'est pas toujours le bon, et
1689 peut ne pas contenir la propriété qui vous intéresse@tie{}: ainsi, la
1690 propriété @code{skipBars}, évoquée plus haut, ne relève pas du contexte
1691 @code{Voice}, mais du contexte @code{Score} -- le code suivant ne
1694 @lilypond[quote,verbatim,relative=2]
1700 Les contextes s'organisent de façon hiérarchique@tie{}: aussi, lorsqu'un
1701 contexte de niveau supérieur est spécifié (par exemple @code{Staff}), la
1702 propriété sera modifiée dans tous les contextes inférieurs (tous les
1703 contextes @code{Voice}, par exemple) qu'il contient.
1707 La commande @code{\unset} permet d'annuler la définition d'une
1711 \unset @var{contexte}.@var{propriété}
1715 si et seulement si cette propriété a été définie dans ce @var{contexte}
1716 précis. En d'autres termes, la commande @code{\unset} doit
1717 impérativement affecter le même contexte que la commande @code{\set}
1718 d'origine, même en cas d'imbrication.
1720 @lilypond[quote,verbatim,relative=2]
1721 \set Score.autoBeaming = ##t
1726 \unset Score.autoBeaming
1734 Si l'on se trouve dans le contexte le plus restreint, il n'est pas
1735 obligatoire, là encore, de spécifier le @var{contexte}. Ainsi, les deux
1736 lignes suivantes sont équivalentes.
1739 \set Voice.autoBeaming = ##t
1740 \set autoBeaming = ##t
1745 Pour modifier une propriété de façon à ce que l'accommodement ne
1746 s'applique qu'une seule fois, il convient d'adjoindre l'instruction
1747 @code{\once} à la commande @code{\set}@tie{}:
1749 @lilypond[quote,verbatim,relative=2]
1751 \once \set fontSize = #4.7
1756 Ici le changement de taille est annulé aussitôt après la note concernée.
1758 La référence des propriétés internes contient une description exhaustive
1759 de toutes les propriétés, contexte par contexte@tie{}: voir
1761 @rinternals{Tunable context properties}.
1764 Translation @expansion{} Tunable context properties.
1770 Référence des propriétés internes :
1771 @rinternals{Tunable context properties}.
1774 @node La commande de dérogation (override)
1775 @subsection La commande de dérogation @code{@bs{}override}
1776 @translationof The override command
1778 @cindex grob, propriétés
1779 @cindex objet graphique, propriétés
1780 @cindex propriétés d'un grob
1781 @cindex propriétés d'objet graphique
1785 La commande @code{\override} permet de modifier la mise en forme des
1786 objets graphiques. Les descriptions d'objet graphique, dont les noms
1787 commencent par une majuscule, puis comprennent une ou plusieurs
1788 majuscules (de style @code{TotoTata}), contiennent les réglages @qq{par
1789 défaut} pour les objets graphiques. Ces réglages sont sous forme de
1790 liste Scheme@tie{}; on peut les consulter dans le fichier
1791 @file{scm/define-grobs.scm}.
1793 @code{\override} est en fait un raccourci@tie{}:
1796 \override @var{contexte}.@var{NomObjet} #'@var{propriété} = #@var{valeur}
1800 plus ou moins équivalent à
1802 @c leave this long line -gp
1804 \set @var{contexte}.@var{NomObjet} =
1805 #(cons (cons '@var{propriété} @var{valeur})
1806 <valeur antérieure de @var{contexte}.@var{NomObjet}>)
1809 La valeur de @var{contexte}.@var{NomObjet} (une liste associative, ou
1810 @emph{alist}) permet d'initialiser les propriétés des objets un par un.
1811 Les objets eux-mêmes ont leurs propriétés, dont les noms, dans la
1812 tradition du langage Scheme, comprennent un trait d'union
1813 (@code{toto-titi}). Ces propriétés internes changent constamment au
1814 cours de la mise en page@tie{}: en fait, la gravure d'une page n'est
1815 autre que le calcul de toutes ces propriétés au moyen de fonctions de
1818 Nous pouvons donc par exemple accroître l'épaisseur des hampes en jouant
1819 sur la propriété @code{thickness} de l'objet @code{stem}@tie{}:
1821 @lilypond[quote,verbatim,relative=2]
1823 \override Voice.Stem #'thickness = #3.0
1827 Lorsqu'aucun contexte n'est spécifié dans une clause @code{\override},
1828 celle-ci s'appliquera au contexte le plus bas@tie{}:
1830 @lilypond[quote,verbatim,relative=2]
1831 { \override Staff.Stem #'thickness = #3.0
1835 \override Stem #'thickness = #0.5
1844 @cindex annulation d'un override
1845 @cindex override, annulation des effets
1848 Les effets d'un @code{\override} prennent fin à l'aide de l'instruction
1849 @code{\revert}@tie{}:
1851 @lilypond[quote,verbatim,relative=2]
1853 \override Voice.Stem #'thickness = #3.0
1855 \revert Voice.Stem #'thickness
1859 Les effets d'un @code{\override} ou d'un @code{\revert} s'appliquent dès
1860 l'endroit où ils apparaissent, et à tous les objets dans le contexte
1863 @lilypond[quote,verbatim,relative=2]
1868 \override Staff.Stem #'thickness = #3.0
1872 \revert Staff.Stem #'thickness
1879 @cindex override ponctuel
1882 L'instruction @code{\override} doit être précédée d'un @code{\once} dès
1883 lors que les effets de l'accommodement ne concernent que l'événement qui
1884 la suit directement@tie{}:
1886 @lilypond[quote,verbatim,relative=2]
1890 \override Stem #'thickness = #3.0
1894 \once \override Stem #'thickness = #3.0
1902 Les commandes permettant de modifier l'apparence de la partition
1903 ressemblent en général à
1906 \override Voice.Stem #'thickness = #3.0
1910 Pour élaborer un réglage de ce type, on a besoin de connaître
1914 @item le contexte@tie{}: ici @code{Voice} (la voix).
1915 @item l'objet à affecter@tie{}: ici @code{Stem} (les hampes).
1916 @item la propriété à modifier@tie{}: ici @code{thickness} (l'épaisseur
1918 @item la valeur désirée@tie{}: ici @code{3.0} (par défaut, elle est de
1922 Certaines @q{sous-propriétés} sont parfois contenues dans une propriété.
1923 La commande devient alors@tie{}:
1926 \override Stem #'(details beamed-lengths) = #'(4 4 3)
1929 @cindex documentation exhaustive
1930 @cindex trouver des objets graphiques
1931 @cindex objets graphiques, description
1935 Pour bien des propriétés, quel que soit le type de valeur requise,
1936 attribuer la valeur @q{faux} (@code{##f} en Scheme) reviendra à
1937 désactiver complètement l'action de la propriété qui se trouve ainsi
1938 purement ignorée par LilyPond. Cela peut s'avérer fort utile pour des
1939 propriétés causant des désagréments.
1946 Référence des propriétés internes :
1947 @rinternals{Backend}
1950 @node La commande d'affinage (tweak)
1951 @subsection La commande d'affinage @code{@bs{}tweak}
1952 @translationof The tweak command
1954 @cindex retouche (tweak)
1955 @cindex affinage (tweak)
1956 @cindex tweak (retouche, affinage)
1959 L'utilisation d'un @code{\override} pour modifier les propriétés d'un
1960 objet graphique affectera toutes les instances de l'objet en question au
1961 sein du contexte, et ce dès son apparition. Il peut parfois être
1962 préférable de n'affecter qu'un seul objet en particulier plutôt que tous
1963 les objets du contexte. C'est là rôle de l'instruction @code{\tweak},
1964 dont la syntaxe est@tie{}:
1967 \tweak #'@code{objet-propriété} #@code{valeur}
1970 La commande @code{\tweak} s'applique à l'objet qui apparaît
1971 immédiatement après @code{valeur}.
1974 Dans certains cas, on peut passer par un raccourci pour arranger les
1975 objets graphiques. Lorsqu'un objet est directement engendré par un
1976 élément distinct du fichier source, on peut utiliser la commande
1979 Dans l'accord suivant, les notes sont modifiées une par une@tie{}:
1981 @lilypond[relative=2,verbatim,ragged-right]
1987 \tweak #'duration-log #1
1990 -\tweak #'padding #8
1994 Comme on peut le voir, les propriétés sont ici modifiées directement
1995 en même temps que les objets sont saisis. Il n'est plus besoin de
1996 spécifier ni le nom de l'objet (@emph{grob}), ni le contexte dans lequel
1997 cela doit s'appliquer. Ce procédé ne marche que pour des objets
1998 directement liés aux évènements (@rinternals{Event}) du fichier source.
2002 @item Les têtes de notes au sein d'un accord, qui sont directement
2003 engendrées par les hauteurs indiquées
2005 @item Les signes d'articulation, engendrés par les indications de
2009 En revanche, les hampes ou les altérations sont engendrées par les têtes
2010 de notes, et non par des évènements dans le fichier source. De même
2011 pour les clés, qui ne sont pas directement engendrées par le fichier
2012 source, mais plutôt par le changement d'une propriété interne.
2014 En fait, très peu d'objets passent @emph{directement} du code source à
2015 la partition. Une note toute simple, par exemple @code{c4}, fait l'objet
2016 d'un traitement et n'est donc pas directement rendue@tie{}; c'est
2017 pourquoi le code suivant ne sera d'aucun effet@tie{}:
2020 \tweak #'color #red c4
2024 Voir pour plus de détails
2025 @rextend{Affichage d'expressions musicales}.
2028 Pour une introduction à la syntaxe et l'utilisation des retouches, voir
2029 le chapitre @rlearning{Méthodes de retouche}.
2031 Lorsque plusieurs éléments de même nature surviennent au même instant,
2032 il devient impossible d'utiliser l'instruction @code{\override} pour
2033 n'en modifier qu'un seul individuellement, d'où l'intérêt de la commande
2034 @code{\tweak}. Entre autres éléments qui sont susceptibles de se
2035 produire au même instant, nous citerons@tie{}:
2037 @c TODO expand to include any further uses of \tweak
2039 @item les têtes de notes au sein d'un accord,
2040 @item les signes d'articulation,
2041 @item les liaisons de prolongation sur des notes d'un accord,
2042 @item les crochets de nolets démarrant au même instant
2045 @c TODO add examples of these
2047 Dans l'exemple suivant, l'une des têtes de note de l'accord est
2048 colorisée, et l'aspect d'une autre est changé.
2050 @lilypond[relative=2,verbatim,quote]
2055 \tweak #'duration-log #1
2060 L'instruction @code{\tweak} permet aussi de modifier l'aspect d'une
2063 @lilypond[verbatim,quote,relative=1]
2064 c-\tweak #'thickness #5 ( d e f)
2067 La commande @code{\tweak} ne sera pleinement fonctionnelle que si elle
2068 est directement rattachée à l'objet auquel elle doit s'appliquer alors
2069 que le fichier source est converti en flux musical. LilyPond peut
2070 parfois être amené à ajouter d'autres éléments au flux musical lors de
2071 la phase d'analyse. C'est la raison pour laquelle, puisque LilyPond
2072 peut insérer une note dans un accord alors qu'elle n'en fait pas partie
2073 explicitement, il est impératif d'adopter une construction d'accord
2074 lorsque l'instruction @code{\tweak} concerne une note isolée@tie{}:
2076 @lilypond[relative=2,verbatim,quote]
2077 \tweak #'color #red c4
2078 <\tweak #'color #red c>4
2081 La commande @code{\tweak} ne saurait servir à modifier un élément qui ne
2082 serait pas explicitement mentionné dans le fichier source. C'est
2083 notamment le cas des hampes, ligatures ou altérations, dans la mesure où
2084 elles seront ultérieurement générées et après les têtes de note, plutôt
2085 qu'au fil des éléments musicaux saisis. La commande @code{\tweak} ne
2086 peut non plus servir à modifier clefs ou métriques, puisqu'elles seront
2087 immanquablement séparées du @code{\tweak} par l'insertion automatique
2088 d'autres éléments requis pour spécifier le contexte.
2090 Plusieurs commandes @code{\tweak} en enfilade permettent d'affecter un
2091 même élément de notation@tie{}:
2093 @lilypond[verbatim,quote,relative=1]
2095 -\tweak #'style #'dashed-line
2096 -\tweak #'dash-fraction #0.2
2097 -\tweak #'thickness #3
2098 -\tweak #'color #red
2103 Vous pouvez examiner le flux musical généré par une portion de votre
2104 fichier source, y compris les éléments automatiquement insérés, en
2105 suivant les indications portées à la rubrique
2106 @rextend{Affichage d'expressions musicales}. Ceci s'avère tout à fait
2107 approprié pour déterminer ce qui peut se modifier à l'aide d'un
2108 @code{\tweak} ou bien vous aider à rectifier votre source de telle sorte
2109 que le @code{\tweak} produise ses effets.
2113 Manuel d'initiation :
2114 @rlearning{Méthodes de retouche}.
2116 Manuel d'extension :
2117 @rextend{Affichage d'expressions musicales}.
2122 @cindex tweak et identificateur
2123 La commande @code{\tweak} ne peut s'utiliser dans une variable.
2125 @cindex tweaks et paroles
2126 La commande @code{\tweak} est inopérante en mode @code{\lyricmode}.
2128 @cindex tweaking control points
2129 @cindex control points, tweaking
2130 Lorsqu'il y a plusieurs liaisons de prolongation dans un accord, la
2131 commande @code{\tweak} ne s'applique qu'à la première.
2134 @node set ou override
2135 @subsection @code{\set} ou @code{\override}
2136 @translationof set versus override
2138 @c TODO -- This section is probably unnecessary now.
2141 Si les propriétés peuvent être modifiées de deux façons, par les
2142 commandes @code{\set} et @code{\override}, c'est qu'il y a deux types de
2145 La propriété @code{fontSize} est une exception@tie{}: c'est un
2146 raccourci, qui équivaudrait à saisir @w{@code{\override @dots{}
2147 #'font-size}} pour tous les objets textuels. Dans la mesure où il
2148 s'agit d'une manipulation très courante, une propriété spéciale a été
2149 créée. Elle doit être modifiée avec la commande @code{\set}.
2154 @node Modification de listes associatives
2155 @subsection Modification de listes associatives
2156 @translationof Modifying alists
2158 Certaines propriétés configurables par l'utilisateur se présentent en
2159 interne comme étant des listes associatives -- les puristes diront des
2160 @emph{alists}. Une @emph{alist} est en fait constituée de plusieurs
2161 paires de @emph{clés} et @emph{valeurs}@tie{}; sa structure ressemble
2165 '((@var{clé1} . @var{valeur1})
2166 (@var{clé2} . @var{valeur2})
2167 (@var{clé3} . @var{valeur3})
2171 Dans le cas où cette liste représente les propriétés d'un objet
2172 graphique ou bien l'une des variables du bloc @code{\paper}, chaque clé
2173 peut être modifiée individuellement sans que cela n'affecte les autres.
2175 Par exemple, pour réduire l'espacement entre deux portées adjacentes
2176 d'un même système, on utilisera la propriété @code{staff-staff-spacing}
2177 qui est attachée à l'objet graphique @code{StaffGrouper}. Cette
2178 propriété est constituée d'une liste de quatre clés@tie{}:
2179 @code{basic-distance}, @code{minimum-distance}, @code{padding} et
2180 @code{stretchability}. Ses réglages par défaut tels que mentionnés à la
2181 rubrique @emph{Backend} de la référence des propriétés internes -- voir
2182 @rinternals{StaffGrouper} -- sont@tie{}:
2185 '((basic-distance . 9)
2186 (minimum-distance . 7)
2188 (stretchability . 5))
2191 Afin de rapprocher nos deux portées, il suffit de réduire la valeur
2192 (@code{9}) de la clé @code{basic-distance} au niveau de celle de la clé
2193 @code{minimum-distance} (@code{7}). La modification d'une seule clé
2194 individuellement peut se réaliser sous la forme d'une @emph{déclaration
2197 @lilypond[quote,verbatim]
2198 % default space between staves
2200 \new Staff { \clef treble c''1 }
2201 \new Staff { \clef bass c1 }
2204 % reduced space between staves
2205 \new PianoStaff \with {
2206 % this is the nested declaration
2207 \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
2209 \new Staff { \clef treble c''1 }
2210 \new Staff { \clef bass c1 }
2214 Le recours à une déclaration imbriquée touchera la clé indiquée
2215 (@code{basic-distance} dans l'exemple ci-dessus) sans pour autant
2216 modifier les autres clés de la propriété considérée.
2218 Considérons maintenant que nous souhaitions que les portées soient le
2219 plus proche possible les unes des autres, à la limite du chevauchement.
2220 Il suffirait de mettre les quatre clés à zéro. Nous pourrions saisir
2221 quatre déclarations, chacune d'elles touchant une clé. Nous pouvons
2222 tout aussi bien redéfinir la propriété en une seule clause, sous la
2223 forme d'une liste associative@tie{}:
2225 @lilypond[quote,verbatim]
2226 \new PianoStaff \with {
2227 \override StaffGrouper #'staff-staff-spacing =
2228 #'((basic-distance . 0)
2229 (minimum-distance . 0)
2231 (stretchability . 0))
2233 \new Staff { \clef treble c''1 }
2234 \new Staff { \clef bass c1 }
2238 N'oubliez pas que dès lors qu'une clé n'apparaît pas dans la liste, elle
2239 retourne à sa valeur @emph{sauf-mention-contraire}. Autrement dit, dans
2240 le cas de @code{staff-staff-spacing} qui nous occupe, toutes les clés
2241 non mentionnées seront ramenées à zéro -- à l'exception de
2242 @code{stretchability} qui prend par défaut la valeur de
2243 @code{basic-distance}. Les deux assertions suivantes sont donc
2247 \override StaffGrouper #'staff-staff-spacing =
2248 #'((basic-distance . 7))
2250 \override StaffGrouper #'staff-staff-spacing =
2251 #'((basic-distance . 7)
2252 (minimum-distance . 0)
2254 (stretchability . 7))
2257 L'une des conséquences, parfois involontaire, de ceci est la suppression
2258 de réglages standards effectués par un fichier d'initialisation chargé à
2259 chaque compilation de votre fichier source. Dans l'exemple précédent,
2260 les réglages standards de @code{padding} et @code{minimum-distance},
2261 tels que déterminés par @file{scm/define-grobs.scm}, se voient ramenés à
2262 leur valeur @emph{si-non-définie}@tie{}; autrement dit, les deux clés
2263 sont mises à zéro. La définition d'une propriété ou d'une variable sous
2264 forme de liste associative, quelle qu'en soit la taille, réinitialisera
2265 toujours les clés non mentionnées à leur valeur @emph{si-non-définie}.
2266 Si telle n'est pas votre intention, nous vous recommandons alors de
2267 régler la valeur des clés individuellement par des déclarations
2270 @warning{Les déclarations imbriquées ne sont pas fonctionnelles dans le
2271 cas des listes associatives des propriétés de contexte -- telles
2272 @code{beamExceptions}, @code{keySignature},
2273 @code{timeSignatureSettings}, etc. Ces propriétés ne sont modifiables
2274 qu'au travers d'une complète redéfinition de leur liste associative.}
2277 @node Propriétés et contextes utiles
2278 @section Propriétés et contextes utiles
2279 @translationof Useful concepts and properties
2284 * Direction et positionnement::
2285 * Distances et unités de mesure::
2286 * Propriétés des symboles de la portée::
2287 * Extenseurs et prolongateurs::
2288 * Visibilité des objets::
2290 * Rotation des objets::
2293 @node Modes de saisie
2294 @subsection Modes de saisie
2295 @translationof Input modes
2297 La manière dont sera interprétée la notation contenue dans un fichier
2298 source dépend du mode affecté à la saisie.
2300 @strong{Mode accords}
2302 Ce mode, activé par la commande @code{\chordmode}, permet d'interpréter
2303 les saisies comme étant des accords, qui seront imprimés sous forme
2304 de notes sur une portée -- voir @ref{Notation des accords}.
2306 Le mode accords s'active aussi par la commande @code{\chords}, qui
2307 créera un contexte @code{ChordNames}. Les saisies, interprétées comme
2308 étant des accords, seront alors rendues sous forme nominale dans ce
2309 contexte @code{ChordNames} -- voir @ref{Impression des noms d'accord}.
2311 @strong{Mode percussions}
2313 Ce mode, activé par la commande @code{\drummode}, permet d'interpréter
2314 les saisies comme étant de la notation pour percussions -- voir
2315 @ref{Notation de base pour percussions}.
2317 Le mode percussions s'active aussi par la commande @code{\drums}, qui
2318 créera un contexte @code{DrumStaff}. Les saisies, interprétées comme
2319 étant de la notation pour percussions, seront alors rendues sous
2320 forme symbolique sur une portée de percussions -- voir
2321 @ref{Notation de base pour percussions}.
2323 @strong{Mode figures}
2325 Ce mode, activé par la commande @code{\figuremode}, permet d'interpréter
2326 les saisies comme étant de la basse chiffrée (ou figurée) -- voir
2327 @ref{Saisie de la basse chiffrée}.
2329 Le mode figures s'active aussi par la commande @code{\figures}, qui
2330 créera un contexte @code{FiguredBass}. Les saisies interprétées comme
2331 étant de la basse chiffrée, seront alors rendues sous forme symbolique
2332 dans le contexte @code{FiguredBass} -- voir
2333 @ref{Introduction à la basse chiffrée}.
2335 @strong{Mode frets et tablatures}
2337 Il n'existe pas de mode spécifique pour saisir des symboles de fret ou
2340 Notes ou accords saisis en mode note puis affectés à un contexte
2341 @code{TabStaff} seront rendus sous forme de diagramme de tablature --
2342 voir @ref{Tablatures par défaut}.
2344 Deux options différentes permettent d'obtenir des diagrammes de fret en
2345 surplomb d'une portée@tie{}: directement à l'aide d'un contexte
2346 @code{FretBoards} -- voir @ref{Tablatures automatiques} -- ou en
2347 attachant aux notes des @emph{markups} créés par la commande
2348 @code{\fret-diagram} -- voir @ref{Tablatures sous forme d'étiquette}.
2350 @strong{Mode paroles}
2352 Ce mode, activé par la commande @code{\lyricmode}, permet d'interpréter
2353 les saisies comme étant des syllabes, ayant éventuellement une durée, et
2354 des indications habituelles aux paroles -- voir @ref{Musique vocale}.
2356 Le mode paroles s'active aussi par la commande @code{\addlyrics}, qui
2357 créera un contexte @code{Lyrics} et ajoutera implicitement une commande
2358 @code{\lyricsto} afin d'associer les paroles qui suivent à la musique
2359 précédemment saisie.
2361 @strong{Mode @emph{markup}}
2363 Ce mode, activé par la commande @code{\markup}, permet d'interpréter les
2364 saisies comme étant des @emph{markups} (annotations ou étiquettes) --
2365 voir @rusernamed{Text markup commands,Commandes pour le mode markup}.
2368 @c silly work-around for texinfo broken-ness
2369 @c (@strong{Note...} causes a spurious cross-reference in Info)
2372 Le mode notes est le mode par défaut dans LilyPond. Il peut aussi
2373 s'activer par la commande @code{\notemode}. Les saisies seront
2374 interprétées comme étant des hauteurs, durées, @emph{markups}, etc. qui
2375 seront rendues sous forme de notation musicale sur une portée.
2377 Nul n'est besoin de spécifier le mode notes de manière explicite, hormis
2378 dans certaines situations particulières, notamment lorsque vous êtes en
2379 mode paroles, accords, ou tout autre mode, et que vous deviez insérer
2380 un élément qui ne serait disponible que grâce à la syntaxe du mode
2383 Il en va ainsi lorsque, par exemple, vous voulez ajouter une indication
2384 de nuance au numéro de couplet d'un chant choral@tie{}:
2386 @lilypond[verbatim,relative=2,quote]
2389 \notemode{\set stanza = \markup{ \dynamic f 1. } }
2393 \notemode{\set stanza = \markup{ \dynamic p 2. } }
2399 @node Direction et positionnement
2400 @subsection Direction et positionnement
2401 @translationof Direction and placement
2403 En matière de typographie musicale, l'orientation et le positionnement
2404 de nombreux éléments est affaire de goût. Par exemple, les hampes
2405 peuvent être ascendantes ou descendantes, les paroles, nuances ou autres
2406 indications d'expression peuvent apparaître au-dessus ou en dessous de
2407 la portée, les indications textuelles s'alignent tantôt par la gauche,
2408 tantôt par la droite, ou être centrées. La plupart de ces choix peuvent
2409 être laissés à l'appréciation de LilyPond. Il peut être préférable,
2410 dans certains cas, d'imposer l'orientation ou le positionnement des
2413 @strong{Indicateurs de position d'une articulation}
2415 Certains positionnements sont opérés par défaut -- toujours au-dessus ou
2416 toujours en dessous (nuances ou points d'orgue) -- alors que d'autres
2417 alterneront selon l'orientation des hampes (liaisons ou accents).
2419 @c TODO Add table showing these
2421 Le positionnement par défaut peut être outrepassé à l'aide d'un
2422 @emph{indicateur de positionnement}, qui vient s'insérer juste avant
2423 l'articulation. LilyPond met à votre disposition trois indicateurs de
2424 positionnement@tie{}: @code{^} (pour @qq{au-dessus}), @code{_} (pour
2425 @qq{au-dessous}), et @code{-} (pour @qq{appliquer le positionnement par
2426 défaut}). L'indicateur de positionnement n'est pas obligatoire@tie{};
2427 LilyPond considère alors qu'il y a un @code{-}. Un indicateur de
2428 positionnement est cependant @strong{obligatoire} dans les cas
2432 @item une commande @code{\tweak},
2433 @item une commande @code{\markup},
2434 @item une commande @code{\tag},
2435 @item les indications de corde, par exemple @code{-"corde"},
2436 @item les indications de doigté, par exemple @w{@code{-1}},
2437 @item les raccourcis d'articulation, par exemple @w{@code{-.}},
2438 @w{@code{->}} ou @w{@code{--}}.
2441 Les indicateurs de positionnement n'affectent que la note qui suit@tie{}:
2443 @lilypond[verbatim,quote,relative=2]
2450 @strong{La propriété @code{direction}}
2452 Le positionnement ou l'orientation de nombreux objets de rendu est géré
2453 par la propriété @code{direction}.
2455 La propriété @code{direction} peut prendre la valeur @code{1}, qui
2456 signifie @qq{ascendant} ou @qq{au-dessus}, ou @w{@code{-1}}, qui
2457 signifie @qq{descendant} ou @qq{au-dessous}. Les symboliques @code{UP}
2458 et @code{DOWN} peuvent remplacer respectivement @code{1} et
2459 @w{@code{-1}}. Les valeurs @code{0} ou @code{CENTER} permettent de
2460 réaffecter à la propriété @code{direction} son comportement par défaut.
2461 Certaines commandes prédéfinies permettent par ailleurs de spécifier un
2462 comportement en matière d'orientation ou positionnement@tie{}; elles
2466 @code{\xxxUp}, @code{\xxxDown}, @code{\xxxNeutral}
2469 auquel cas @code{\xxxNeutral} signifie @qq{retour au comportement par
2470 défaut} -- voir @rlearning{Objets inclus dans la portée}.
2472 Dans quelques cas particuliers, comme l'indication d'un @emph{arpeggio},
2473 la valeur affectée à la propriété @code{direction} déterminera si
2474 l'objet doit se placer à gauche ou à droite de son parent. Un
2475 @w{@code{-1}} ou @code{LEFT} signifiera alors @qq{sur la gauche}, et un
2476 @code{1} ou @code{RIGHT} @qq{sur la droite}. Comme de bien entendu, un
2477 @code{0} ou @code{CENTER} signifiera @qq{appliquer le positionnement par
2481 These all have side-axis set to #X
2482 AmbitusAccidental - direction has no effect
2484 StanzaNumber - not tried
2485 TrillPitchAccidental - not tried
2486 TrillPitchGroup - not tried
2489 Notez que ces commandes resteront effectives jusqu'à ce qu'elles soient
2492 @lilypond[verbatim,quote,relative=2]
2502 @node Distances et unités de mesure
2503 @subsection Distances et unités de mesure
2504 @translationof Distances and measurements
2506 @cindex distance absolue
2507 @cindex distance relative
2508 @cindex distance extensible
2515 LilyPond considère deux types de distances@tie{}: les distances absolues
2516 et les distances relatives ou extensibles.
2518 Les distances absolues permettent de spécifier les marges, indentations
2519 et autres détails de mise en page@tie{}; elles s'expriment par défaut en
2520 millimètres. Vous pouvez utiliser d'autres systèmes de mesure, dès lors
2521 que la quantité est suivie de la mesure@tie{}: @code{\mm}, @code{\cm},
2522 @code{\in}@tie{}(pouces) ou @code{\pt}@tie{}(points, 1/72,27 pouce).
2523 Les mesures de mise en page peuvent aussi s'exprimer en unité extensible
2524 de portée @code{\staff-space} (voir ci-après). Pour plus d'information
2525 concernant la mise en page, voir la rubrique
2526 @ref{Mise en forme de la page}.
2528 Les distances relatives ou extensibles s'expriment toujours en
2529 @qq{espace de portée} ou, plus rarement, en @qq{demi espace de portée}.
2530 L'espace de portée correspond à la distance qui sépare deux lignes
2531 adjacentes d'une portée. Sa valeur par défaut est déterminée
2532 globalement par la taille de portée. Elle peut aussi s'ajuster
2533 ponctuellement en jouant sur la propriété @code{staff-space} de l'objet
2534 @code{StaffSymbol}. Les distances relatives s'ajustent automatiquement
2535 dès qu'une modification de la taille globale de portée ou bien de la
2536 propriété @code{staff-space} du @code{StaffSymbol} intervient.
2537 Cependant, les tailles de fonte ne s'ajusteront automatiquement que si
2538 la modification touche la taille globale des portées. La taille globale
2539 de portée permet ainsi de gérer l'aspect général de la partition --
2540 voir @ref{Définition de la taille de portée}.
2544 Lorsque seulement une portion de partition doit apparaître dans une
2545 taille, comme par exemple une portée d'ossia ou une note de bas de page,
2546 influer sur la taille globale de portée affecterait l'intégralité de la
2547 partition. Il convient donc dans ce cas de modifier à la fois la
2548 propriété @code{staff-space} du @code{StaffSymbol} et la taille des
2549 fontes. La fonction Scheme @code{magstep} est tout spécialement chargée
2550 d'adapter une modification du @code{staff-space} aux fontes. Pour de
2551 plus amples informations, reportez-vous à la rubrique
2552 @rlearning{Longueur et épaisseur des objets}.
2556 Manuel d'initiation :
2557 @rlearning{Longueur et épaisseur des objets}.
2559 Manuel de notation :
2560 @ref{Définition de la taille de portée},
2561 @ref{Mise en forme de la page}.
2564 @node Propriétés des symboles de la portée
2565 @subsection Propriétés des symboles de la portée
2566 @translationof Staff symbol properties
2568 @cindex ajustement des symboles de portée
2569 @cindex dessin des symboles de portée
2570 @cindex symboles de portée, dessin
2572 @c TODO Extend or remove this section. See also NR 1.6.2 Staff symbol
2573 @c Need to think of uses for these properties. Eg 'line-positions
2574 @c is used in a snippet to thicken centre line.
2575 @c If retained, add @ref to here in 1.6.2 -td
2577 L'emplacement vertical et le nombre de lignes d'une portée se
2578 définissent conjointement. Comme l'illustre l'exemple suivant, le
2579 positionnement des notes n'est en rien influencé par le positionnement
2580 des lignes de la portée.
2582 @warning{La propriété @code{'line-positions} écrase la propriété
2583 @code{'line-count}. Le nombre de lignes d'une portée est implicitement
2584 défini par le nombre d'éléments dans la liste des valeurs de
2585 @code{'line-positions}.}
2587 @lilypond[verbatim,quote,relative=1]
2589 \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
2594 La largeur d'une portée, exprimée en espace de portée, peut être figée.
2595 L'espacement des objets inclus dans cette portée ne sera en rien affecté
2598 @lilypond[verbatim,quote,relative=1]
2600 \override StaffSymbol #'width = #23
2606 @node Extenseurs et prolongateurs
2607 @subsection Extenseurs et prolongateurs
2608 @translationof Spanners
2610 De nombreux objets de notation musicale s'étendent sur plusieurs notes,
2611 voire même sur plusieurs mesures. Il en va ainsi des liaisons,
2612 ligatures, crochets de nolet, crochets de reprise, crescendos, trilles
2613 ou glissandos. Ces objets, que l'on englobe sous l'appellation
2614 @qq{d'extenseur}, sont pourvus de propriétés spécifiques destinées à
2615 contrôler leur apparence et leur comportement. Un certain nombre de ces
2616 propriétés sont communes à tous les extenseurs, d'autres n'affectent que
2617 certains d'entre eux.
2619 Tout extenseur dispose de la @code{spanner-interface}. Quelques uns,
2620 tout particulièrement ceux chargés de dessiner une ligne droite entre
2621 deux objets, disposent aussi de la @code{line-spanner-interface}.
2624 @unnumberedsubsubsec Utilisation de @code{spanner-interface}
2625 @translationof Using the @code{spanner-interface}
2627 Cette interface fournit deux propriétés qui s'appliquent à certains
2630 @strong{@i{La propriété @code{minimum-length}}}
2632 La longueur minimale d'un extenseur est déterminée par la propriété
2633 @code{minimum-length}. Au plus sa valeur est élevée, au plus
2634 l'espacement des notes qui le bornent sera grand. Forcer sa valeur
2635 restera néanmoins sans effet pour un certain nombre d'extenseurs dont la
2636 longueur dépend d'autres considérations. Voici quelques exemples de
2637 mise en œuvre de cette propriété.
2640 Cette propriété est pleinement fonctionnelle pour @tie{}:
2641 Tie (liaison de prolongation)
2642 MultiMeasureRest (silence multimesures)
2644 Slur (liaison d'articulation)
2645 PhrasingSlur (liaison de phrasé)
2647 Cette propriété est fonctionnelle en présence d'un @emph{callback}@tie{}:
2651 Cette propriété est sans effet sur@tie{}:
2660 @lilypond[verbatim,quote,relative=2]
2663 % increase the length of the tie
2664 -\tweak #'minimum-length #5
2668 @lilypond[verbatim,quote,relative=2]
2670 \compressFullBarRests
2672 % increase the length of the rest bar
2673 \once \override MultiMeasureRest #'minimum-length = #20
2678 @lilypond[verbatim,quote,relative=2]
2680 % increase the length of the hairpin
2681 \override Hairpin #'minimum-length = #20
2685 Cette propriété permet aussi de jouer sur l'envergure d'une liaison
2686 d'articulation ou de phrasé.
2688 @lilypond[verbatim,quote,relative=2]
2691 -\tweak #'minimum-length #5
2696 -\tweak #'minimum-length #5
2700 Certains objets requièrent un appel explicite à la procédure
2701 @code{set-spacing-rods} pour que la propriété @code{minimum-length}
2702 produise ses effets. La propriété @code{set-spacing-rods} doit alors
2703 prendre pour valeur @code{ly:spanner::set-spacing-rods}. Par exemple, la
2704 longueur minimale d'un glissando ne pourra être forcée tant que la
2705 propriété @code{springs-and-rods} n'est pas définie@tie{}:
2707 @lilypond[verbatim,quote,relative=1]
2711 % not effective alone
2712 \once \override Glissando #'minimum-length = #20
2715 % effective only when both overrides are present
2716 \once \override Glissando #'minimum-length = #20
2717 \once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
2721 Il en va de même pour l'objet @code{Beam} (ligature)@tie{}:
2723 @lilypond[verbatim,quote,relative=1]
2724 % not effective alone
2725 \once \override Beam #'minimum-length = #20
2728 % effective only when both overrides are present
2729 \once \override Beam #'minimum-length = #20
2730 \once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
2734 @strong{@i{La propriété @code{to-barline}}}
2736 La seconde propriété fournie par la @code{spanner-interface} est
2737 @code{to-barline}. Elle est activée par défaut, raison pour laquelle
2738 les soufflets et autres extenseurs finissant sur la première note d'une
2739 mesure s'arrêtent visuellement au niveau de la barre de mesure qui la
2740 précède. Le fait de désactiver la propriété @code{to-barline} aura pour
2741 effet de prolonger l'extenseur au delà de la barre de mesure et jusqu'à
2742 la note qui le borne@tie{}:
2744 @lilypond[verbatim,quote,relative=2]
2745 a \< a a a a \! a a a \break
2746 \override Hairpin #'to-barline = ##f
2747 a \< a a a a \! a a a
2750 Cette propriété n'est pas opérationnelle pour tous les extenseurs. Il
2751 serait en effet quelque peu surprenant de l'activer (lui affecter
2752 @code{#t}) dans le cas d'une liaison d'articulation ou de phrasé@tie{}!
2755 @unnumberedsubsubsec Utilisation de @code{line-spanner-interface}
2756 @translationof Using the @code{line-spanner-interface}
2758 Un certain nombre d'objets disposent de la propriété
2759 @code{line-spanner-interface}, entre autres@tie{}:
2762 @item @code{DynamicTextSpanner}
2763 @item @code{Glissando}
2764 @item @code{TextSpanner}
2765 @item @code{TrillSpanner}
2766 @item @code{VoiceFollower}
2769 La routine en charge de dessiner le stencil de ces extenseurs est
2770 @code{ly:line-interface::print}. Elle va déterminer les deux points
2771 extrêmes et dessiner entre eux une ligne du style requis. Bien que la
2772 localisation des deux bornes de l'extenseur soit calculée à la volée,
2773 vous pouvez cependant forcer leur ordonnée (coordonnée-Y). Les
2774 propriétés que vous devrez ajuster résident au deuxième niveau dans la
2775 hiérarchie, mais la syntaxe de la commande @code{\override} nécessaire
2776 demeure relativement simple@tie{}:
2778 @lilypond[relative=2,quote,verbatim]
2780 \once \override Glissando #'(bound-details left Y) = #3
2781 \once \override Glissando #'(bound-details right Y) = #-2
2785 La propriété @code{Y} est valorisée en unités de @code{staff-space}, la
2786 ligne médiane de la portée correspondant au point zéro. Pour le
2787 glissando qui nous occupe, il s'agit du @code{Y} à l'aplomb
2788 (coordonnée-X) du centre de la tête de chacune des deux notes, si tant
2789 est que la ligne doive s'étendre entre ces deux points.
2791 Si le @code{Y} n'est pas défini, sa valeur sera calculée en fonction de
2792 la position verticale du point d'attachement de l'extenseur.
2794 Dans le cas où l'extenseur est interrompu par un saut de ligne, les
2795 terminaisons à cet endroit se gèrent grâce aux sous-clés
2796 @code{left-broken} et @code{right-broken} de @code{bound-details}, comme
2799 @lilypond[relative=2,ragged-right,verbatim,quote]
2800 \override Glissando #'breakable = ##t
2801 \override Glissando #'(bound-details right-broken Y) = #-3
2802 c1 \glissando \break
2806 Les sous-propriétés @code{left} et @code{right} du @code{bound-details}
2807 disposent d'autres clés modifiables de la même manière que
2812 Détermine l'ordonnée (coordonnée-Y) de la terminaison, avec un
2813 décalage en @code{staff-space} par rapport à la ligne médiane de la
2814 portée. Il s'agit par défaut du centre de l'objet d'attachement, qui
2815 est le centre vertical de la tête de note pour un glissando.
2817 En ce qui concerne les extenseurs horizontaux, tels ceux comportant du
2818 texte ou les trilles, il est fixé à@tie{}@code{0}.
2821 Détermine le début et la fin de la ligne sur l'axe des abscisses,
2822 relativement à l'objet de rattachement. Une valeur de @w{@code{-1}} (ou
2823 @code{LEFT}) aura pour effet de commencer ou terminer la ligne sur la
2824 gauche de la tête de note de rattachement.
2827 Il s'agit de l'abscisse (coordonnée-X) absolue de la terminaison. Elle
2828 se calcule à la volée, et son forçage n'apporte rien de plus.
2831 Les extenseurs linéaires peuvent commencer ou finir par un symbole,
2832 enregistré dans cette sous-propriété. Elle est conçue pour un usage
2833 interne, aussi nous vous conseillons de plutôt recourir à @code{text}.
2836 Il s'agit d'un @emph{markup} qui se poursuivra par l'extenseur. C'est la
2837 sous-propriété utilisée pour ajouter @i{cresc.}, @i{tr} ou autre texte à
2838 un extenseur horizontal.
2840 @lilypond[quote,ragged-right,relative=2,verbatim]
2841 \override TextSpanner #'(bound-details left text)
2842 = \markup { \small \bold Slower }
2843 c2\startTextSpan b c a\stopTextSpan
2846 @item stencil-align-dir-y
2847 @item stencil-offset
2848 Lorsqu'aucune de ces deux sous-propriétés n'est définie, le stencil est
2849 simplement positionné à l'extrémité, centré sur la ligne telle que
2850 définie par les sous-propriétés @code{X} et @code{Y}. L'utilisation de
2851 @code{stencil-align-dir-y} ou @code{stencil-offset} permettra d'aligner
2852 le symbole verticalement par rapport au coin de la ligne@tie{}:
2854 @lilypond[relative=1,quote,verbatim]
2855 \override TextSpanner
2856 #'(bound-details left stencil-align-dir-y) = #-2
2857 \override TextSpanner
2858 #'(bound-details right stencil-align-dir-y) = #UP
2860 \override TextSpanner
2861 #'(bound-details left text) = #"ggg"
2862 \override TextSpanner
2863 #'(bound-details right text) = #"hhh"
2864 c4^\startTextSpan c c c \stopTextSpan
2867 Vous n'aurez pas manqué de constater qu'une valeur négative place le
2868 texte @emph{en haut} -- contrairement à ce que l'on serait en droit
2869 d'attendre. Ceci est dû au fait que la valeur @w{@code{-1}} ou
2870 @code{DOWN} signifie @qq{aligner le bord @emph{inférieur} du texte sur
2871 la ligne d'extension}. Une valeur égale à@tie{}@code{1} ou @code{UP}
2872 alignera le sommet du texte sur cette ligne d'extension.
2875 L'activation de cette sous-propriété (lui affecter @code{#t}) ajoutera
2876 à l'extenseur une terminaison en flèche.
2879 Cette sous-propriété contrôle l'espace qui doit séparer l'extrémité de
2880 la ligne et la fin réelle de l'extenseur. Sans ce @qq{décalage}, le
2881 trait indiquant un glissando commencerait et finirait au beau milieu de
2882 chacune des têtes de note.
2886 La fonction @code{\endSpanners} permet d'interrompre l'extenseur qui
2887 vient dès la note suivante. Autrement dit, il ne s'étendra que sur une
2888 seule note, ou jusqu'à la prochaine barre de mesure si @code{to-barline}
2889 a été activé et que survient une barre avant la note suivante.
2891 @lilypond[verbatim,quote,ragged-right,relative=2]
2893 c2 \startTextSpan c2 c2
2898 L'utilisation de @code{\endSpanners} permet de s'affranchir d'insérer un
2899 @code{\stopTextSpan} pour clôturer un @code{\startTextSpan} ou un
2900 @code{\!} pour terminer un soufflet.
2904 Référence des propriétés internes :
2905 @rinternals{Glissando},
2906 @rinternals{line-spanner-interface},
2907 @rinternals{TextSpanner},
2908 @rinternals{TrillSpanner},
2909 @rinternals{VoiceFollower}.
2912 @node Visibilité des objets
2913 @subsection Visibilité des objets
2914 @translationof Visibility of objects
2916 @cindex objets, visibilité
2917 @cindex grobs, visibilité
2918 @cindex visibilité d'objets
2920 La visibilité des objets de rendu se contrôle de quatre façons
2921 différentes@tie{}: vous pouvez supprimer leur stencil, les rendre
2922 transparents, les coloriser en blanc ou bien encore forcer leur
2923 propriété @code{break-visibility}. Les trois premières options peuvent
2924 s'appliquer à tous les objets, la dernière étant réservée aux objets
2925 @emph{changeables}. Le Manuel d'initiation contient une introduction à
2926 ces quatre techniques, à la rubrique
2927 @rlearning{Visibilité et couleur des objets}.
2929 LilyPond met en œuvre quelques techniques particulières adaptées à
2930 certains objets@tie{}; elles sont couvertes par une rubrique spécifique.
2933 * Suppression des stencils::
2934 * Transparence des objets::
2935 * Blanchiment des objets::
2936 * Utilisation de break-visibility::
2937 * Considérations spécifiques::
2940 @node Suppression des stencils
2941 @unnumberedsubsubsec Suppression des stencils
2942 @translationof Removing the stencil
2944 @cindex stencil, suppression
2946 Tout objet de rendu se voit attribuer une propriété @code{stencil}.
2947 Elle est par défaut définie par la fonction chargée de dessiner cet
2948 objet. Lorsque cette propriété est désactivée de force -- en lui
2949 attribuant la valeur @code{#f} -- aucune fonction ne sera appelée@tie{};
2950 l'objet ne sera donc pas dessiné. Le retour au comportement par défaut
2951 s'opère à l'aide d'un @code{\revert}.
2953 @lilypond[quote,verbatim,relative=1]
2955 \override Score.BarLine #'stencil = ##f
2957 \revert Score.BarLine #'stencil
2962 @node Transparence des objets
2963 @unnumberedsubsubsec Transparence des objets
2964 @translationof Making objects transparent
2966 @cindex transparent, objet
2968 Tout objet de rendu dispose d'une propriété de transparence, qui est par
2969 défaut définie à @code{#f}. Le fait de l'activer rendra l'objet
2970 transparent tout en préservant la place qu'il occupe.
2972 @lilypond[quote,verbatim,relative=2]
2974 \once \override NoteHead #'transparent = ##t
2979 @node Blanchiment des objets
2980 @unnumberedsubsubsec Blanchiment des objets
2981 @translationof Painting objects white
2983 @cindex objets, couleur
2984 @cindex couleur d'objet
2987 @cindex impression, ordre
2988 @cindex surimpression d'objets
2989 @cindex objets, surimpression
2990 @cindex grobs, superposition
2992 Tout objet de rendu dispose d'une propriété couleur, par défaut définie
2993 à @code{black} (noir). Le fait de la forcer à @code{white} (blanc)
2994 rendra l'objet indistinct du fond blanc. Néanmoins, lorsque cet objet
2995 en recouvre d'autres, la couleur de leurs points de jonction dépendra de
2996 l'ordre dans lequel ils sont dessinés, ce qui peut laisser apparaître
2997 un fantôme de l'objet blanchi comme ci-dessous@tie{}:
2999 @lilypond[quote,verbatim,relative=2]
3000 \override Staff.Clef #'color = #white
3004 Cet inconvénient peut être évité en modifiant l'ordre dans lequel les
3005 objets sont dessinés. Chaque objet de rendu dispose d'une propriété
3006 @code{layer} (calque ou niveau) à laquelle est affecté un nombre entier.
3007 Les objets ayant la plus faible valeur sont dessinés en premier, puis
3008 les autres, de telle sorte qu'un objet ayant une valeur plus élevée les
3009 recouvrira. La plupart des objet ont un @code{layer} valorisé
3010 à@tie{}@code{1} -- quelques uns, dont @code{StaffSymbol} et
3011 @code{BarLine}, ont une valeur à@tie{}@code{0}. L'ordre d'impression
3012 d'objets ayant une même valeur de @code{layer} est indéterminé.
3014 La clef de l'exemple précédent a par défaut un @code{layer}
3015 à@tie{}@code{1}@tie{}; elle est donc dessinée après les lignes de la
3016 portée -- @code{layer} valorisé par défaut à@tie{}@code{0} -- et donc
3017 les recouvre. Pour changer cet état de fait, l'objet @code{Clef} doit
3018 avoir un @code{layer} de valeur inférieure, disons @w{@code{-1}}, pour
3019 pouvoir être dessiné avant.
3021 @lilypond[quote,verbatim,relative=2]
3022 \override Staff.Clef #'color = #white
3023 \override Staff.Clef #'layer = #-1
3028 @node Utilisation de break-visibility
3029 @unnumberedsubsubsec Utilisation de break-visibility
3030 @translationof Using break-visibility
3032 @cindex break-visibility
3034 La plupart des objets de rendu ne sont imprimés qu'une seule fois@tie{};
3035 certains cependant, tels les barres de mesure, clefs, métriques ou
3036 armures, apparaîtront deux fois lors d'un saut de ligne -- une première
3037 fois en fin de ligne, puis à nouveau au début de la ligne suivante. Ces
3038 objets, que l'on peut traiter de @emph{changeables} (@emph{breakable} en
3039 anglais) disposent de la propriété @code{break-visibility} spécialement
3040 chargée de contrôler leur visibilité aux trois endroits où il sont
3041 susceptibles d'apparaître@tie{}: en début de ligne, en cours de ligne ou
3042 en fin de ligne -- si tant est qu'un changement s'y produise.
3044 Par exemple, la métrique est imprimée par défaut au début de la première
3045 ligne, et nulle part ailleurs. En cas de modification, une nouvelle
3046 métrique sera imprimée à l'endroit du changement. Dans le cas où ce
3047 changement intervient en fin de ligne, la nouvelle métrique s'imprime au
3048 début de la ligne suivante, et une métrique @qq{de précaution} viendra
3049 se placer au bout de la ligne précédente.
3051 Ce comportement est géré par la propriété @code{break-visibility}, dont
3052 vous trouverez une explication à la rubrique
3053 @rlearning{Visibilité et couleur des objets}. Cette propriété est
3054 constituée d'un vecteur de trois booléens qui, dans l'ordre, déterminent
3055 si l'objet sera imprimé à la fin, en cours, et au début d'une ligne --
3056 on pourrait aussi dire avant un saut de ligne, là où il n'y a pas de
3057 saut de ligne, et après un saut de ligne.
3059 Les huit combinaisons possibles sont aussi disponibles sous la forme de
3060 fonctions prédéfinies, regroupées dans le fichier
3061 @file{scm/output-lib.scm}. Le tableau suivant vous les présente@tie{};
3062 les trois dernières colonnes indiquent l'endroit où l'objet sera visible.
3064 @multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t. )}} {apres} {apres} {apres}
3065 @headitem Forme @tab Forme @tab Avant @tab Hors @tab Après
3066 @headitem fonctionnelle @tab vectorielle @tab saut @tab saut @tab saut
3068 @item @code{all-visible} @tab @code{'#(#t #t #t)} @tab oui @tab oui @tab oui
3069 @item @code{begin-of-line-visible} @tab @code{'#(#f #f #t)} @tab non @tab non @tab oui
3070 @item @code{center-visible} @tab @code{'#(#f #t #f)} @tab non @tab oui @tab non
3071 @item @code{end-of-line-visible} @tab @code{'#(#t #f #f)} @tab oui @tab non @tab non
3072 @item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)} @tab oui @tab oui @tab non
3073 @item @code{center-invisible} @tab @code{'#(#t #f #t)} @tab oui @tab non @tab oui
3074 @item @code{end-of-line-invisible} @tab @code{'#(#f #t #t)} @tab non @tab oui @tab oui
3075 @item @code{all-invisible} @tab @code{'#(#f #f #f)} @tab non @tab non @tab non
3078 Les réglages par défaut de la propriété @code{break-visibility}
3079 diffèrent selon l'objet de rendu. Le tableau suivant présente, pour la
3080 plupart des objets comportant la propriété @code{break-visibility},
3081 ces réglages par défaut.
3083 @multitable @columnfractions .3 .3 .4
3085 @headitem Objet de rendu @tab Contexte habituel @tab Réglage par défaut
3087 @c omit Ambitus as it appears not to be affected by break-visibility -td
3088 @c @item @code{Ambitus} @tab as specified @tab @code{begin-of-line-visible}
3089 @item @code{BarLine} @tab @code{Score} @tab calculé
3090 @item @code{BarNumber} @tab @code{Score} @tab @code{begin-of-line-visible}
3091 @c omit the following item until it can be explained -td
3092 @c @item @code{BreakAlignGroup} @tab @code{Score} @tab calculé
3093 @item @code{BreathingSign} @tab @code{Voice} @tab @code{begin-of-line-invisible}
3094 @item @code{Clef} @tab @code{Staff} @tab @code{begin-of-line-visible}
3095 @item @code{Custos} @tab @code{Staff} @tab @code{end-of-line-visible}
3096 @item @code{DoublePercentRepeat} @tab @code{Voice} @tab @code{begin-of-line-invisible}
3097 @c omit KeyCancellation until it can be explained -td
3098 @c @item @code{KeyCancellation} @tab ?? @tab @code{begin-of-line-invisible}
3099 @item @code{KeySignature} @tab @code{Staff} @tab @code{begin-of-line-visible}
3100 @c omit LeftEdge until it can be explained -td
3101 @c @item @code{LeftEdge} @tab @code{Score} @tab @code{center-invisible}
3102 @item @code{OctavateEight} @tab @code{Staff} @tab @code{begin-of-line-visible}
3103 @item @code{RehearsalMark} @tab @code{Score} @tab @code{end-of-line-invisible}
3104 @item @code{TimeSignature} @tab @code{Staff} @tab @code{all-visible}
3108 Voici un exemple d'utilisation de la forme vectorielle pour contrôler la
3109 visibilité des barres de mesure@tie{}:
3111 @lilypond[quote,verbatim,relative=1,ragged-right]
3114 % Remove bar line at the end of the current line
3115 \once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
3121 Lors d'un forçage de @code{break-visibility} sous une forme vectorielle,
3122 les trois éléments doivent impérativement être mentionnés. Ces formes
3123 vectorielles ne sont d'ailleurs pas prises en charge par tous les objets
3124 de rendu, et certaines combinaisons peuvent entraîner des erreurs@tie{};
3125 nous citerons entre autres@tie{}:
3128 @item Une barre de mesure ne peut s'imprimer en début de ligne.
3129 @item Un numéro de mesure ne peut apparaître au début de la première
3130 ligne, à moins d'être différent de@tie{}1.
3131 @item Clef -- voir ci-après.
3132 @item Les répétitions en pourcentage sont soit toutes imprimées, soit
3133 aucune. Vous devrez utiliser @code{begin-of-line-invisible} pour les
3134 voir et @code{all-invisible} pour les masquer.
3135 @item Armure -- voir ci-après.
3136 @item Indication d'octaviation -- voir ci-après.
3140 @node Considérations spécifiques
3141 @unnumberedsubsubsec Considérations spécifiques
3142 @translationof Special considerations
3144 @strong{@emph{Visibilité après changement explicite}}
3146 @cindex armure, visibilité après changement explicite
3147 @cindex explicitKeySignatureVisibility
3148 @cindex clef, visibilité après changement explicite
3149 @cindex explicitClefVisibility
3151 La propriété @code{break-visibility} contrôle la visibilité des armures
3152 ou changements de clef en début de ligne uniquement, donc après un saut.
3153 Elle ne produit aucun effet sur la visibilité d'une armure ou d'une clef
3154 après un changement explicite de tonalité ou de clef, ni en cours, ni en
3155 fin de ligne. Dans l'exemple suivant, l'armure est présente même après
3156 le passage en si bémol majeur malgré l'activation de
3157 @code{all-invisible} (@emph{tous invisibles}).
3159 @lilypond[quote,verbatim,relative=1,ragged-right]
3162 % Try to remove all key signatures
3163 \override Staff.KeySignature #'break-visibility = #all-invisible
3171 La visibilité lors de ces changements explicites d'armure ou de clef est
3172 géré respectivement par les propriétés
3173 @code{explicitKeySignatureVisibility} et @code{explicitClefVisibility}.
3174 Leur fonctionnement est en tout point identique à celui de la propriété
3175 @code{break-visibility} -- forme vectorielle à trois éléments ou forme
3176 fonctionnelle comme indiqué ci-avant. Toutes deux sont attachées au
3177 contexte @code{Staff} (la portée) et non directement aux objets de
3178 rendu@tie{}; elles sont de ce fait introduites par une instruction
3179 @code{\set}. Leur valeur par défaut est de toujours imprimer les objets
3180 -- réglage sur @code{all-visible}. Ces deux propriétés gèrent
3181 uniquement la visibilité des armures et clefs lors d'un changement
3182 explicite, et en dehors d'un début de ligne@tie{}; il faudra en pareil
3183 cas forcer la @code{break-visibility} de ces objets pour les supprimer.
3185 @lilypond[quote,verbatim,relative=1,ragged-right]
3188 \set Staff.explicitKeySignatureVisibility = #all-invisible
3189 \override Staff.KeySignature #'break-visibility = #all-invisible
3196 @strong{@emph{Visibilité des altérations de précaution}}
3198 L'impression d'altérations de précaution au moment d'un changement
3199 explicite de tonalité sera annulée dès lors que vous aurez désactivé la
3200 propriété @code{printKeyCancellation} du contexte @code{Staff}@tie{}:
3202 @lilypond[quote,verbatim,relative=1,ragged-right]
3205 \set Staff.explicitKeySignatureVisibility = #all-invisible
3206 \set Staff.printKeyCancellation = ##f
3207 \override Staff.KeySignature #'break-visibility = #all-invisible
3214 Avec de tels réglages particuliers, seules les altérations accidentelles
3215 permettront d'indiquer le changement de tonalité.
3217 @c TODO Add visibility of cautionary accidentals before notes
3219 @strong{@emph{Barres de mesure automatiques}}
3221 @cindex automaticBars
3222 @cindex barres de mesure, suppression
3224 La désactivation de la propriété @code{automaticBars}, qui réside dans
3225 le contexte @code{Score}, permet de s'affranchir d'imprimer
3226 automatiquement les barres de mesure@tie{}; seules seront imprimées les
3227 barres explicitées à l'aide de la commande @code{\bar}. Néanmoins, et
3228 contrairement à ce qui se passe avec la commande @code{\cadenzaOn}, le
3229 compteur de numéro de mesure continuera de s'incrémenter. Les barres
3230 s'imprimeront à nouveau, au niveau où en est le compteur, dès que la
3231 propriété @code{automaticBars} sera réactivée. Gardez à l'esprit que
3232 les sauts de ligne, lorsque cette propriété est désactivée, ne peuvent
3233 intervenir qu'à l'occasion d'un @code{\bar} explicite.
3237 @strong{@emph{Clefs octaviées}}
3239 @cindex octaviation, visibilité de la clef
3240 @cindex visibilité d'un clef octaviée
3241 @cindex clef, visibilité de l'octaviation
3243 L'indication d'octaviation d'une clef est produite par l'objet de rendu
3244 @code{OctavateEight}. Sa visibilité étant gérée par héritage direct de
3245 l'objet @code{Clef}, nul n'est besoin de forcer un quelconque
3246 @code{break-visibility} au niveau des objets @code{OctavateEight} pour
3247 éliminer une indication d'octaviation lorsque la clef est invisible.
3249 Lors d'un changement explicite de clef, la propriété
3250 @code{explicitClefVisibility} gère à la fois le symbole de la clef et
3251 l'indication d'octaviation qui lui est attachée.
3255 Manuel d'initiation :
3256 @rlearning{Visibilité et couleur des objets}
3259 @node Styles de ligne
3260 @subsection Styles de ligne
3261 @translationof Line styles
3263 Certaines indications portées à l'attention de l'exécutant -- tels
3264 @i{rallentando}, @i{accelerando} et @i{trilles} -- apparaissent sous la
3265 forme d'un texte qui peut s'étendre sur plusieurs mesures à l'aide d'une
3266 ligne parfois pointillée ou ondulée.
3268 En matière de dessin du texte et des lignes, ces indications font appel
3269 aux mêmes routines que le glissando@tie{}; leur comportement peut donc
3270 être affiné selon les mêmes préceptes, au moyen de la routine
3271 @code{ly:line-interface::print} qui est tout spécialement chargée de
3272 dessiner les extenseurs. Cette routine détermine l'emplacement exact
3273 des deux points extrêmes de l'extenseur, puis trace une ligne du style
3274 demandé entre ces deux points.
3276 L'exemple ci-dessous indique les différents styles de ligne disponibles,
3277 ainsi que la manière de les spécifier.
3279 @lilypond[relative=2,ragged-right,verbatim,quote]
3281 \once \override Glissando #'style = #'dashed-line
3283 \override Glissando #'style = #'dotted-line
3285 \override Glissando #'style = #'zigzag
3287 \override Glissando #'style = #'trill
3291 Les points d'ancrage de l'extension sont calculés à la volée pour chaque
3292 objet graphique, mais rien ne vous empêche de les forcer@tie{}:
3295 @lilypond[relative=2,ragged-right,verbatim,quote]
3297 \once \override Glissando #'(bound-details right Y) = #-2
3301 La valeur de @code{Y} est ainsi fixée à @w{@code{-2}} en ce qui concerne
3302 la borne droite. Il en irait de même pour la borne gauche en spécifiant
3303 @code{left} (gauche) au lieu de @code{right} (droite).
3305 En l'absence de réglage du @code{Y}, celui-ci est calculé à partir de
3306 l'emplacement vertical des points d'attache gauche et droit de
3309 De plus amples informations quant à l'ajustement des extenseurs font
3310 l'objet de la rubrique @ref{Extenseurs et prolongateurs}.
3313 @node Rotation des objets
3314 @subsection Rotation des objets
3315 @translationof Rotating objects
3317 Qu'il s'agisse des objets de rendu ou d'éléments textuels sous forme de
3318 @emph{markup}, vous pouvez les faire pivoter selon vos désirs et à
3319 partir de n'importe quel point. La méthode diffère cependant selon ce
3320 que vous désirez manipuler.
3323 * Rotation des objets de mise en forme::
3324 * Rotation des étiquettes::
3328 @node Rotation des objets de mise en forme
3329 @unnumberedsubsubsec Rotation des objets de mise en forme
3330 @translationof Rotating layout objects
3332 Tout objet de rendu disposant de la @code{grob-interface} est
3333 susceptible de pivoter, grâce à la propriété @code{rotation}. Celle-ci
3334 prend en argument une liste de trois éléments@tie{}: l'angle de rotation
3335 -- dans le sens inverse des aiguilles d'une montre -- ainsi que les
3336 coordonnées @code{x} et @code{y} du point appartenant à l'objet en
3337 question et à partir duquel doit s'effectuer cette rotation. L'angle
3338 est exprimé en degrés, les coordonnées en espaces de portée.
3340 L'angle et les coordonnées ne peuvent se déterminer que par tâtonnement.
3342 @cindex soufflet penché
3344 Il existe assez peu de situation où faire pivoter un objet de mise en
3345 forme soit réellement opportun@tie{}; en voici une@tie{}:
3347 @lilypond[quote,verbatim,relative=1]
3349 \override Hairpin #'rotation = #'(20 -1 0)
3354 @node Rotation des étiquettes
3355 @unnumberedsubsubsec Rotation des étiquettes
3356 @translationof Rotating markup
3358 Tout texte faisant l'objet d'un @emph{markup} peut pivoter selon
3359 n'importe quel angle, à l'aide de la commande @code{\rotate}. Celle-ci
3360 prend deux arguments@tie{}: l'angle de rotation exprimé en degrés --
3361 dans le sens inverse des aiguilles d'une montre -- et le texte à
3363 @c ne vois comment traduire -jcm
3365 The extents of the text are not rotated: they take
3366 their values from the extremes of the x and y coordinates of the
3369 Dans l'exemple ci-dessous, la propriété @code{outside-staff-priority} à
3370 été fixée à @code{#f} afin de désactiver l'évitement automatique des
3371 collisions qui pourrait repousser certains textes trop haut.
3374 @lilypond[quote,verbatim,relative=1]
3375 \override TextScript #'outside-staff-priority = ##f
3376 g4^\markup { \rotate #30 "un sol" }
3377 b^\markup { \rotate #30 "un si" }
3378 des^\markup { \rotate #30 "un ré bémol" }
3379 fis^\markup { \rotate #30 "un fa dièse" }
3383 @node Retouches avancées
3384 @section Retouches avancées
3385 @translationof Advanced tweaks
3387 Nous allons voir, au fil des paragraphes qui suivent, différentes
3388 approches permettant de fignoler l'apparence d'une partition.
3391 * Alignement des objets::
3392 * Regroupement vertical d'objets graphiques::
3393 * Modification des stencils::
3394 * Modification de l'allure des éléments::
3395 * Conteneurs requalifiants::
3399 Manuel d'initiation :
3400 @rlearning{Autres sources de documentation},
3401 @rlearning{Retouche de partition}.
3403 Manuel de notation :
3404 @ref{En quoi consiste la référence des propriétés internes},
3405 @ref{Modification de propriétés}.
3407 Fichiers d'initialisation :
3408 @file{scm/define-grobs.scm}.
3411 @rlsrnamed{Tweaks and overrides,Retouches}.
3413 Manuel d'extension :
3414 @rextend{Interfaces pour programmeurs}.
3416 Référence des propriétés internes :
3417 @rinternals{All layout objects}.
3420 @node Alignement des objets
3421 @subsection Alignement des objets
3422 @translationof Aligning objects
3424 Les objets graphiques disposant des interfaces
3425 @code{self-alignment-interface} ou @code{side-position-interface}
3426 peuvent s'aligner par rapport à un objet précédemment positionné, ce de
3427 différentes manières. Ces objets sont référencés aux rubriques
3428 @rinternals{self-alignment-interface} et
3429 @rinternals{side-position-interface}.
3431 Tous les objets graphiques ont un point de référence, une étendue
3432 horizontale et une étendue verticale. L'étendue horizontale est
3433 représentée par une paire de nombres indiquant l'écart entre le point de
3434 référence et les bords gauche et droit -- l'écart à gauche étant
3435 négatif. L'étendue verticale est représentée par une paire de nombres
3436 indiquant l'écart entre le point de référence et les bords inférieur et
3437 supérieur -- l'écart vers le bas étant négatif.
3439 La position d'un objet sur la portée est donnée par la valeur des
3440 propriétés @code{X-offset} et @code{Y-offset}. La valeur de
3441 @code{X-offset} indique l'écart en abscisse (coordonnée X) par rapport
3442 au point de référence de l'objet parent@tie{}; la valeur de
3443 @code{Y-offset} indique l'écart par rapport à la ligne médiane de la
3444 portée. Les valeurs de @code{X-offset} et @code{Y-offset} peuvent être
3445 fournies arbitrairement, ou bien être calculé par des procédures
3446 spécifiques qui détermineront l'alignement par rapport à l'objet parent.
3448 @warning{Nombre d'objets sont affectés par des considérations
3449 spécifiques en matière de positionnement@tie{}; jouer sur les valeurs de
3450 @code{X-offset} ou @code{Y-offset} se révélera inefficace en pareil
3451 cas, même si l'objet dispose de la @code{self-alignment-interface}.
3452 Fixer arbitrairement les propriétés @code{X-offset} ou @code{Y-offset}
3453 annihilera alors les effets de la propriété @code{self-alignment}
3456 Par exemple, une altération peut se repositionner verticalement grâce à
3457 son @code{Y-offset}@tie{}; toute modification de son @code{X-offset}
3458 restera par contre sans effet.
3460 Les indications de repère s'alignent sur des objets de rupture -- tels
3461 les barres de mesure, clefs, métriques et armures. Certaines propriétés
3462 spécifiques -- dépendant de la @code{break-aligned-interface} --
3463 permettent de gérer le positionnement des indications de repère sur ces
3467 * Détermination directe de X-offset et Y-offset::
3468 * Utilisation de side-position-interface::
3469 * Utilisation de self-alignment-interface::
3470 * Utilisation de break-aligned-interface::
3474 Manuel d'extension :
3475 @rextend{Fonctions de rappel}.
3478 @node Détermination directe de X-offset et Y-offset
3479 @unnumberedsubsubsec Détermination directe de @code{X-offset} et @code{Y-offset}
3480 @translationof Setting X-offset and Y-offset directly
3482 Vous pouvez fournir, pour de nombreux objets, des valeurs numériques aux
3483 propriétés @code{X-offset} et @code{Y-offset}. Voici par exemple une
3484 note avec indication du doigté tout d'abord avec un positionnement par
3485 défaut, puis repositionnement par modification successive du
3486 @code{X-offset} et du @code{Y-offset}.
3488 @lilypond[verbatim,quote,relative=2]
3491 -\tweak #'X-offset #0
3492 -\tweak #'Y-offset #0
3495 -\tweak #'X-offset #-1
3496 -\tweak #'Y-offset #1
3503 @node Utilisation de side-position-interface
3504 @unnumberedsubsubsec Utilisation de @code{side-position-interface}
3505 @translationof Using the side-position-interface
3507 Un objet disposant de la @code{side-position-interface} peut se voir
3508 accolé à son voisin de telle sorte que les bords des deux objets se
3509 touchent. Un tel objet peut se positionner au-dessus, en dessous, à
3510 droite ou à gauche de son parent. Ce parent ne saurait être
3511 stipulé@tie{}; il est déterminé par l'ordre d'apparition des éléments
3512 dans le flux des saisies. La plupart de ces objets ont pour parent une
3515 Les valeurs des propriétés @code{side-axis} et @code{direction}
3516 détermineront l'endroit où viendra se positionner l'objet, selon les
3517 préceptes suivants@tie{}:
3519 @c TODO add an example of each to the table
3521 @multitable @columnfractions .3 .3 .3
3522 @headitem Propriété @tab Propriété @tab Positionnement
3523 @headitem @code{side-axis} @tab @code{direction} @tab
3525 @item @code{0} @tab @code{-1} @tab gauche
3526 @item @code{0} @tab @code{1} @tab droite
3527 @item @code{1} @tab @code{-1} @tab en dessous
3528 @item @code{1} @tab @code{1} @tab au-dessus
3532 Pour un @code{side-axis} à @code{0}, le @code{X-offset} devrait engager
3533 la procédure @code{ly:side-position-interface::x-aligned-side}.
3534 Celle-ci renverra la valeur adéquate de @code{X-offset} permettant
3535 d'accoler l'objet sur la droite ou sur la gauche de son parent, selon la
3536 valeur de @code{direction}.
3538 Pour un @code{side-axis} à @code{1}, le @code{Y-offset} devrait engager
3539 la procédure @code{ly:side-position-interface::y-aligned-side}.
3540 Celle-ci renverra la valeur adéquate de @code{Y-offset} permettant
3541 d'accoler l'objet au-dessus ou en dessous de son parent, selon la
3542 valeur de @code{direction}.
3544 @c TODO Add examples
3547 @node Utilisation de self-alignment-interface
3548 @unnumberedsubsubsec Utilisation de @code{self-alignment-interface}
3549 @translationof Using the self-alignment-interface
3551 @emph{Réalignement d'objets horizontalement}
3553 L'alignement horizontal d'un objet disposant de la
3554 @code{self-alignment-interface} dépend de la valeur de sa propriété
3555 @code{self-alignment-X}, si tant est que la propriété @code{X-offset} de
3556 cet objet engage la procédure
3557 @code{ly:self-alignment-interface::x-aligned-on-self}.
3558 La propriété @code{self-alignment-X} peut contenir un nombre réel,
3559 l'unité de base étant la moitié de l'étendue horizontale de l'objet.
3560 Une valeur négative décalera l'objet vers la droite, une valeur positive
3561 vers la gauche. La valeur@tie{}@code{0} permet de centrer l'objet sur
3562 le point de référence de son parent. Une valeur de@tie{}@w{@code{-1}}
3563 alignera le bord gauche de l'objet sur le point de référence de son
3564 parent, et une valeur de@tie{}@code{1} alignera le bord droit de l'objet
3565 sur le point de référence de son parent. Les valeurs symboliques
3566 @code{LEFT}, @code{CENTER} et @code{RIGHT} correspondent respectivement
3567 à@tie{}@w{@code{-1}}, @code{0} et @code{1}.
3569 En règle générale, la valeur de @code{self-alignment-X} se modifie à
3570 l'aide d'une commande @code{\override}. Le recours à la commande
3571 @code{\tweak} permet de traiter séparément plusieurs annotations
3572 affectées à une même note@tie{}:
3574 @lilypond[quote,verbatim,relative=1]
3576 -\tweak #'self-alignment-X #-1
3578 -\tweak #'self-alignment-X #0
3580 -\tweak #'self-alignment-X #RIGHT
3582 -\tweak #'self-alignment-X #-2.5
3583 ^"aligned further to the right"
3587 @emph{Réalignement d'objets verticalement}
3589 L'alignement vertical suit le même principe@tie{}: la propriété
3590 @code{Y-offset} doit alors engager la procédure
3591 @code{ly:self-alignment-interface::y-aligned-on-self}. Toutefois, il
3592 arrive bien souvent que d'autres mécanismes interviennent dans
3593 l'alignement vertical. La valeur de @code{Y-offset} n'étant que
3594 l'une des variables qui seront prises en compte, l'ajustement pour
3595 certains objets peut se révéler fastidieux. L'unité de base est
3596 relativement réduite, puisqu'elle est de la moitié de l'étendue
3597 verticale de l'objet@tie{}; le nombre à fournir en argument pourrait
3598 donc être relativement élevé. Une valeur de@tie{}@w{@code{-1}}
3599 alignera le bord inférieur de l'objet sur le point de référence de son
3600 parent, et une valeur de@tie{}@code{1} alignera le bord supérieur de
3601 l'objet sur le point de référence de son parent. La
3602 valeur@tie{}@code{0} permet de centrer l'objet sur le point de référence
3603 de son parent. Les valeurs symboliques @code{DOWN}, @code{CENTER} et
3604 @code{UP} correspondent respectivement à@tie{}@w{@code{-1}}, @code{0} et
3608 @emph{Réalignement d'objets sur les deux axes}
3610 Définir à la fois @code{X-offset} et @code{Y-offset} permet de réaligner
3611 un objet sur les deux axes.
3613 Dans l'exemple ci-dessous, nous ajustons l'indication de doigté de telle
3614 sorte qu'elle se place au plus près de la tête de note.
3616 @lilypond[quote,verbatim,relative=2]
3618 -\tweak #'self-alignment-X #0.5 % move horizontally left
3619 -\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
3620 -\tweak #'self-alignment-Y #-1 % move vertically up
3626 @unnumberedsubsubsec Utilisation de @code{aligned-on-parent}
3628 @c Cannot document as they do not seem to operate consistently on all objects -td
3629 @c TODO investigate further
3631 The @code{aligned-on-parent} procedures are used in the same way
3632 as the @code{aligned-on-self} procedures, they difference being
3633 that they permit an object to be aligned with the @emph{edges} of
3634 the parent rather than the parent's reference point. The following
3635 example shows the difference:
3639 @lilypond[verbatim,quote]
3646 @c unnumberedsubsubsec Utilisation de @code{centered-on-parent}
3648 @c Cannot document as they do not seem to operate consistently on all objects -td
3649 @c TODO investigate further
3653 @c TODO The align-interface, BassFigureAlignment and VerticalAlignment
3656 @node Utilisation de break-aligned-interface
3657 @unnumberedsubsubsec Utilisation de @code{break-aligned-interface}
3658 @translationof Using the break-alignable-interface
3660 @cindex alignement sur un objet
3661 @cindex break-align-symbols
3663 Indications de repère et numéros de mesure peuvent s'aligner sur des
3664 objets de notation autres qu'une barre de mesure. Parmi ces objets,
3665 nous citerons @code{ambitus}, @code{breathing-sign}, @code{clef},
3666 @code{custos}, @code{staff-bar}, @code{left-edge},
3667 @code{key-cancellation}, @code{key-signature}, et @code{time-signature}.
3669 Ces indications et numéros de mesure sont par défaut centrés
3670 horizontalement au-dessus de l'objet@tie{}:
3672 @lilypond[verbatim,quote,relative=1]
3673 % The rehearsal mark will be centered above the Clef
3674 \override Score.RehearsalMark #'break-align-symbols = #'(clef)
3679 % The rehearsal mark will be centered above the Time Signature
3680 \override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
3686 % The rehearsal mark will be centered above the Breath Mark
3687 \override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
3696 Les différents objets sur lesquels l'alignement pourrait intervenir
3697 seront regroupés dans une liste. Si l'un des objets est invisible à
3698 l'endroit voulu, en raison d'un réglage de @code{break-visibility} ou
3699 bien par forçage de la visibilité des armures et clefs, le repère ou le
3700 numéro de mesure viendra s'aligner sur le premier élément de cette liste
3701 qui soit visible. Dans le cas où aucun objet de la liste n'est visible,
3702 l'alignement se fera sur la barre de mesure ou, dans le cas où la barre
3703 de mesure est invisible, à l'endroit même où la barre prendrait place.
3705 @lilypond[verbatim,quote,relative=1]
3706 % The rehearsal mark will be centered above the Key Signature
3707 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3712 % The rehearsal mark will be centered above the Clef
3713 \set Staff.explicitKeySignatureVisibility = #all-invisible
3714 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3719 % The rehearsal mark will be centered above the Bar Line
3720 \set Staff.explicitKeySignatureVisibility = #all-invisible
3721 \set Staff.explicitClefVisibility = #all-invisible
3722 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3729 L'alignement d'un repère sur un objet de notation peut se modifier,
3730 comme l'illustre l'exemple suivant. Toutefois, si la partition comporte
3731 plusieurs portées, ce réglage devra apparaître dans chacune des portées.
3733 @lilypond[verbatim,quote,relative=1]
3734 % The RehearsalMark will be centered above the Key Signature
3735 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
3741 % The RehearsalMark will be aligned with the left edge of the Key Signature
3742 \once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
3746 % The RehearsalMark will be aligned with the right edge of the Key Signature
3747 \once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
3753 Le bord gauche d'un repère peut se décaler arbitrairement sur la gauche
3754 ou la droite. La valeur est exprimée en espaces de portée.
3756 @lilypond[verbatim,quote,relative=1]
3757 % The RehearsalMark will be aligned with the left edge of the Key Signature
3758 % and then shifted right by 3.5 staff-spaces
3759 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
3760 \once \override Score.KeySignature #'break-align-anchor = #3.5
3764 % The RehearsalMark will be aligned with the left edge of the Key Signature
3765 % and then shifted left by 2 staff-spaces
3766 \once \override Score.KeySignature #'break-align-anchor = #-2
3773 @node Regroupement vertical d'objets graphiques
3774 @subsection Regroupement vertical d'objets graphiques
3775 @translationof Vertical grouping of grobs
3777 @c TODO Expand this section
3779 Les objets @code{VerticalAlignment} et @code{VerticalAxisGroup}
3780 travaillent de concert. Comme leurs noms anglais l'indiquent,
3781 @code{VerticalAxisGroup} regroupe différents objets tels que les portées
3782 (@code{Staff}), les paroles (@code{Lyrics}) et ainsi de suite@tie{};
3783 puis @code{VerticalAlignment} synchronise verticalement ces différents
3784 groupes. En général, il n'y a qu'un seul @code{VerticalAlignment} pour
3785 l'ensemble de la partition, mais chaque contexte @code{Staff},
3786 @code{Lyrics}, etc. possède son propre @code{VerticalAxisGroup}.
3789 @node Modification des stencils
3790 @subsection Modification des stencils
3791 @translationof Modifying stencils
3793 Tout objet de rendu dispose d'une propriété @code{stencil} attachée à la
3794 @code{grob-interface}. En règle générale, cette propriété référence
3795 par défaut une fonction spécifique à l'objet et taillée sur mesure pour
3796 fournir le symbole qui va le représenter dans l'output. Par exemple,
3797 le réglage standard de la propriété @code{stencil} de l'objet
3798 @code{MultiMeasureRest} est @code{ly:multi-measure-rest::print}.
3800 Le symbole standard d'un objet quel qu'il soit peut être remplacé à
3801 partir du moment où la propriété @code{stencil} référence une procédure
3802 différente et écrite à cet effet. Ceci requiert une bonne maîtrise du
3803 fonctionnement interne de LilyPond, mais est grandement facilité dans
3804 bien des cas et permet d'obtenir le résultat escompté.
3806 En effet, rien ne nous interdit, à partir de la propriété
3807 @code{stencil}, d'appeler la procédure qui génère du texte,
3808 @code{ly:text-interface::print} en l'occurrence, et d'adjoindre à l'objet
3809 une propriété @code{text} qui contiendra, sous forme de @emph{markup},
3810 le symbole à dessein. Grâce à l'extrême flexibilité des @emph{markups},
3811 vous pourrez parvenir à bien des choses -- voir à ce sujet
3812 @ref{Éléments graphiques dans du texte formaté}.
3814 C'est la technique employée ici, où l'une des têtes de note est
3815 remplacée par une croix inscrite dans un cercle@tie{}:
3817 @lilypond[verbatim,quote]
3819 \once \override NoteHead #'stencil = #ly:text-interface::print
3820 \once \override NoteHead #'text = \markup {
3822 \halign #-0.7 \draw-circle #0.85 #0.2 ##f
3823 \musicglyph #"noteheads.s2cross"
3831 Tous les glyphes de la fonte Feta sont accessibles à l'aide de la
3832 commande de @emph{markup} @code{\musicglyph} -- voir
3833 @ref{La fonte Feta}.
3835 @c TODO Add inserting eps files or ref to later
3837 @c TODO Add inserting Postscript or ref to later
3841 Manuel de notation :
3842 @ref{Text markup commands},
3843 @ref{Éléments graphiques dans du texte formaté},
3844 @ref{La fonte Feta},
3845 @ref{Mise en forme du texte}.
3848 @node Modification de l'allure des éléments
3849 @subsection Modification de l'allure des éléments
3850 @translationof Modifying shapes
3853 * Modification des liaisons::
3857 @node Modification des liaisons
3858 @unnumberedsubsubsec Modification des liaisons
3859 @translationof Modifying ties and slurs
3861 @cindex liaison, modification
3862 @cindex Bézier, points de contrôle d'une courbe
3863 @cindex points de contrôle, courbe de Bézier
3865 Les liaisons, qu'elles soient de prolongation, d'articulation ou de
3866 phrasé, sont dessinées sous la forme de courbes de Bézier de degré
3867 trois. Lorsque l'aspect de la liaison automatiquement calculé n'est pas
3868 satisfaisant, il peut être modifié manuellement, en fournissant
3869 explicitement les quatre points de contrôle qui permettront de définir
3872 Quatre points définissent une courbe de Bézier cubique. Les premier et
3873 quatrième points sont les points de départ et d'arrivée de la
3874 courbe@tie{}; les deux autres points de contrôle -- P1 et P2 -- en
3875 détermineront l'allure. La courbe se trace en partant du point P0, en
3876 se dirigeant vers P1 et en arrivant au point P3 selon la direction
3877 @w{P2-P3}. La courbe est à l'intérieur de l'enveloppe convexe des
3880 Voici par exemple une liaison de prolongation dont l'allure n'est pas
3881 des plus heureuses, même en optant pour un @code{\tieDown}.
3883 @lilypond[verbatim,quote,relative=1]
3887 { r4 <g c,> <g c,> <g c,> }
3891 L'un des moyens d'améliorer cette liaison consiste à modifier
3892 manuellement ses quatre points de contrôle.
3894 Les coordonnées des points de contrôle sont données en unités d'espace
3895 de portée. L'abscisse est relative au point de référence de la note de
3896 départ de la liaison@tie{}; l'ordonnée est relative à la ligne médiane
3897 de la portée. Les différentes coordonnées sont entrées sous la forme
3898 d'une liste de quatre paires de nombres décimaux (ou nombres réels).
3899 L'une des manières de procéder consiste à tout d'abord estimer les
3900 coordonnées des deux extrémités puis, par tâtonnement, déterminer les
3901 deux points intermédiaires.
3903 Remarque intéressante au sujet des courbes@tie{}: une courbe sera
3904 symétrique si ses points de contrôle sont symétriques. L'une des
3905 propriétés avantageuses des courbes de Bézier est que leur
3906 transformation -- déplacement, rotation ou échelonnement -- est
3907 réalisable en simplement corrigeant de manière identique ses points de
3910 Pour l'exemple qui nous occupe, l'adaptation suivante nous permet
3911 d'obtenir un résultat plutôt satisfaisant. Notez bien l'endroit où
3912 cette adaptation est stipulée@tie{}: juste avant la note de départ de la
3915 @lilypond[verbatim,quote,relative=1]
3919 #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
3923 { r4 <g c,> <g c,> <g c,> }
3928 Lorsque plusieurs liaisons, quelle qu'en soit la nature, commencent au
3929 même moment, jouer sur la propriété @code{control-points} est
3930 impossible, et la commande @code{\tweak} inefficace. Vous pouvez
3931 néanmoins influer sur la propriété @code{tie-configuration} de l'objet
3932 @code{TieColumn} pour déterminer la ligne de départ et l'orientation.
3935 Référence des propriétés internes :
3936 @rinternals{TieColumn}.
3939 @node Conteneurs requalifiants
3940 @subsection Conteneurs requalifiants
3941 @translationof Unpure-pure containers
3943 @cindex Scheme, pure containers
3944 @cindex Scheme, unpure containers
3945 @cindex pure containers, Scheme
3946 @cindex unpure containers, Scheme
3947 @cindex espacement horizontal, affinage
3949 Les conteneurs requalifiants permettent de faciliter le calcul des
3950 espacements en cas de modification du @emph{Y-axis} -- plus
3951 particulièrement les composantes @code{Y-offset} et @code{Y-extent} -- à
3952 l'aide d'une fonction scheme en lieu et place de valeurs.
3954 L'envergure verticale (@code{Y-extent}) de certains objets dépend de la
3955 propriété @code{stencil}@tie{}; jouer sur leur stencil requiert alors une
3956 intervention supplémentaire au niveau du @code{Y-extent} à l'aide d'un
3957 conteneur transitoire. Lorsqu'une fonction affecte un @code{Y-offset} ou
3958 un @code{Y-extent}, cela déclenche la détermination des sauts de ligne
3959 de manière anticipée dans la séquence des traitements. Il en résulte
3960 que cette opération n'est en fait pas exécutée@tie{}; elle renvoie
3961 habituellement @code{0} ou @code{'(0 . 0)}, ce qui peut engendrer des
3962 collisions. Une fonction @qq{pure} évitera d'avorter la construction
3963 des propriétés ou objets, qui de ce fait verront leurs arguments liés à
3964 la verticalité (@code{Y-axis}) correctement évalués.
3966 Il existe actuellement une trentaine de fonctions que l'on peut
3967 qualifier de @qq{pures}. Le recours à un conteneur transitoire permet
3968 de requalifier une fonction de telle sorte qu'elle soit reconnue comme
3969 @qq{pure} et soit donc évaluée @strong{avant} détermination des sauts de
3970 ligne -- l'espacement horizontal sera de fait ajusté en temps et en heure.
3971 La fonction @qq{impure} sera ensuite évaluée @strong{après} le
3972 positionnement des sauts de ligne.
3974 @warning{Il n'est pas toujours facile d'avoir l'assurance qu'une
3975 fonction soit qualifiée de @qq{pure}@tie{}; aussi nous vous recommandons
3976 d'éviter d'utiliser les objets @code{Beam} or @code{VerticalAlignment}
3977 lorsque vous désirez en créer une.}
3979 Un conteneur requalifiant se construit selon la syntaxe
3981 @code{(ly:make-unpure-pure-container f0 f1)}
3983 où @code{f0} est une fonction prenant @var{n} arguments (@var{n >= 1}),
3984 le premier devant être l'objet en question@tie{}; il s'agit de la
3985 fonction dont le résultat sera réutilisé. @var{f1} est la fonction qui
3986 sera qualifiée de @qq{pure}. Elle prend @var{n + 2} arguments, le
3987 premier devant être lui aussi l'objet en question, et les second et
3988 troisième étant respectivement les @qq{point de départ} (@var{start}) et
3989 @qq{point d'arrivée} (@var{end}).
3991 @var{start} et @var{end} sont dans tous les cas des valeurs fictives qui
3992 trouveront leur utilité dans le cas d'objets de type @code{Spanner},
3993 tels les soufflets (@code{Hairpin}) ou barres de ligature (@code{Beam}),
3994 en retournant les différentes estimations de hauteur basées sur leurs
3995 début et fin d'extension.
3997 Viennent ensuite les autres arguments de la fonction initiale @code{f0}
3998 -- autrement dit aucun si @var{n = 1}.
4000 Les résultats de la deuxième fonction (@code{f1}) permettent une
4001 approximation des valeurs qui seront ensuite utilisées par la fonction
4002 initiale aux fins d'ajustement lors des phases ultérieures d'espacement.
4004 @lilypond[verbatim,quote,ragged-right]
4005 #(define (square-line-circle-space grob)
4006 (let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
4007 (notename (ly:pitch-notename pitch)))
4008 (if (= 0 (modulo notename 2))
4009 (make-circle-stencil 0.5 0.0 #t)
4010 (make-filled-box-stencil '(0 . 1.0)
4013 squareLineCircleSpace = {
4014 \override NoteHead #'stencil = #square-line-circle-space
4017 smartSquareLineCircleSpace = {
4018 \squareLineCircleSpace
4019 \override NoteHead #'Y-extent =
4020 #(ly:make-unpure-pure-container
4021 ly:grob::stencil-height
4022 (lambda (grob start end) (ly:grob::stencil-height grob)))
4025 \new Voice \with { \remove "Stem_engraver" }
4027 \squareLineCircleSpace
4029 \smartSquareLineCircleSpace
4034 La première mesure de l'exemple ci-dessus ne fait pas appel à un
4035 conteneur requalifiant@tie{}; le moteur d'espacement n'a donc aucune
4036 connaissance de la largeur des têtes de note et ne peut empêcher
4037 qu'elles chevauchent les altérations. Dans la deuxième mesure, par
4038 contre, le recours à un conteneur requalifiant informe le moteur
4039 d'espacement de la largeur des têtes de note@tie{}; les collisions sont
4040 alors évitées du fait de l'espace réservé à chacune des têtes.
4042 Lorsqu'il s'agit de calculs simples, les fonctions, tant pour la partie
4043 @qq{pure} que pour la partie @qq{impure}, peuvent être identiques au
4044 détail près du nombre d'arguments utilisés ou du domaine d'intervention.
4046 @warning{Le fait de qualifier une fonction de @qq{pure} alors qu'elle ne
4047 l'est pas peut générer des résultats imprévisibles.}
4050 @node Utilisation de fonctions musicales
4051 @section Utilisation de fonctions musicales
4052 @translationof Using music functions
4054 @c TODO -- add @seealso, etc. to these subsections
4056 Une adaptation ou un affinage qui devient récurrent parce que doit
4057 s'appliquer à différentes expressions musicales peut faire l'objet d'une
4058 @emph{fonction musicale}. Nous ne traiterons ici que des fonctions de
4059 @emph{substitution}, dont le but est de substituer une variable en un
4060 bout de code LilyPond. D'autres fonctions, plus complexes, sont
4061 abordées au chapitre @rextend{Fonctions musicales}.
4064 * Syntaxe d'une fonction de substitution::
4065 * Exemples de fonction de substitution::
4069 @node Syntaxe d'une fonction de substitution
4070 @subsection Syntaxe d'une fonction de substitution
4071 @translationof Substitution function syntax
4073 La rédaction d'une fonction chargée de substituer du code LilyPond à une
4074 variable est chose relativement aisée. Une telle fonction est de la forme
4078 #(define-music-function
4079 (parser location @var{arg1} @var{arg2} @dots{})
4080 (@var{type1?} @var{type2?} @dots{})
4082 @var{@dots{}musique@dots{}}
4089 @multitable @columnfractions .33 .66
4090 @item @code{@var{argN}}
4091 @tab @var{n}ième argument.
4093 @item @code{@var{typeN?}}
4094 @tab un @emph{type de prédicat} Scheme pour lequel @code{@var{argN}}
4095 doit renvoyer @code{#t}.
4097 @item @code{@var{@dots{}musique@dots{}}}
4098 @tab du code LilyPond tout ce qu'il y a de plus ordinaire, avec des
4099 @code{$} (là où seule une construction LilyPond est autorisée) et des
4100 @code{#} (lorsqu'il s'agit d'une valeur en Scheme ou d'un argument de
4101 fonction musicale) pour référencer les arguments (par ex. @samp{#arg1}).
4104 Les arguments @code{parser} et @code{location} sont obligatoires@tie{};
4105 ils sont utilisés dans certaines situations évoluées, comme indiqué dans
4106 le manuel d'extension des fonctionnalités à au chapitre
4107 @rextend{Fonctions musicales}. Assurez-vous bien de ne pas les omettre
4108 dans vos fonctions de substitution.
4110 La liste des types de prédicat est elle aussi obligatoire. Voici
4111 quelques uns des types de prédicat les plus utilisés dans les fonctions
4116 cheap-list? @emph{(au lieu de }@q{list?}@emph{, pour accélérer le traitement)}
4128 Une liste plus fournie est disponible à l'annexe
4129 @ref{Types de prédicats prédéfinis}. Vous pouvez par ailleurs définir
4130 vos propres types de prédicat.
4135 Manuel de notation :
4136 @ref{Types de prédicats prédéfinis}.
4138 Manuel d'extension :
4139 @rextend{Fonctions musicales}.
4141 Fichiers d'initialisation :
4142 @file{lily/music-scheme.cc},
4144 @file{scm/lily.scm}.
4147 @node Exemples de fonction de substitution
4148 @subsection Exemples de fonction de substitution
4149 @translationof Substitution function examples
4151 La présente rubrique regroupe quelques exemples de fonction
4152 substitutive. Le propos est ici d'illustrer les possibilités qu'offrent
4153 les fonctions de substitution simple.
4155 Dans ce premier exemple, nous définissons une fonction dans le but de
4156 simplifier le réglage du décalage d'une annotation (un
4159 @lilypond[quote,verbatim,ragged-right]
4161 #(define-music-function
4162 (parser location padding)
4165 \once \override TextScript #'padding = #padding
4169 c4^"piu mosso" b a b
4171 c4^"piu mosso" d e f
4173 c4^"piu mosso" fis a g
4177 Nous pouvons utiliser autre chose que des nombres au sein d'une
4178 fonction, y compris une expression musicale@tie{}:
4180 @c TODO: use a better example (the music argument is redundant).
4182 @lilypond[quote,verbatim,ragged-right]
4184 #(define-music-function
4185 (parser location note)
4188 \once \override Voice.NoteHead #'stencil =
4189 #ly:text-interface::print
4190 \once \override Voice.NoteHead #'text =
4191 \markup \musicglyph #"custodes.mensural.u0"
4192 \once \override Voice.Stem #'stencil = ##f
4196 \relative c' { c4 d e f \custosNote g }
4199 Une fonction de substitution peut traiter plusieurs argument@tie{}:
4201 @lilypond[quote,verbatim,ragged-right]
4203 #(define-music-function
4204 (parser location padding tempotext)
4207 \once \override Score.MetronomeMark #'padding = #padding
4208 \tempo \markup { \bold #tempotext }
4212 \tempo \markup { "Low tempo" }
4214 \tempoPadded #4.0 #"High tempo"
4219 @c TODO: add appropriate @@ref's here.