1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
4 Translation of GIT committish: 58aaa226bb22be92f59fec8da680d135666222cc
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 ligne},
40 au format HTML ; 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 Nous allons voir ici ce que sont les contextes et comment les modifier.
70 * Tout savoir sur les contextes::
71 * Création et référencement d'un contexte::
72 * Conservation d'un contexte::
73 * Modification des greffons de contexte::
74 * Modification des réglages par défaut d'un contexte::
75 * Définition de nouveaux contextes::
76 * Ordonnancement des contextes::
81 @rlearning{Contextes et graveurs}.
83 Fichiers d'initialisation :
84 @file{ly/engraver-init.ly},
85 @file{ly/performer-init.ly}.
88 @rlsrnamed{Contexts and engravers, Contextes et graveurs}.
90 Référence des propriétés internes :
91 @rinternals{Contexts},
92 @rinternals{Engravers and Performers}.
95 @node Tout savoir sur les contextes
96 @subsection Tout savoir sur les contextes
97 @translationof Contexts explained
100 @c TODO Rethink and rewrite
102 >> > > - list of contexts: my *danger unmaintainable*
103 >> > > alarm just went off. I'm
105 I knew it would... And leaving out some of them is perfectly fine
107 I do think that a list like this, with the main contexts and a
108 brief description of what they do (perhaps also with a note about what
109 default behavior is associated with each of them, but this may be
110 unmanageable), should be there, and then we could simply list the
111 remaining ones without further explanation and with links to the IR.
114 @c TODO Improve layout, order and consistency of wording -td
116 @c TODO Add introduction which explains contexts in generality -td
118 @c TODO Describe propagation of property values -td
120 Les contextes sont hiérarchisés :
123 * Score -- le père de tous les contextes::
124 * Contextes de haut niveau -- les systèmes::
125 * Contextes de niveau intermédiaire -- les portées::
126 * Contextes de bas niveau -- les voix::
130 @node Score -- le père de tous les contextes
131 @unnumberedsubsubsec Score -- le père de tous les contextes
132 @translationof Score - the master of all contexts
134 Il s'agit en l'occurrence du contexte le plus élevé, autrement dit le
135 plus important, en matière de notation. En effet, c'est au niveau de la
136 partition -- @emph{score} en anglais -- que se gèrent le temps et la
137 tonalité ; c'est donc là qu'il faut s'assurer que les différents
138 éléments, tels les clefs, métriques et armures sont bien répercutés sur
141 Dès lors que LilyPond rencontre un bloc @code{\score @{@dots{}@}}
142 ou @code{\layout @{@dots{}@}}, se crée implicitement un contexte
146 @node Contextes de haut niveau -- les systèmes
147 @unnumberedsubsubsec Contextes de haut niveau -- les systèmes
148 @translationof Top-level contexts - staff containers
150 De nombreuses partitions sont écrites sur plus d'une portée. Ces
151 portées peuvent être regroupées de différentes manières.
153 @strong{@emph{StaffGroup}}
155 Le groupe de portées est attaché par un crochet, et les barres de mesure
156 sont d'un seul tenant, de la première à la dernière portée. Le
157 @code{StaffGroup} constitue le regroupement le plus simple.
159 @strong{@emph{ChoirStaff}}
161 Ce regroupement est identique au @code{StaffGroup}, à ceci près que les
162 barres de mesure ne traversent pas l'espace inter-portées.
164 @strong{@emph{GrandStaff}}
166 Le groupe de portées est attaché par une accolade sur la gauche, et les
167 barres de mesure sont d'un seul tenant.
169 @strong{@emph{PianoStaff}}
171 Ce regroupement est identique au @code{GrandStaff}, à ceci près que le
172 nom de l'instrument sera directement attaché au système.
175 @node Contextes de niveau intermédiaire -- les portées
176 @unnumberedsubsubsec Contextes de niveau intermédiaire -- les portées
177 @translationof Intermediate-level contexts - staves
179 @strong{@emph{Staff}}
181 La portée prend en charge les clefs, barres de mesure, armures et les
182 altérations accidentelles. Un contexte @code{Staff} peut contenir
183 plusieurs contextes @code{Voice}.
185 @strong{@emph{RhythmicStaff}}
187 De même nature qu'un @code{Staff}, mais destiné à n'imprimer que du
188 rythme. Quelle que soit la hauteur, les notes seront imprimées sur une
189 même et unique ligne.
191 @strong{@emph{TabStaff}}
193 Ce contexte permet de générer des tablatures. La mise en forme par
194 défaut correspond à une tablature pour guitare, sur six lignes.
196 @strong{@emph{DrumStaff}}
198 Contexte dévolu tout spécialement aux parties de percussion ; il
199 peut contenir plusieurs @code{DrumVoice}.
201 @strong{@emph{VaticanaStaff}}
203 Identique au contexte @code{Staff}, à ceci près qu'il est tout
204 particulièrement adapté au grégorien.
206 @strong{@emph{MensuralStaff}}
208 Identique au contexte @code{Staff}, à ceci près qu'il est tout
209 particulièrement adapté au style mensural de musique ancienne.
212 @node Contextes de bas niveau -- les voix
213 @unnumberedsubsubsec Contextes de bas niveau -- les voix
214 @translationof Bottom-level contexts - voices
216 Les contextes de niveau « voix » initialisent un certain nombre de
217 propriétés et activent les graveurs appropriés. Un contexte de bas
218 niveau est un contexte n'ayant aucun contexte enfant -- ou
219 @code{defaultchild}. Bien qu'ils puissent accepter ou contenir des
220 sous-contextes, ceux-ci devront être libellés et créés explicitement.
222 @strong{@emph{Voice}}
224 Correspond à une voix positionnée sur une portée. Le contexte
225 @code{Voice} s'occupe des indications de nuance, des hampes, des
226 ligatures, des scripts placés au-dessus ou au-dessous de la portée, des
227 différentes liaisons et des silences. Lorsque plusieurs voix doivent
228 cohabiter sur la même portée, il est indispensable de les instancier
231 @strong{@emph{VaticanaVoice}}
233 Fonctionnant comme le contexte @code{Voice}, il est tout
234 particulièrement destiné à gérer le grégorien.
236 @strong{@emph{MensuralVoice}}
238 Fonctionnant comme le contexte @code{Voice}, il est tout
239 particulièrement adapté aux musiques anciennes.
241 @strong{@emph{Lyrics}}
243 Correspond à une voix contenant des paroles. Le contexte @code{Lyrics}
244 gère l'impression d'une ligne de paroles.
246 @strong{@emph{DrumVoice}}
248 Contexte de voix dévolu à une portée de percussions.
250 @strong{@emph{FiguredBass}}
252 Contexte prenant en charge les objets @code{BassFigure} -- la basse
253 chiffrée -- créés à partir de ce qui a été saisi en mode
256 @strong{@emph{TabVoice}}
258 Contexte de voix dévolu au contexte @code{TabStaff}, il est
259 habituellement créé implicitement.
261 @strong{@emph{CueVoice}}
263 Contexte de voix utilisé essentiellement dans le cadre de citations
264 ajoutées à une portée -- voir @ref{Mise en forme d'une citation}. Il
265 est habituellement créé implicitement.
267 @strong{@emph{ChordNames}}
269 Permet d'imprimer des noms d'accord.
274 Then the following, which I don't know what to do with:
276 * GregorianTranscriptionVoice
277 * GregorianTranscriptionStaff
280 Engraves fretboards from chords. Not easy... Not
282 There is now some documentation on FretBoards in the NR, under
283 instrument-specific notation -- cds.
288 Hard coded entry point for LilyPond. Cannot be tuned.
290 Silently discards all musical information given to this
296 @node Création et référencement d'un contexte
297 @subsection Création et référencement d'un contexte
298 @translationof Creating and referencing contexts
300 @cindex contexte, création
301 @cindex contexte, référencement
306 LilyPond crée automatiquement des contextes de bas niveau lorsque
307 l'expression musicale intervient avant qu'un contexte adéquat n'existe,
308 ce qui peut être pratique dans le cadre d'une partition simple ou de
309 courts fragments tels ceux inclus dans cette documentation. Dès que la
310 structure s'étoffe, il devient nécessaire de créer explicitement tous
311 les contextes, à l'aide des commandes @code{\new} ou @code{\context}.
312 Leur syntaxe est très similaire :
315 [\new | \context] @var{Contexte} [ = @var{nom}] [@var{musique}]
319 où peuvent intervenir aussi bien @code{\new} que @code{\context}.
320 Le @var{Contexte} est le nom du contexte à créer, qui éventuellement
321 s'appellera plus particulièrement @var{nom} ; il contient l'expression
322 musicale unique @var{musique} qui devra être interprétée dans ce
323 contexte par les graveurs ou exécutants.
325 Le préfixe @code{\new} non suivi d'un nom s'utilise principalement pour
326 créer une partition avec plusieurs portées :
328 @lilypond[quote,verbatim,relative=2]
331 % leave the Voice context to be created implicitly
341 et pour regrouper des voix sur une même portée :
343 @lilypond[quote,verbatim,relative=2]
359 @code{\new} est à priviliégier lorsque les contextes ne sont pas nommés.
361 La différence entre les commandes @code{\new} et @code{\context} se
362 situe au niveau de leurs effets :
366 La commande @code{\new}, suivie ou non d'un nom, crée un tout
367 nouveau contexte même s'il en existe déjà un portant le même nom :
369 @lilypond[quote,verbatim,relative=2]
385 La commande @code{\context} avec nommage créera un contexte distinct
386 uniquement dans le cas où ne préexiste aucun contexte du même nom dans
387 la même hiérarchie de contextes. Dans le cas contraire, il servira de
388 référence au contexte précédemment créé, et son expression musicale sera
389 transmise dans ce contexte pour interprétation.
391 Cette procédure est tout à fait pertinente lorsque l'on sépare mise en
392 forme de la partition et contenu musical. Les deux formulations
393 ci-après sont tout à fait valides :
395 @lilypond[quote,verbatim]
409 \context Voice = "one" {
414 \context Voice = "two" {
423 @lilypond[quote,verbatim]
428 \context Voice = "one" {
431 \context Voice = "two" {
437 \context Voice = "one" {
442 \context Voice = "two" {
452 Par ailleurs, le recours à des variables produira les mêmes effets --
453 voir @rlearning{Organisation du code source avec des variables}.
456 La commande @code{\context} utilisée sans nommage recherchera le premier
457 de tous les contextes du même type précédemment créés dans la même
458 hiérarchie de contextes ; l'expression musicale lui sera alors transmise
459 pour interprétation. Bien que rarement utilisée, cette formulation de
460 @code{\context} sans nommage ni expression musicale permet de définir le
461 contexte dans lequel une procédure Scheme comportant une clause
462 @code{\applyContext} devra s'exécuter.
465 \new Staff \relative c' @{
468 \applyContext #(lambda (ctx)
470 (display (ly:context-current-moment ctx)))
477 Un contexte auquel il est ultérieurement fait référence doit
478 impérativement être nommé. C'est le cas par exemple lorsque des paroles
479 sont associées à de la musique :
482 \new Voice = "tenor" @var{musique}
484 \new Lyrics \lyricsto "tenor" @var{paroles}
488 L'association de paroles à de la musique est abordée en détails à la
489 rubrique @ref{Durée automatique des syllabes}.
491 Les propriétés de tous les contextes d'un même type se modifient au sein
492 d'un bloc @code{\layout}, selon une syntaxe différente -- voir
493 @ref{Modification de tous les contextes d'un même type}. Une telle
494 construction permet de séparer mise en forme et contenu musical.
495 Lorsque un seul contexte requiert une adaptation, mieux vaut recourir à
496 un bloc @code{\with} -- voir
497 @ref{Modification d'un contexte particulier}.
501 Manuel d'initiation :
502 @rlearning{Organisation du code source avec des variables}.
505 @ref{Modification d'un contexte particulier},
506 @ref{Durée automatique des syllabes}.
509 @node Conservation d'un contexte
510 @subsection Conservation d'un contexte
511 @translationof Keeping contexts alive
513 @cindex contextes, maintien actif
514 @cindex contextes, durée de vie
516 En règle générale, un contexte disparaît dès qu'il n'y a plus rien à
517 faire. Autrement dit, un contexte @code{Voice} disparaît dès après le
518 dernier événement qu'il contient, et un contexte @code{Staff} dès que
519 les contextes @code{Voice} qu'il supporte ne contiennent plus rien.
520 Ceci peut avoir des conséquences néfastes lorsqu'il est fait référence à
521 un contexte alors disparu, comme dans le cas d'un changement de portée
522 introduit par la commande @code{\change}, l'association de paroles à
523 l'aide de la commande @code{\lyricsto} ou si des événements surviennent
524 à nouveau pour ce contexte précédemment actif.
526 Une exception cependant à cette règle : en présence d'un contexte
527 @code{Staff} ou dans une construction @code{<<...>>}, un seul des
528 contextes @code{Voice} inclus restera actif jusqu'à la fin du contexte
529 @code{Staff} ou de la construction @code{<<...>>}, y compris s'il y
530 a des @qq{trous}. Le contexte alors persistant sera le premier
531 rencontré dans la construction @code{@{...@}} sans tenir compte des
532 éventuels @code{<<...>>} qu'elle pourrait contenir.
534 Un contexte restera actif dès lors qu'il s'y passera toujours quelque
535 chose. Un contexte @code{Staff} restera actif si l'une des voix qu'il
536 supporte est toujours active. L'un des moyens de s'en assurer
537 consiste à ajouter des silences invisibles parallèlement à la musique.
538 Vous devrez les ajouter dans tous les contextes @code{Voice} qui doivent
539 rester actifs. Nous vous conseillons, lorsque plusieurs voix
540 interviennent de manière sporadique, de toutes les maintenir actives
541 plutôt que de vous fier aux exceptions mentionnées plus haut.
543 Dans l'exemple suivant, les deux voix A et B sont maintenues actives
544 jusqu'à la fin du morceau :
546 @lilypond[quote,verbatim]
547 musicA = \relative c'' { d4 d d d }
548 musicB = \relative c'' { g4 g g g }
551 \new Voice = "A" { s1*5 } % Keep Voice "A" alive for 5 bars
552 \new Voice = "B" { s1*5 } % Keep Voice "B" alive for 5 bars
557 \context Voice = "A" {
561 \context Voice = "B" {
565 \context Voice = "A" { \musicA }
566 \context Voice = "B" { \musicB }
567 \context Voice = "A" { \musicA }
578 @cindex paroles, alignement sur une mélodie épisodique
580 L'exemple suivant illustre la manière d'écrire selon cette méthode une
581 mélodie discontinue à laquelle se rattachent des paroles. Dans la
582 réalité, mélodie et accompagnement feraient l'objet de portées séparées.
584 @lilypond[quote,verbatim]
585 melody = \relative c'' { a4 a a a }
586 accompaniment = \relative c' { d4 d d d }
587 words = \lyricmode { These words fol -- low the mel -- o -- dy }
590 \new Staff = "music" {
592 \new Voice = "melody" {
594 s1*4 % Keep Voice "melody" alive for 4 bars
597 \new Voice = "accompaniment" {
602 \context Voice = "melody" { \melody }
603 \context Voice = "accompaniment" { \accompaniment }
605 \context Voice = "accompaniment" { \accompaniment }
607 \context Voice = "melody" { \melody }
608 \context Voice = "accompaniment" { \accompaniment }
613 \new Lyrics \with { alignAboveContext = #"music" }
614 \lyricsto "melody" { \words }
619 Une autre méthode, qui s'avère plus productive dans nombre de cas,
620 consiste à maintenir active la ligne mélodique en y insérant des
621 silences invisibles tout au long de l'accompagnement :
623 @lilypond[quote,verbatim]
624 melody = \relative c'' {
630 accompaniment = \relative c' {
636 words = \lyricmode { These words fol -- low the mel -- o -- dy }
640 \new Staff = "music" {
642 \new Voice = "melody" {
646 \new Voice = "accompaniment" {
652 \new Lyrics \with { alignAboveContext = #"music" }
653 \lyricsto "melody" { \words }
659 @node Modification des greffons de contexte
660 @subsection Modification des greffons de contexte
661 @translationof Modifying context plug-ins
663 @c TODO Should this be Modifying engravers or Modifying contexts?
665 Les contextes, tels que @code{Score} ou @code{Staff}, ne contiennent
666 pas que des propriétés ; ils mettent également en œuvre certains
667 sous-programmes (@emph{plug-ins} pour employer le terme consacré) nommés
668 @qq{graveurs} (@emph{engravers} pour reprendre le terme anglais).
669 Ces sous-programmes sont chargés de créer les différents éléments de
670 notation : on trouve ainsi dans le contexte @code{Voice} un graveur
671 @code{Note_heads_engraver}, chargé des têtes de notes et, dans le
672 contexte @code{Staff}, un graveur @code{Key_engraver}, chargé de
675 Vous trouverez une description exhaustive de chaque graveur dans
677 @rinternals{Engravers and Performers}.
680 Référence des propriétés internes @expansion{} Translation @expansion{} Engravers.
682 Chaque contexte mentionné dans
684 @rinternals{Contexts}
687 Référence des propriétés internes @expansion{} Translation @expansion{} Context.
689 répertorie les graveurs mis en œuvre.
691 On peut faire, au moyen de ces graveurs, sa propre @qq{cuisine}, en
692 modifiant les contextes à volonté.
694 Lorsqu'un contexte est créé, par la commande @code{\new} ou
695 @code{\context}, on peut y adjoindre un bloc @code{\with} (en anglais
696 @qq{avec}), dans lequel il est possible d'ajouter (commande
697 @code{\consists}) ou d'enlever (commande @code{\remove}) des
703 \new @var{contexte} \with @{
716 Ici les points de suspension @dots{} devront être remplacés par le nom
717 des graveurs désirés. Dans l'exemple suivant, on enlève du contexte
718 @code{Staff}, la métrique (graveur @code{Time_signature_engraver})
719 et la clef (graveur @code{Clef_engraver}).
721 @lilypond[quote,relative=1,verbatim]
727 \remove "Time_signature_engraver"
728 \remove "Clef_engraver"
735 La clef et le chiffre de mesure ont disparu de la deuxième portée.
736 C'est une méthode quelque peu radicale, puisqu'elle affectera toute la
737 portée jusqu'à la fin de la partition. L'espacement s'en trouve
738 également affecté, ce qui peut être ou non l'effet recherché. Une
739 méthode plus sophistiquée aurait été de rendre ces objets transparents
740 (voir @rlearning{Visibilité et couleur des objets}).
742 Dans l'exemple suivant, voici une mise en pratique plus utile. En temps
743 normal, les barres de mesure et la métrique sont synchronisées
744 verticalement dans toute la partition. Les graveurs qui en sont
745 responsables se nomment @code{Timing_translator} et
746 @code{Default_bar_line_engraver}. En les enlevant du contexte
747 @code{Score} pour les attribuer au contexte @code{Staff}, chaque portée
748 peut désormais avoir sa propre métrique.
750 @cindex polymétrique, partition
751 @cindex chiffres de mesure multiples
753 @lilypond[quote,verbatim]
757 \consists "Timing_translator"
758 \consists "Default_bar_line_engraver"
764 \consists "Timing_translator"
765 \consists "Default_bar_line_engraver"
774 \remove "Timing_translator"
775 \remove "Default_bar_line_engraver"
783 L'ordre dans lequel les graveurs sont spécifiés correspond à leur ordre
784 d'apparition dans le processus d'élaboration de la partition.
785 En règle générale, l'ordre dans lequel les graveurs sont mentionnés
786 importe peu. Il se peut toutefois qu'un graveur écrive une propriété
787 qui sera interprétée par un autre, ou qu'un graveur crée un objet
788 graphique qui sera traité par un autre ; l'ordre d'apparition de
789 ces graveurs prendra alors tout son importance.
791 Pour information, les ordonnancements suivants sont importants :
795 le @code{Bar_engraver} devrait toujours être le premier ;
798 le @code{New_fingering_engraver} doit toujours précéder le
799 @code{Script_column_engraver} ;
802 le @code{Timing_translator} doit toujours précéder le
803 @code{Bar_number_engraver}.
808 Fichiers d'initialisation :
809 @file{ly/engraver-init.ly}.
813 @node Modification des réglages par défaut d'un contexte
814 @subsection Modification des réglages par défaut d'un contexte
815 @translationof Changing context default settings
817 @cindex réglages par défaut, modification
818 @cindex contexte, modification des propriétés par défaut
820 Les propriétés des contextes et objets graphiques se modifient à l'aide
821 des commandes @code{\set} et @code{\override}, comme indiqué à la
822 rubrique @ref{Modification de propriétés}. Ces commandes créent des
823 événements musicaux qui feront que la modification produira ses effets
824 dès l'instant où la musique est traitée.
826 Le propos est ici de voir comment modifier les valeurs @emph{par défaut}
827 des propriétés de contexte ou d'objet graphique dès la création de ces
828 contextes. Deux manières de procéder sont envisageables : l'une
829 consiste à modifier les valeurs pour tous les contextes d'un même type,
830 l'autre s'attache à adapter les valeurs par défaut d'une instance
831 particulière d'un contexte.
834 * Modification de tous les contextes d'un même type::
835 * Modification d'un contexte particulier::
836 * Ordre de préséance::
840 @node Modification de tous les contextes d'un même type
841 @unnumberedsubsubsec Modification de tous les contextes d'un même type
842 @translationof Changing all contexts of the same type
844 @cindex \context dans un bloc \layout
849 La personnalisation des réglages par défaut d'un contexte, qu'il
850 s'agisse de @code{Score}, @code{Staff} ou @code{Voice}, peut se réaliser
851 indépendamment de la musique dans un bloc @code{\layout} -- placé dans
852 le bloc @code{\score} auquel ces modifications doivent s'appliquer -- au
853 moyen d'un bloc @code{\context}.
859 [réglage de contexte pour tous les contextes @emph{Voice}]
863 [réglage de contexte pour tous les contextes @emph{Staff}]
868 La spécification des adaptations peut se faire de différentes manières :
872 à l'aide d'une commande @code{\override}, sans lui adjoindre le nom du
876 @lilypond[quote,verbatim]
879 a4^"Hampes épaisses" a a a
885 \override Stem.thickness = #4.0
892 en définissant directement une propriété de contexte :
895 @lilypond[quote,verbatim]
898 a4^"Fontes plus petites" a a a
912 à l'aide d'une commande prédéfinie comme @code{\dynamicUp}, ou bien une
913 expression musicale telle que @code{\accidentalStyle dodecaphonic} :
916 @lilypond[quote,verbatim]
919 a4^"Nuance en surplomb" a a a
929 \accidentalStyle dodecaphonic
936 à l'aide d'une variable personnalisée contenant un bloc @code{\with} :
937 pour de plus amples informations sur le bloc @code{\with}, voir
938 @ref{Modification d'un contexte particulier}.
941 @lilypond[quote,verbatim]
942 StaffDefauts = \with {
949 a4^"Petite police" a a a
964 Les instructions destinées à modifier les propriétés peuvent se placer
965 dans un bloc @code{\layout} sans pour autant être incluses dans un bloc
966 @code{\context}. Expliciter des réglages de la sorte équivaut à inclure
967 les commandes de modification des propriétés au début de chacun des
968 contextes du type en question. Lorsque le contexte n'est pas spécifié,
969 @emph{tous} les contextes de bas niveau seront affectés -- voir
970 @ref{Contextes de bas niveau -- les voix}. La syntaxe appropriée répond
971 aux mêmes critères que si la commande était écrite dans le flot
975 @lilypond[quote,verbatim]
979 a4^"Petite police" a a a
984 \accidentalStyle dodecaphonic
986 \override Voice.Stem.thickness = #4.0
992 @node Modification d'un contexte particulier
993 @unnumberedsubsubsec Modification d'un contexte particulier
994 @translationof Changing just one specific context
999 Dans le cas d'un contexte pris individuellement, ses propriétés se
1000 modifient à l'aide d'un bloc @code{\with}. Toutes les autres instances
1001 de contexte appartenant au même type seront affectées des réglages
1002 prédéfinis par LilyPond, modifiés le cas échéant par un bloc
1003 @code{\layout}. Le bloc @code{\with} se place directement à la suite de
1004 la commande @code{\new} @var{type-de-contexte}.
1009 [réglages pour ce contexte pris individuellement]
1015 La spécification des adaptations peut se faire de différentes manières :
1019 à l'aide d'une commande @code{\override}, sans lui adjoindre le nom du
1023 @lilypond[quote,verbatim]
1028 \override Stem.thickness = #4.0
1032 a4^"Hampes épaisses" a a a
1041 en définissant directement une propriété de contexte :
1043 @lilypond[quote,verbatim]
1048 a4^"Default font" a a a
1057 a4^"Smaller font" a a a
1066 à l'aide d'une commande prédéfinie comme @code{\dynamicUp} :
1069 @lilypond[quote,verbatim]
1075 a4^"Nuances en dessous" a a a
1081 \with { \accidentalStyle dodecaphonic }
1084 \with { \dynamicUp }
1087 a4^"Nuances en surplomb" a a a
1099 @node Ordre de préséance
1100 @unnumberedsubsubsec Ordre de préséance
1101 @translationof Order of precedence
1103 La valeur d'une propriété qui doit s'appliquer à un instant particulier
1104 est déterminée comme suit :
1108 s'il y a une instruction @code{\override} ou @code{\set} active dans le
1109 flot d'information, sa valeur s'applique,
1112 en l'absence de quoi sera utilisée la valeur par défaut telle que
1113 définie dans une clause @code{\with} stipulée à l'initialisation du
1117 en l'absence de quoi sera retenue la valeur par défaut issue du bloc
1118 @code{\context} approprié le plus récent dans le bloc @code{\layout},
1121 en l'absence de quoi s'appliqueront les réglages prédéfinis de LilyPond.
1125 Manuel d'initiation :
1126 @rlearning{Modification des propriétés d'un contexte}.
1128 Manuel de notation :
1129 @ref{Tout savoir sur les contextes},
1130 @ref{Contextes de bas niveau -- les voix},
1131 @ref{La commande de fixation (set)},
1132 @ref{La commande de dérogation (override)},
1133 @ref{Le bloc \layout}.
1136 @node Définition de nouveaux contextes
1137 @subsection Définition de nouveaux contextes
1138 @translationof Defining new contexts
1140 @cindex contexte, création
1141 @cindex graveur, affectation à un contexte
1156 Les contextes tels que @code{Staff} ou @code{Voice} sont faits
1157 de briques de construction empilées. En combinant divers graveurs,
1158 il est possible de créer de nouveaux types de contextes.
1160 Dans l'exemple suivant on construit, de zéro, un nouveau contexte très
1161 semblable à @code{Voice}, mais qui n'imprime que des têtes de notes en
1162 forme de barre oblique au centre de la portée. Un tel contexte peut
1163 servir, par exemple, à indiquer un passage improvisé dans un morceau de
1167 @lilypond[quote,ragged-right]
1168 \layout { \context {
1170 \type "Engraver_group"
1171 \consists "Note_heads_engraver"
1172 \consists "Rhythmic_column_engraver"
1173 \consists "Text_engraver"
1174 \consists "Pitch_squash_engraver"
1175 squashedPosition = #0
1176 \override NoteHead.style = #'slash
1177 \override Stem.transparent = ##t
1178 \override Flag.transparent = ##t
1182 \accepts "ImproVoice"
1186 a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
1187 c4 c^"dévêtez-vous" c_"tout en jouant :)" c }
1192 On a rassemblé les réglages dans un bloc @code{\context}, lui-même placé
1193 dans le bloc @code{\layout} :
1203 En lieu et place des points (@dots{}), voici les éléments à saisir :
1205 Tout d'abord, il convient de donner un nom à notre nouveau contexte :
1211 Comme il est très semblable à un contexte @code{Voice}, nous
1212 souhaitons que toutes les commandes associées au @code{Voice} déjà
1213 existant restent valables. D'où nécessité de la commande
1214 @code{\alias}, qui va l'associer au contexte @code{Voice} :
1220 Ce contexte doit pouvoir imprimer des notes et des indications
1221 textuelles ; on ajoute donc les graveurs appropriés ainsi que celui
1222 dévolu au regroupement sous forme de colonne des notes, hampes et
1223 silences qui interviennent au même moment musical :
1226 \consists "Note_heads_engraver"
1227 \consists "Text_engraver"
1228 \consists "Rhythmic_column_engraver"
1231 Toutes les notes devraient s'afficher au centre de la portée :
1234 \consists "Pitch_squash_engraver"
1235 squashedPosition = #0
1238 Le graveur @code{Pitch_squash_engraver} intercepte les notes créées par
1239 le @code{Note_heads_engraver}, et les « écrase » pour qu'elles aient
1240 toutes la même position verticale, définie par @code{squashedPosition} :
1241 ici il s'agit de la valeur @code{0}, c'est-à-dire la ligne du milieu.
1243 On veut que les notes aient la forme d'une barre oblique, sans
1247 \override NoteHead.style = #'slash
1248 \override Stem.transparent = ##t
1249 \override Flag.transparent = ##t
1252 Afin que tous ces graveurs puissent travailler de concert, on leur
1253 adjoint un sous-programme spécial, introduit par la commande
1254 @code{\type} : il s'agit de @code{Engraver_group},
1257 \type "Engraver_group"
1260 Récapitulons ; on se retrouve avec le bloc suivant :
1265 \type "Engraver_group"
1266 \consists "Note_heads_engraver"
1267 \consists "Text_engraver"
1268 \consists "Rhythmic_column_engraver"
1269 \consists "Pitch_squash_engraver"
1270 squashedPosition = #0
1271 \override NoteHead.style = #'slash
1272 \override Stem.transparent = ##t
1273 \override Flag.transparent = ##t
1280 Ce n'est pas tout. En effet, on veut intégrer le nouveau contexte
1281 @code{ImproVoice} dans la hiérarchie des contextes. Tout comme le
1282 contexte @code{Voice}, sa place est au sein du contexte @code{Staff}.
1283 Nous allons donc modifier la définition du contexte @code{Staff},
1284 au moyen de la commande @code{\accepts} :
1295 Le contraire de @code{\accepts} est @code{\denies} ; il est parfois
1296 utile lorsque l'on recycle des définitions de contextes déjà existantes.
1298 Enfin, tout cela doit prendre place dans le bloc @code{\layout},
1309 \accepts "ImproVoice"
1314 On peut alors saisir la musique, comme dans l'exemple plus haut :
1322 c c_"tout en jouant :)"
1330 Référence des propriétés internes :
1331 @rinternals{Engraver_group},
1332 @rinternals{Note_heads_engraver},
1333 @rinternals{Text_engraver},
1334 @rinternals{Rhythmic_column_engraver},
1335 @rinternals{Pitch_squash_engraver}.
1338 @node Ordonnancement des contextes
1339 @subsection Ordonnancement des contextes
1340 @translationof Context layout order
1342 @cindex contextes, ordonnancement
1347 Les contextes viennent en principe se positionner selon leur ordre
1348 d'apparition dans le fichier source. Lorsque plusieurs contextes sont
1349 imbriqués, le contexte englobant supportera les différents contextes
1350 mentionnés dans le fichier source, à la stricte condition qu'ils soient
1351 dûment « agréés ». Les contextes imbriqués qui ne font pas partie de
1352 la « liste d'agréments » du contexte englobant se retrouveront en
1353 dessous de celui-ci au lieu d'y être imbriqués.
1355 La liste des « agréments » d'un contexte se gère à l'aide des
1356 instructions @code{\accepts} et @code{\denies} -- @code{\accepts} pour
1357 ajouter un contexte à la liste, et @code{\denies} pour retirer
1358 l'agrément. Il est par exemple peu conventionnel que les accords nommés
1359 apparaissent dans un contexte @code{Staff} ; autrement dit, le contexte
1360 @code{ChordNames} ne fait pas partie de la « liste d'agréments » du
1361 contexte @code{Staff} par défaut. Néanmoins, et s'il devait en être
1362 ainsi, vous pourriez le spécifier.
1364 @lilypond[verbatim,quote]
1368 \chords { d1:m7 b1:min7.5- }
1373 @lilypond[verbatim,quote]
1377 \chords { d1:m7 b1:min7.5- }
1382 \accepts "ChordNames"
1388 L'instruction @code{\denies} permet, lorsqu'un nouveau contexte reprend
1389 les définitions d'un contexte existant, d'en ajuster les composantes.
1390 C'est par exemple le cas du contexte @code{VaticanaStaff}, réplique du
1391 contexte @code{Staff} au sein duquel le contexte @code{VaticanaVoice} se
1392 substitue au contexte @code{Voice} dans la « liste d'agrément ».
1394 @cindex contextes implicites
1395 @cindex implicites, contextes
1396 @funindex \defaultchild
1398 Gardez à l'esprit que, face à une instruction qui ne s'appliquerait à
1399 aucun contexte déjà existant, LilyPond créera un nouveau contexte
1402 Lors de la définition d'un contexte, les types de contextes
1403 sous-jascents susceptibles d'être créés implicitement sont spécifiés à
1404 l'aide d'une commande @code{\defaultchild}. Un certain nombre
1405 d'événements musicaux requièrent un contexte de plus bas niveau ; face à
1406 un tel événement, LilyPond crée autant de « sous-contextes » que
1407 nécessaire, jusqu'au contexte ne comportant aucun @emph{defaultchild}.
1409 La création implicite de contexte peut donc finir par engendrer de
1410 manière intempestive une nouvelle portée ou une autre partition.
1411 L'utilisation d'une instruction @code{\new} pour créer explicitement des
1412 contextes permet d'éviter ces problèmes.
1414 @cindex alignAboveContext
1415 @cindex alignBelowContext
1416 @funindex alignAboveContext
1417 @funindex alignBelowContext
1419 Il arrive qu'un contexte ne doive exister que pendant un court instant,
1420 ce qui est le cas par exemple pour une @emph{ossia}. Le plus simple
1421 consiste alors à initialiser la définition d'un contexte à l'endroit
1422 approprié, en parallèle avec le fragment correspondant dans la musique
1423 principale. Ce contexte temporaire sera par défaut positionné sous les
1424 autres contextes existants. Le repositionner au-dessus du contexte
1425 « principal » demande de le définir ainsi :
1428 @code{\new Staff \with @{ alignAboveContext = #"principal" @} }
1431 Il en va de même pour les contextes temporaires de paroles au sein d'un
1432 système à plusieurs portées comme un @code{ChoirStaff} lorsque, par
1433 exemple, un couplet supplémentaire apparaît à l'occasion d'une reprise.
1434 Ce contexte de paroles temporaire se place par défaut sous les portées
1435 inférieures. Lui adjoindre une instruction @code{alignBelowContext} dès
1436 son initialisation permet de l'accoler au contexte de paroles (nommé)
1437 qui contient le premier couplet.
1439 Des exemples de repositionnement de contexte temporaire sont disponibles
1440 aux rubriques @rlearning{Expressions musicales imbriquées},
1441 @ref{Modification de portées individuelles} et
1442 @ref{Situations particulières en matière de paroles}.
1445 Manuel d'initiation :
1446 @rlearning{Expressions musicales imbriquées}.
1448 Manuel de notation :
1449 @ref{Modification de portées individuelles},
1450 @ref{Situations particulières en matière de paroles}.
1452 Manuel d'utilisation :
1453 @rprogram{Apparition d'une portée supplémentaire}.
1455 Fichiers d'initialisation :
1456 @file{ly/engraver-init.ly}.
1459 @node En quoi consiste la référence des propriétés internes
1460 @section En quoi consiste la référence des propriétés internes
1461 @translationof Explaining the Internals Reference
1464 * Navigation dans les références du programme::
1465 * Interfaces de rendu::
1466 * Détermination de la propriété d'un objet graphique (grob)::
1467 * Conventions de nommage::
1471 @node Navigation dans les références du programme
1472 @subsection Navigation dans les références du programme
1473 @translationof Navigating the program reference
1475 @c TODO remove this (it's in the LM)
1476 @c Replace with more factual directions
1478 Comment, par exemple, déplacer le doigté dans le fragment suivant ?
1480 @lilypond[quote,relative=2,verbatim]
1486 Sur la page de la documentation relative aux doigtés, c'est-à-dire
1487 @ref{Doigtés}, se trouve l'indication suivante :
1492 Référence des propriétés internes : @rinternals{Fingering}.
1495 @c outdated info; probably will delete.
1497 This fragment points to two parts of the program reference: a page
1498 on @code{FingerEvent} and one on @code{Fingering}.
1500 The page on @code{FingerEvent} describes the properties of the music
1501 expression for the input @code{-2}. The page contains many links
1502 forward. For example, it says
1505 Accepted by: @rinternals{Fingering_engraver},
1509 That link brings us to the documentation for the Engraver, the
1513 This engraver creates the following layout objects: @rinternals{Fingering}.
1516 In other words, once the @code{FingerEvent}s are interpreted, the
1517 @code{Fingering_engraver} plug-in will process them.
1521 @c I can't figure out what this is supposed to mean. -gp
1523 The @code{Fingering_engraver} is also listed to create
1524 @rinternals{Fingering} objects,
1526 @c old info? it doesn't make any sense to me with our current docs.
1528 second bit of information listed under @b{See also} in the Notation
1533 Ladite référence est disponible au format HTML, ce qui rend la
1534 navigation bien plus aisée. Il est possible soit de la lire en ligne,
1535 soit de la télécharger dans ce format. La démarche présentée ici sera
1536 plus difficile à comprendre dans un document au format PDF.
1539 Suivons le lien @rinternals{Fingering}. En haut de la nouvelle page,
1543 Fingering objects are created by: @rinternals{Fingering_engraver} and
1544 @rinternals{New_fingering_engraver}.
1547 En d'autres termes, @emph{Les indications de doigtés}
1548 (@code{Fingering} en anglais) @emph{sont créées par les graveurs
1549 @rinternals{Fingering_engraver} et @rinternals{New_fingering_engraver}.}
1551 En suivant derechef les liens propres à la référence du programme, on
1552 suit en fait le cheminement qui aboutit à la création de la partition :
1556 @item @rinternals{Fingering}:
1557 @rinternals{Fingering} objects are created by:
1558 @rinternals{Fingering_engraver}
1560 @item @rinternals{Fingering_engraver}:
1561 Music types accepted: @rinternals{fingering-event}
1563 @item @rinternals{fingering-event}:
1564 Music event type @code{fingering-event} is in Music expressions named
1565 @rinternals{FingeringEvent}
1568 Ce cheminement se produit, bien sûr, en sens inverse : nous sommes
1569 ici partis du résultat, et avons abouti aux évènements (en anglais
1570 @emph{Events}) engendrés par le fichier d'entrée. L'inverse est
1571 également possible : on peut partir d'un évènement, et suivre le
1572 cheminement de LilyPond qui aboutit à la création d'un ou plusieurs
1575 La référence des propriétés internes peut également se parcourir comme
1576 un document normal. On y trouve des chapitres tels que
1578 @rinternals{Music definitions},
1581 @code{Music definitions}
1583 @rinternals{Translation}, ou encore @rinternals{Backend}. Chaque
1584 chapitre recense toutes les définitions employées, et les propriétés
1585 sujettes à ajustements.
1587 @c -- what about adding a link to the glossary here ? -vv
1588 La Référence des propriétés internes n'est pas traduite en français --
1589 notamment du fait qu'elle est en évolution constante, tout comme
1590 LilyPond. En revanche, les termes musicaux font l'objet d'un
1591 @rglosnamed{Top, glossaire} fort utile pour les utilisateurs
1595 @node Interfaces de rendu
1596 @subsection Interfaces de rendu
1597 @translationof Layout interfaces
1599 @cindex interfaces de rendu
1600 @cindex rendu, interfaces de
1601 @cindex objets graphiques
1604 Tous les éléments de notation sont considérés comme des objets
1605 graphiques (en anglais @emph{Graphical Object}, d'où le diminutif
1606 @emph{Grob}). Chaque objet est doté d'un certain nombre de propriétés
1607 (l'épaisseur du trait, l'orientation, etc.), et lié à d'autres objets.
1608 Le fonctionnement de ces objets est décrit en détail dans
1609 @rinternals{grob-interface}.
1611 Prenons l'exemple des doigtés (en anglais @emph{Fingering}). La page
1612 @code{Fingering} de la Référence des propriétés internes établit une
1613 liste de définitions propres à ce type d'objet :
1616 @code{padding} (dimension, in staff space):
1622 Ce qui signifie que les doigtés doivent être maintenus à une certaine
1623 distance (@emph{padding}) des notes : 0,5 unités @emph{staff-space}
1626 Chaque objet peut avoir plusieurs attributs, en tant qu'élément
1627 typographique ou musical. Ainsi, un doigté (objet @emph{Fingering})
1628 possède les attributs suivants :
1632 Sa taille ne dépend pas de l'espacement horizontal, contrairement aux
1633 liaisons ou ligatures.
1636 C'est du texte -- un texte vraiment court, certes.
1639 Ce texte est imprimé au moyen d'une fonte, contrairement aux liaisons ou
1643 Sur l'axe horizontal, le centre de ce symbole doit être aligné avec le
1647 Sur l'axe vertical, le symbole doit être proche de la note et de la
1651 Sur l'axe vertical encore, il doit également s'ordonner avec les
1652 éventuels autres symboles, ponctuations ou éléments textuels.
1655 Faire appliquer ces différents attributs est le rôle des
1656 @emph{interfaces}, que l'on trouve en bas de la page
1657 @rinternals{Fingering}.
1660 This object supports the following interfaces:
1661 @rinternals{item-interface},
1662 @rinternals{self-alignment-interface},
1663 @rinternals{side-position-interface}, @rinternals{text-interface},
1664 @rinternals{text-script-interface}, @rinternals{font-interface},
1665 @rinternals{finger-interface}, and @rinternals{grob-interface}.
1672 Cet objet admet les interfaces suivantes :
1675 Suit la liste des interfaces en question, présentées comme autant de
1676 liens qui conduisent aux pages dédiées à chacune d'entre elles.
1677 Chaque interface est dotée d'un certain nombre de propriétés, dont
1678 certaines peuvent être modifiées, et d'autres non (les @emph{Internal
1679 properties}, ou propriétés internes).
1681 Pour aller encore plus loin, plutôt que de simplement parler de l'objet
1682 @code{Fingering}, ce qui ne nous avance pas à grand chose, on peut aller
1683 explorer son âme même, dans les fichiers source de LilyPond (voir
1684 @rlearning{Autres sources de documentation}), en l'occurrence le fichier
1685 @file{scm/define-grobs.scm} :
1690 (avoid-slur . around)
1691 (slur-padding . 0.2)
1692 (staff-padding . 0.5)
1693 (self-alignment-X . 0)
1694 (self-alignment-Y . 0)
1695 (script-priority . 100)
1696 (stencil . ,ly:text-interface::print)
1697 (direction . ,ly:script-interface::calc-direction)
1698 (font-encoding . fetaText)
1699 (font-size . -5) ; don't overlap when next to heads.
1700 (meta . ((class . Item)
1701 (interfaces . (finger-interface
1703 text-script-interface
1705 side-position-interface
1706 self-alignment-interface
1707 item-interface))))))
1711 @dots{}où l'on découvre que l'objet @code{Fingering} n'est rien de plus
1712 qu'un amas de variables et de réglages. La page de la Référence des
1713 propriétés internes est en fait directement engendrée par cette
1717 @node Détermination de la propriété d'un objet graphique (grob)
1718 @subsection Détermination de la propriété d'un objet graphique (grob)
1719 @translationof Determining the grob property
1721 @c TODO remove this (it's in the LM)
1722 @c Replace with more factual directions
1724 Nous voulions changer la position du chiffre @b{2} dans le fragment
1727 @lilypond[quote,relative=2,verbatim]
1733 Dans la mesure où le @b{2} est placé, verticalement, à proximité de la
1734 note qui lui correspond, nous allons devoir trouver l'interface en
1735 charge de ce placement, qui se trouve être
1736 @code{side-position-interface}. Sur la page de cette interface, on peut
1740 @code{side-position-interface}
1742 Position a victim object (this one) next to other objects (the
1743 support). The property @code{direction} signifies where to put the
1744 victim object relative to the support (left or right, up or down?)
1750 @code{side-position-interface}
1752 Placer l'objet affecté à proximité d'autres objets. La propriété
1753 @code{direction} indique où positionner l'objet (à droite ou à gauche,
1759 En dessous de cette description se trouve décrite la variable
1765 (dimension, in staff space)
1767 Add this much extra space between objects that are next to each other.
1774 Ajouter tel espace supplémentaire entre des objets proches les uns des
1779 En augmentant la valeur de @code{padding}, on peut donc éloigner le
1780 doigté de la note. La commande suivante insère trois unités d'espace
1781 vide entre la note et le doigté :
1784 \once \override Voice.Fingering.padding = #3
1787 En ajoutant cette commande avant la création du doigté (de l'objet
1788 @code{Fingering}), donc avant @code{c2}, on obtient le résultat
1791 @lilypond[quote,relative=2,verbatim]
1792 \once \override Voice.Fingering.padding = #3
1798 Dans le cas présent, le réglage intervient dans le contexte @code{Voice},
1799 ce qui pouvait également se déduire de la Référence des propriétés
1800 internes, où la page du graveur @rinternals{Fingering_engraver}
1804 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
1810 Le graveur Fingering_engraver fait partie des contextes : @dots{}
1815 @node Conventions de nommage
1816 @subsection Conventions de nommage
1817 @translationof Naming conventions
1819 Afin de s'y retrouver plus aisément et d'éviter les erreurs de frappe,
1820 voici quelques conventions en matière de nommage :
1823 @item fonctions scheme :
1824 minuscule-avec-trait-d-union (y compris noms en mot-unique)
1825 @item fonctions scheme :
1826 ly:plus-style-scheme
1827 @item événements, classes et propriétés musicaux :
1828 identique-aux-fonctions-scheme
1829 @item interfaces d'objet graphique :
1831 @item propriétés d'arrière plan :
1832 style-scheme (mais X et Y pour les axes)
1833 @item contextes (ainsi que MusicExpressions et grobs) :
1834 Capitale initiale ou Camélisation (CamelCase)
1835 @item propriétés de contexte :
1836 minusculeSuivieDeCamélisation
1838 Capitale_initiale_puis_minuscules_séparées_par_un_souligné
1841 Les questions que vous devez vous poser sont :
1843 @item Qu'est-ce qui relève des conventions, et qu'est-ce qui relève de
1845 @item Qu'est-ce qui relève des règles du langage sous-jacent, et
1846 qu'est-ce qui est propre à LilyPond ?
1850 @node Modification de propriétés
1851 @section Modification de propriétés
1852 @translationof Modifying properties
1854 @c TODO change the menu and subsection node names to use
1855 @c backslash once the new macro to handle the refs
1856 @c is available. Need to find and change all refs at
1857 @c the same time. -td
1860 * Vue d'ensemble de la modification des propriétés::
1861 * La commande de fixation (set)::
1862 * La commande de dérogation (override)::
1863 * La commande d'affinage (tweak)::
1865 * Modification de listes associatives::
1869 @node Vue d'ensemble de la modification des propriétés
1870 @subsection Vue d'ensemble de la modification des propriétés
1871 @translationof Overview of modifying properties
1873 Chaque contexte est chargé de créer plusieurs types d'objets graphiques.
1874 Il contient également les réglages nécessaires pour chacun de ces
1875 objets. Si l'on modifie ces réglages, les objets n'auront plus la même
1878 Les contextes comportent deux types différents de propriétés : des
1879 propriétés de contexte et des propriétés d'objet graphique. Les
1880 propriétés de contexte sont celles qui s'appliqueront globalement au
1881 contexte en tant que tel ; elles gèrent la manière dont le contexte
1882 apparaîtra. Les propriétés d'objet graphique, par contre, s'appliquent
1883 à des types particuliers d'objet qui apparaissent dans le contexte en
1886 Les commandes @code{\set} et @code{\unset} permettent de modifier les
1887 valeurs des propriétés de contexte. Les commandes @code{\override} et
1888 @code{\revert} permettent de modifier les valeurs des propriétés des
1892 La syntaxe employée pour ce faire est
1895 \override @var{contexte}.@var{objet}.@var{propriété} = #@var{valeur}
1898 Ici @var{objet} est un objet graphique, tel que @code{Stem} (les hampes)
1899 ou @code{NoteHead} (les têtes de note) ; @var{propriété} est une
1900 variable (désignée par un symbole, ce qui explique l'apostrophe)
1901 employée par le système de mise en page. La sous-section
1902 @ref{Élaboration d'une retouche} vous aidera à savoir quoi mettre à la
1903 place de @var{objet}, @var{propriété} et @var{valeur} ; notre propos
1904 n'est ici que d'examiner l'emploi de cette commande.
1906 La commande suivante :
1909 \override Staff.Stem.thickness = #4.0
1913 rend les hampes plus épaisses (la valeur par défaut est 1.3, ce qui
1914 signifie qu'elles sont 1,3 fois plus épaisses que les lignes de la
1915 portée). Dans la mesure où nous avons indiqué @code{Staff} comme
1916 contexte, ce réglage ne s'appliquera qu'à la portée courante ; les
1917 autres portées demeureront intactes.
1919 @lilypond[quote,verbatim,relative=2,fragment]
1921 \override Staff.Stem.thickness = #4.0
1927 La commande @code{\override} modifie donc la définition de l'objet
1928 @code{Stem} dans le contexte @code{Staff} ; toutes les hampes qui
1929 suivent seront affectées.
1931 Tout comme avec la commande @code{\set}, l'argument @var{contexte} peut
1932 être omis, auquel cas le contexte par défaut (ici, @code{Voice}) sera
1933 employé. La commande @code{\once} permet de n'appliquer la modification
1936 @lilypond[quote,fragment,verbatim,relative=2]
1938 \once \override Stem.thickness = #4.0
1943 La commande @code{\override} doit être entrée @emph{avant} l'objet
1944 concerné. Ainsi, lorsque l'on veut altérer un objet qui se prolonge,
1945 tel qu'une liaison, une ligature ou tout autre objet dit @emph{Spanner},
1946 la commande @code{\override} doit être saisie avant que l'objet soit
1949 @lilypond[quote,fragment,verbatim,relative=2]
1950 \override Slur.thickness = #3.0
1952 \override Beam.beam-thickness = #0.6
1957 Dans cet exemple, la liaison (@emph{Slur}) est épaissie, mais non la
1958 ligature (@emph{Beam}). En effet, le code qui lui est relatif n'a pas
1959 été inséré avant le début de la ligature, et demeure donc sans effet.
1961 De même que la commande @code{\unset}, la commande @code{\revert} défait
1962 ce qui a été fait par une commande @code{\override}. Tout comme avec
1963 @code{\unset}, elle ne peut annuler que les réglages effectués dans le
1964 même contexte. Ainsi dans l'exemple suivant, la commande @code{\revert}
1968 \override Voice.Stem.thickness = #4.0
1969 \revert Staff.Stem.thickness
1972 Il existe, à l'intérieur même de certaines propriétés, des options que
1973 l'on nomme @qq{sous-propriétés}. La syntaxe est alors
1975 @c leave this as a long long
1977 \override @var{contexte}.@var{objet} #'@var{propriété} #'@var{sous-propriété} = #@var{valeur}
1981 Ainsi, par exemple :
1984 \override Stem.details.beamed-lengths = #'(4 4 3)
1990 Référence des propriétés internes :
1991 @rinternals{Backend},
1992 @rinternals{All layout objects},
1993 @rinternals{OverrideProperty},
1994 @rinternals{RevertProperty},
1995 @rinternals{PropertySet}.
1998 La sous-couche Scheme ne vérifie pas la saisie des propriétés de façon
1999 très stricte. Des références cycliques dans des valeurs Scheme peuvent
2000 de ce fait interrompre ou faire planter le programme -- ou bien les
2004 @node La commande de fixation (set)
2005 @subsection La commande de fixation @code{@bs{}set}
2006 @translationof The set command
2009 @cindex modifier des propriétés
2012 Chaque contexte peut avoir plusieurs @strong{propriétés}, c'est-à-dire
2013 des variables qu'il inclut. Ces dernières peuvent être modifiées @qq{à
2014 la volée}, c'est-à-dire pendant que la compilation s'accomplit. C'est
2015 ici le rôle de la commande @code{\set}.
2018 \set @var{contexte}.@var{propriété} = #@var{valeur}
2021 Dans la mesure où @var{valeur} est constituée d'un objet Scheme, elle
2022 doit être précédée du caractère @code{#}.
2024 Les propriétés des contextes se libellent sous la forme
2025 @code{minusculeMajuscule}. Leur rôle consiste principalement à traduire
2026 la musique en notation : par exemple, @code{localKeySignature}
2027 déterminera quand imprimer une altération accidentelle, et
2028 @code{measurePosition} quand imprimer une barre de mesure. La valeur
2029 des propriétés des contextes peuvent évoluer au fur et à mesure que l'on
2030 avance dans le morceau -- @code{measurePosition} en est l'illustration
2033 Ainsi la propriété de contexte @code{skipBars} permet de condenser les
2034 mesures vides de notes, en des silences multimesures. Il s'agit d'un
2035 objet Scheme, auquel on attribue la valeur booléenne @qq{vrai},
2036 c'est-à-dire la lettre @code{#t} pour @qq{True} en anglais :
2038 @lilypond[quote,verbatim,relative=2]
2040 \set Score.skipBars = ##t
2044 Si l'argument @var{contexte} n'est pas spécifié, alors la propriété
2045 cherchera à s'appliquer dans le contexte le plus restreint où elle est
2046 employée : le plus souvent @code{ChordNames}, @code{Voice} ou
2049 @lilypond[quote,verbatim,relative=2]
2050 \set Score.autoBeaming = ##f
2054 \set autoBeaming = ##t
2062 Ce changement étant appliqué @qq{à la volée}, il n'affecte que le second
2065 Notez que le contexte le plus restreint n'est pas toujours le bon, et
2066 peut ne pas contenir la propriété qui vous intéresse : ainsi, la
2067 propriété @code{skipBars}, évoquée plus haut, ne relève pas du contexte
2068 @code{Voice}, mais du contexte @code{Score} -- le code suivant ne
2071 @lilypond[quote,verbatim,relative=2]
2077 Les contextes s'organisent de façon hiérarchique : aussi, lorsqu'un
2078 contexte de niveau supérieur est spécifié (par exemple @code{Staff}), la
2079 propriété sera modifiée dans tous les contextes inférieurs (tous les
2080 contextes @code{Voice}, par exemple) qu'il contient.
2084 La commande @code{\unset} permet d'annuler la définition d'une
2088 \unset @var{contexte}.@var{propriété}
2092 si et seulement si cette @var{propriété} a été définie dans ce
2093 @var{contexte} précis. En d'autres termes, la commande @code{\unset}
2094 doit impérativement affecter le même contexte que la commande
2095 @code{\set} d'origine, même en cas d'imbrication.
2097 @lilypond[quote,verbatim,relative=2]
2098 \set Score.autoBeaming = ##t
2103 \unset Score.autoBeaming
2111 Si l'on se trouve dans le contexte le plus restreint, il n'est pas
2112 obligatoire, là encore, de spécifier le @var{contexte}. Ainsi, les deux
2116 \set Voice.autoBeaming = ##t
2117 \set autoBeaming = ##t
2121 sont équivalentes elles apparaissent dans un contexte @code{Voice}.
2125 Pour modifier une propriété de façon à ce que l'accommodement ne
2126 s'applique qu'une seule fois, il convient d'adjoindre l'instruction
2127 @code{\once} à la commande @code{\set} :
2129 @lilypond[quote,verbatim,relative=2]
2131 \once \set fontSize = #4.7
2136 Ici le changement de taille est annulé aussitôt après la note concernée.
2138 La référence des propriétés internes contient une description exhaustive
2139 de toutes les propriétés, contexte par contexte : voir
2141 @rinternals{Tunable context properties}.
2144 Translation @expansion{} Tunable context properties.
2149 Référence des propriétés internes :
2150 @rinternals{Tunable context properties}.
2153 @node La commande de dérogation (override)
2154 @subsection La commande de dérogation @code{@bs{}override}
2155 @translationof The override command
2157 @cindex grob, propriétés
2158 @cindex objet graphique, propriétés
2159 @cindex propriétés d'un grob
2160 @cindex propriétés d'objet graphique
2164 La commande @code{\override} permet de modifier la mise en forme des
2165 objets graphiques. Les descriptions d'objet graphique, dont les noms
2166 commencent par une majuscule, puis comprennent une ou plusieurs
2167 majuscules (de style @code{TotoTata}), contiennent les réglages @qq{par
2168 défaut} pour les objets graphiques. Ces réglages sont sous forme de
2169 liste Scheme ; on peut les consulter dans le fichier
2170 @file{scm/define-grobs.scm}.
2172 @code{\override} est en fait un raccourci :
2175 \override [@var{contexte}.]@var{NomObjet}.@var{propriété} = #@var{valeur}
2178 Nous pouvons donc par exemple accroître l'épaisseur des hampes en jouant
2179 sur la propriété @code{thickness} de l'objet @code{stem} :
2181 @lilypond[quote,verbatim,relative=2]
2183 \override Voice.Stem.thickness = #3.0
2187 Lorsqu'aucun contexte n'est spécifié dans une clause @code{\override},
2188 celle-ci s'appliquera au contexte le plus bas :
2190 @lilypond[quote,verbatim,relative=2]
2191 { \override Staff.Stem.thickness = #3.0
2195 \override Stem.thickness = #0.5
2204 Certaines @qq{sous-propriétés} sont parfois contenues dans une
2205 propriété. La commande devient alors :
2208 \override Stem.details.beamed-lengths = #'(4 4 3)
2211 ou, pour modifier les extrémités d'un objet à extension :
2214 \override TextSpanner.bound-details.left.text = #"texte de gauche"
2215 \override TextSpanner.bound-details.right.text = #"texte de droite"
2218 @cindex annulation d'un override
2219 @cindex override, annulation des effets
2222 Les effets d'un @code{\override} prennent fin à l'aide de l'instruction
2225 La syntaxe de la commande @code{\revert} command est :
2228 \revert [@var{contexte}.]@var{NomObjet}.@var{propriété}
2233 @lilypond[quote,verbatim,relative=2]
2235 \override Voice.Stem.thickness = #3.0
2237 \revert Voice.Stem.thickness
2241 Les effets d'un @code{\override} ou d'un @code{\revert} s'appliquent dès
2242 l'endroit où ils apparaissent, et à tous les objets dans le contexte
2245 @lilypond[quote,verbatim,relative=2]
2250 \override Staff.Stem.thickness = #3.0
2254 \revert Staff.Stem.thickness
2261 @cindex override ponctuel
2264 L'instruction @code{\override} doit être précédée d'un @code{\once} dès
2265 lors que les effets de l'accommodement ne concernent que l'événement qui
2266 la suit directement :
2268 @lilypond[quote,verbatim,relative=2]
2272 \override Stem.thickness = #3.0
2276 \once \override Stem.thickness = #3.0
2284 Les commandes permettant de modifier l'apparence de la partition
2285 ressemblent en général à
2288 \override Voice.Stem.thickness = #3.0
2292 Pour élaborer un réglage de ce type, on a besoin de connaître
2296 @item le contexte : ici @code{Voice} (la voix).
2297 @item l'objet à affecter : ici @code{Stem} (les hampes).
2298 @item la propriété à modifier : ici @code{thickness} (l'épaisseur
2300 @item la valeur désirée : ici @code{3.0} (par défaut, elle est de 1.3).
2303 @cindex documentation exhaustive
2304 @cindex trouver des objets graphiques
2305 @cindex objets graphiques, description
2309 Pour bien des propriétés, quel que soit le type de valeur requise,
2310 attribuer la valeur @qq{faux} (@code{##f} en Scheme) reviendra à
2311 désactiver complètement l'action de la propriété qui se trouve ainsi
2312 purement ignorée par LilyPond. Cela peut s'avérer fort utile pour des
2313 propriétés causant des désagréments.
2318 Référence des propriétés internes :
2319 @rinternals{Backend}
2322 @node La commande d'affinage (tweak)
2323 @subsection La commande d'affinage @code{@bs{}tweak}
2324 @translationof The tweak command
2326 @cindex retouche (tweak)
2327 @cindex affinage (tweak)
2328 @cindex ajustement (tweak)
2329 @cindex tweak (retouche, affinage)
2332 L'utilisation d'un @code{\override} pour modifier les propriétés d'un
2333 objet graphique affectera toutes les instances de l'objet en question au
2334 sein du contexte, et ce dès son apparition. Il peut parfois être
2335 préférable de n'affecter qu'un seul objet en particulier plutôt que tous
2336 les objets du contexte. C'est là le rôle de l'instruction @code{\tweak},
2337 dont la syntaxe est :
2340 \tweak [@var{objet-de-rendu}.]@code{objet-propriété} @code{valeur}
2343 Mention de l'@var{objet-de-rendu} est optionnel.
2344 La commande @code{\tweak} s'applique à l'objet qui apparaît
2345 immédiatement après @code{valeur}.
2348 Dans certains cas, on peut passer par un raccourci pour arranger les
2349 objets graphiques. Lorsqu'un objet est directement engendré par un
2350 élément distinct du fichier source, on peut utiliser la commande
2353 Dans l'accord suivant, les notes sont modifiées une par une :
2355 @lilypond[relative=2,verbatim,ragged-right]
2361 \tweak duration-log #1
2368 Comme on peut le voir, les propriétés sont ici modifiées directement
2369 en même temps que les objets sont saisis. Il n'est plus besoin de
2370 spécifier ni le nom de l'objet (@emph{grob}), ni le contexte dans lequel
2371 cela doit s'appliquer. Ce procédé ne marche que pour des objets
2372 directement liés aux événements (@rinternals{Event}) du fichier source.
2376 @item Les têtes de notes au sein d'un accord, qui sont directement
2377 engendrées par les hauteurs indiquées
2379 @item Les signes d'articulation, engendrés par les indications de
2383 En revanche, les hampes ou les altérations sont engendrées par les têtes
2384 de notes, et non par des évènements dans le fichier source. De même
2385 pour les clés, qui ne sont pas directement engendrées par le fichier
2386 source, mais plutôt par le changement d'une propriété interne.
2388 En fait, très peu d'objets passent @emph{directement} du code source à
2389 la partition. Une note toute simple, par exemple @code{c4}, fait l'objet
2390 d'un traitement et n'est donc pas directement rendue ; c'est
2391 pourquoi le code suivant ne sera d'aucun effet :
2394 \tweak color #red c4
2398 Voir pour plus de détails
2399 @rextend{Affichage d'expressions musicales}.
2402 Pour une introduction à la syntaxe et l'utilisation des retouches, voir
2403 le chapitre @rlearning{Méthodes de retouche}.
2405 Lorsque plusieurs éléments de même nature surviennent au même instant,
2406 il devient impossible d'utiliser l'instruction @code{\override} pour
2407 n'en modifier qu'un seul individuellement, d'où l'intérêt de la commande
2408 @code{\tweak}. Entre autres éléments qui sont susceptibles de se
2409 produire au même instant, nous citerons :
2411 @c TODO expand to include any further uses of \tweak
2413 @item les têtes de notes au sein d'un accord,
2414 @item les signes d'articulation,
2415 @item les liaisons de prolongation sur des notes d'un accord,
2416 @item les crochets de nolets démarrant au même instant
2419 @c TODO add examples of these
2421 Dans l'exemple suivant, l'une des têtes de note de l'accord est
2422 colorisée, et l'aspect d'une autre est changé.
2424 @lilypond[relative=2,verbatim,quote]
2429 \tweak duration-log #1
2434 L'instruction @code{\tweak} permet aussi de modifier l'aspect d'une
2437 @lilypond[verbatim,quote,relative=1]
2438 c-\tweak thickness #5 ( d e f)
2441 La commande @code{\tweak} ne sera pleinement fonctionnelle que si elle
2442 est directement rattachée à l'objet auquel elle doit s'appliquer alors
2443 que le fichier source est converti en flux musical. Vouloir modifier la
2444 globalité d'un accord est sans résultat dans la mesure où il ne
2445 constitue qu'un conteneur pour des événements musicaux et que tous les
2446 objets seront créés à partir d'événements appartenant à un
2447 @code{EventChord} (un événement d'accord) :
2449 @lilypond[relative=2,verbatim,quote]
2450 \tweak color #red c4
2451 \tweak color #red <c e>4
2452 <\tweak color #red c>4
2455 La commande @code{\tweak} simple ne saurait servir à modifier un élément
2456 qui ne serait pas explicitement mentionné dans le fichier source. C'est
2457 notamment le cas des hampes, ligatures automatiques ou altérations, dans
2458 la mesure où elles seront ultérieurement générées et après les têtes de
2459 note (objets @code{NoteHead}, plutôt qu'au fil des éléments musicaux
2462 De tels objets créés indirectement ne peuvent être ajustés que par une
2463 forme développée de la commande @code{\tweak}, autrement dit
2464 lorsque l'objet est explicitement mentionné :
2466 @lilypond[relative=2,verbatim,quote]
2467 \tweak Stem.color #red
2468 \tweak Beam.color #green c8 e
2469 <c e \tweak Accidental.font-size #-3 ges>4
2472 La commande @code{\tweak} ne peut non plus servir à modifier clefs ou
2473 métriques, puisqu'elles seront immanquablement séparées du @code{\tweak}
2474 par l'insertion automatique d'autres éléments requis pour spécifier le
2477 Plusieurs commandes @code{\tweak} en enfilade permettent d'affecter un
2478 même élément de notation :
2480 @lilypond[verbatim,quote,relative=1]
2482 -\tweak style #'dashed-line
2483 -\tweak dash-fraction #0.2
2484 -\tweak thickness #3
2490 Vous pouvez examiner le flux musical généré par une portion d'un
2491 fichier source, y compris les éléments automatiquement insérés, en
2492 suivant les indications portées à la rubrique
2493 @rextend{Affichage d'expressions musicales}. Ceci s'avère tout à fait
2494 approprié pour déterminer ce qui peut se modifier à l'aide d'un
2495 @code{\tweak} ou bien aider à rectifier votre source de telle sorte
2496 que le @code{\tweak} produise ses effets.
2499 Manuel d'initiation :
2500 @rlearning{Méthodes de retouche}.
2502 Manuel d'extension :
2503 @rextend{Affichage d'expressions musicales}.
2507 @cindex tweak et points de contrôle
2508 @cindex points de contrôle et tweak
2510 Lorsqu'il y a plusieurs liaisons de prolongation dans un accord, la
2511 commande @code{\tweak} ne permet de modifier les points de contrôle que
2512 pour la première rencontrée dans le fichier source.
2515 @node set ou override
2516 @subsection @code{\set} ou @code{\override}
2517 @translationof set versus override
2519 @c TODO -- This section is probably unnecessary now.
2522 Si les propriétés peuvent être modifiées de deux façons, par les
2523 commandes @code{\set} et @code{\override}, c'est qu'il y a deux types de
2526 La propriété @code{fontSize} est une exception : c'est un raccourci, qui
2527 équivaudrait à saisir @w{@code{\override @dots{} #'font-size}} pour tous
2528 les objets textuels. Dans la mesure où il s'agit d'une manipulation
2529 très courante, une propriété spéciale a été créée. Elle doit être
2530 modifiée avec la commande @code{\set}.
2535 @node Modification de listes associatives
2536 @subsection Modification de listes associatives
2537 @translationof Modifying alists
2539 Certaines propriétés configurables par l'utilisateur se présentent en
2540 interne comme étant des listes associatives -- les puristes diront des
2541 @emph{alists}. Une @emph{alist} est en fait constituée de plusieurs
2542 paires de @emph{clés} et @emph{valeurs} ; sa structure ressemble à :
2545 '((@var{clé1} . @var{valeur1})
2546 (@var{clé2} . @var{valeur2})
2547 (@var{clé3} . @var{valeur3})
2551 Dans le cas où cette liste représente les propriétés d'un objet
2552 graphique ou bien l'une des variables du bloc @code{\paper}, chaque clé
2553 peut être modifiée individuellement sans que cela n'affecte les autres.
2555 Par exemple, pour réduire l'espacement entre deux portées adjacentes
2556 d'un même système, on utilisera la propriété @code{staff-staff-spacing}
2557 qui est attachée à l'objet graphique @code{StaffGrouper}. Cette
2558 propriété est constituée d'une liste de quatre clés :
2559 @code{basic-distance}, @code{minimum-distance}, @code{padding} et
2560 @code{stretchability}. Ses réglages par défaut tels que mentionnés à la
2561 rubrique @emph{Backend} de la référence des propriétés internes -- voir
2562 @rinternals{StaffGrouper} -- sont :
2565 '((basic-distance . 9)
2566 (minimum-distance . 7)
2568 (stretchability . 5))
2571 Afin de rapprocher nos deux portées, il suffit de réduire la valeur
2572 (@code{9}) de la clé @code{basic-distance} au niveau de celle de la clé
2573 @code{minimum-distance} (@code{7}). La modification d'une seule clé
2574 individuellement peut se réaliser sous la forme d'une @emph{déclaration
2577 @lilypond[quote,verbatim]
2578 % default space between staves
2580 \new Staff { \clef treble c''1 }
2581 \new Staff { \clef bass c1 }
2584 % reduced space between staves
2585 \new PianoStaff \with {
2586 % this is the nested declaration
2587 \override StaffGrouper.staff-staff-spacing.basic-distance = #7
2589 \new Staff { \clef treble c''1 }
2590 \new Staff { \clef bass c1 }
2594 Le recours à une déclaration imbriquée touchera la clé indiquée
2595 (@code{basic-distance} dans l'exemple ci-dessus) sans pour autant
2596 modifier les autres clés de la propriété considérée.
2598 Considérons maintenant que nous souhaitions que les portées soient le
2599 plus proche possible les unes des autres, à la limite du chevauchement.
2600 Il suffirait de mettre les quatre clés à zéro. Nous pourrions saisir
2601 quatre déclarations, chacune d'elles touchant une clé. Nous pouvons
2602 tout aussi bien redéfinir la propriété en une seule clause, sous la
2603 forme d'une liste associative :
2605 @lilypond[quote,verbatim]
2606 \new PianoStaff \with {
2607 \override StaffGrouper.staff-staff-spacing =
2608 #'((basic-distance . 0)
2609 (minimum-distance . 0)
2611 (stretchability . 0))
2613 \new Staff { \clef treble c''1 }
2614 \new Staff { \clef bass c1 }
2618 N'oubliez pas que dès lors qu'une clé n'apparaît pas dans la liste, elle
2619 retourne à sa valeur @emph{sauf-mention-contraire}. Autrement dit, dans
2620 le cas de @code{staff-staff-spacing} qui nous occupe, toutes les clés
2621 non mentionnées seront ramenées à zéro -- à l'exception de
2622 @code{stretchability} qui prend par défaut la valeur de
2623 @code{basic-distance}. Les deux assertions suivantes sont donc
2627 \override StaffGrouper.staff-staff-spacing =
2628 #'((basic-distance . 7))
2630 \override StaffGrouper.staff-staff-spacing =
2631 #'((basic-distance . 7)
2632 (minimum-distance . 0)
2634 (stretchability . 7))
2637 L'une des conséquences, parfois involontaire, de ceci est la suppression
2638 de réglages standards effectués par un fichier d'initialisation chargé à
2639 chaque compilation d'un fichier source. Dans l'exemple précédent, les
2640 réglages standards de @code{padding} et @code{minimum-distance}, tels
2641 que déterminés par @file{scm/define-grobs.scm}, se voient ramenés à leur
2642 valeur @emph{si-non-définie} ; autrement dit, les deux clés sont mises à
2643 zéro. La définition d'une propriété ou d'une variable sous forme de
2644 liste associative, quelle qu'en soit la taille, réinitialisera toujours
2645 les clés non mentionnées à leur valeur @emph{si-non-définie}. Si telle
2646 n'est pas votre intention, nous vous recommandons alors de régler la
2647 valeur des clés individuellement par des déclarations imbriquées.
2649 @warning{Les déclarations imbriquées ne sont pas fonctionnelles dans le
2650 cas des listes associatives des propriétés de contexte -- telles
2651 @code{beamExceptions}, @code{keySignature},
2652 @code{timeSignatureSettings}, etc. Ces propriétés ne sont modifiables
2653 qu'au travers d'une complète redéfinition de leur liste associative.}
2656 @node Propriétés et contextes utiles
2657 @section Propriétés et contextes utiles
2658 @translationof Useful concepts and properties
2662 * Direction et positionnement::
2663 * Distances et unités de mesure::
2664 * Propriétés des symboles de la portée::
2665 * Extenseurs et prolongateurs::
2666 * Visibilité des objets::
2668 * Rotation des objets::
2672 @node Modes de saisie
2673 @subsection Modes de saisie
2674 @translationof Input modes
2676 La manière dont sera interprétée la notation contenue dans un fichier
2677 source dépend du mode affecté à la saisie.
2679 @strong{Mode accords}
2681 Ce mode, activé par la commande @code{\chordmode}, permet d'interpréter
2682 les saisies comme étant des accords, qui seront imprimés sous forme
2683 de notes sur une portée -- voir @ref{Notation des accords}.
2685 Le mode accords s'active aussi par la commande @code{\chords}, qui
2686 créera un contexte @code{ChordNames}. Les saisies, interprétées comme
2687 étant des accords, seront alors rendues sous forme nominale dans ce
2688 contexte @code{ChordNames} -- voir @ref{Impression des noms d'accord}.
2690 @strong{Mode percussions}
2692 Ce mode, activé par la commande @code{\drummode}, permet d'interpréter
2693 les saisies comme étant de la notation pour percussions -- voir
2694 @ref{Notation de base pour percussions}.
2696 Le mode percussions s'active aussi par la commande @code{\drums}, qui
2697 créera un contexte @code{DrumStaff}. Les saisies, interprétées comme
2698 étant de la notation pour percussions, seront alors rendues sous
2699 forme symbolique sur une portée de percussions -- voir
2700 @ref{Notation de base pour percussions}.
2702 @strong{Mode figures}
2704 Ce mode, activé par la commande @code{\figuremode}, permet d'interpréter
2705 les saisies comme étant de la basse chiffrée (ou figurée) -- voir
2706 @ref{Saisie de la basse chiffrée}.
2708 Le mode figures s'active aussi par la commande @code{\figures}, qui
2709 créera un contexte @code{FiguredBass}. Les saisies interprétées comme
2710 étant de la basse chiffrée, seront alors rendues sous forme symbolique
2711 dans le contexte @code{FiguredBass} -- voir
2712 @ref{Introduction à la basse chiffrée}.
2714 @strong{Mode frets et tablatures}
2716 Il n'existe pas de mode spécifique pour saisir des symboles de fret ou
2719 Notes ou accords saisis en mode note puis affectés à un contexte
2720 @code{TabStaff} seront rendus sous forme de diagramme de tablature --
2721 voir @ref{Tablatures par défaut}.
2723 Deux options différentes permettent d'obtenir des diagrammes de fret en
2724 surplomb d'une portée : directement à l'aide d'un contexte
2725 @code{FretBoards} -- voir @ref{Tablatures automatiques} -- ou en
2726 attachant aux notes des @emph{markups} créés par la commande
2727 @code{\fret-diagram} -- voir @ref{Tablatures sous forme d'étiquette}.
2729 @strong{Mode paroles}
2731 Ce mode, activé par la commande @code{\lyricmode}, permet d'interpréter
2732 les saisies comme étant des syllabes, ayant éventuellement une durée, et
2733 des indications habituelles aux paroles -- voir @ref{Musique vocale}.
2735 Le mode paroles s'active aussi par la commande @code{\addlyrics}, qui
2736 créera un contexte @code{Lyrics} et ajoutera implicitement une commande
2737 @code{\lyricsto} afin d'associer les paroles qui suivent à la musique
2738 précédemment saisie.
2740 @strong{Mode @emph{markup}}
2742 Ce mode, activé par la commande @code{\markup}, permet d'interpréter les
2743 saisies comme étant des @emph{markups} (annotations ou étiquettes) --
2744 voir @rusernamed{Text markup commands,Commandes pour le mode markup}.
2747 @c silly work-around for texinfo broken-ness
2748 @c (@strong{Note...} causes a spurious cross-reference in Info)
2751 Le mode notes est le mode par défaut dans LilyPond. Il peut aussi
2752 s'activer par la commande @code{\notemode}. Les saisies seront
2753 interprétées comme étant des hauteurs, durées, @emph{markups}, etc. qui
2754 seront rendues sous forme de notation musicale sur une portée.
2756 Nul n'est besoin de spécifier le mode notes de manière explicite, hormis
2757 dans certaines situations particulières, notamment lorsque vous êtes en
2758 mode paroles, accords, ou tout autre mode, et que vous deviez insérer
2759 un élément qui ne serait disponible que grâce à la syntaxe du mode
2762 Il en va ainsi lorsque, par exemple, vous voulez ajouter une indication
2763 de nuance au numéro de couplet d'un chant choral :
2765 @lilypond[verbatim,relative=2,quote]
2768 \notemode{\set stanza = \markup{ \dynamic f 1. } }
2772 \notemode{\set stanza = \markup{ \dynamic p 2. } }
2778 @node Direction et positionnement
2779 @subsection Direction et positionnement
2780 @translationof Direction and placement
2782 En matière de typographie musicale, l'orientation et le positionnement
2783 de nombreux éléments est affaire de goût. Par exemple, les hampes
2784 peuvent être ascendantes ou descendantes, les paroles, nuances ou autres
2785 indications d'expression peuvent apparaître au-dessus ou en dessous de
2786 la portée, les indications textuelles s'alignent tantôt par la gauche,
2787 tantôt par la droite, ou être centrées. La plupart de ces choix peuvent
2788 être laissés à l'appréciation de LilyPond. Il peut être préférable,
2789 dans certains cas, d'imposer l'orientation ou le positionnement des
2793 * Indicateurs de position d'une articulation::
2794 * La propriété direction::
2798 @node Indicateurs de position d'une articulation
2799 @unnumberedsubsubsec Indicateurs de position d'une articulation
2800 @translationof Articulation direction indicators
2802 Certains positionnements sont opérés par défaut -- toujours au-dessus ou
2803 toujours en dessous (nuances ou points d'orgue) -- alors que d'autres
2804 alterneront selon l'orientation des hampes (liaisons ou accents).
2806 @c TODO Add table showing these
2808 Le positionnement par défaut peut être outrepassé à l'aide d'un
2809 @emph{indicateur de positionnement}, qui vient s'insérer juste avant
2810 l'articulation. LilyPond met à votre disposition trois indicateurs de
2811 positionnement : @code{^} (pour @qq{au-dessus}), @code{_} (pour
2812 @qq{au-dessous}), et @code{-} (pour @qq{appliquer le positionnement par
2813 défaut}). L'indicateur de positionnement n'est pas obligatoire ;
2814 LilyPond considère alors qu'il y a un @code{-}. Un indicateur de
2815 positionnement est cependant @strong{obligatoire} dans les cas
2819 @item une commande @code{\tweak},
2820 @item une commande @code{\markup},
2821 @item une commande @code{\tag},
2822 @item les indications de corde, par exemple @code{-"corde"},
2823 @item les indications de doigté, par exemple @w{@code{-1}},
2824 @item les raccourcis d'articulation, par exemple @w{@code{-.}},
2825 @w{@code{->}} ou @w{@code{--}}.
2828 Les indicateurs de positionnement n'affectent que la note qui suit :
2830 @lilypond[verbatim,quote,relative=2]
2838 @node La propriété direction
2839 @unnumberedsubsubsec La propriété @code{direction}
2840 @translationof The direction property
2842 Le positionnement ou l'orientation de nombreux objets de rendu sont
2843 gérés par la propriété @code{direction}.
2845 La propriété @code{direction} peut prendre la valeur @code{1}, qui
2846 signifie @qq{ascendant} ou @qq{au-dessus}, ou @w{@code{-1}}, qui
2847 signifie @qq{descendant} ou @qq{au-dessous}. Les symboliques @code{UP}
2848 et @code{DOWN} peuvent remplacer respectivement @code{1} et
2849 @w{@code{-1}}. Les valeurs @code{0} ou @code{CENTER} permettent de
2850 réaffecter à la propriété @code{direction} son comportement par défaut.
2851 Certaines commandes prédéfinies permettent par ailleurs de spécifier un
2852 comportement en matière d'orientation ou positionnement ; elles
2856 @code{\xxxUp}, @code{\xxxDown} et @code{\xxxNeutral}
2860 auquel cas @code{\xxxNeutral} signifie @qq{retour au comportement par
2861 défaut} -- voir @rlearning{Objets inclus dans la portée}.
2863 Dans quelques cas particuliers, comme l'indication d'un @emph{arpeggio},
2864 la valeur affectée à la propriété @code{direction} déterminera si
2865 l'objet doit se placer à gauche ou à droite de son parent. Un
2866 @w{@code{-1}} ou @code{LEFT} signifiera alors @qq{sur la gauche}, et un
2867 @code{1} ou @code{RIGHT} @qq{sur la droite}. Comme de bien entendu, un
2868 @code{0} ou @code{CENTER} signifiera @qq{appliquer le positionnement par
2872 These all have side-axis set to #X
2873 AmbitusAccidental - direction has no effect
2875 StanzaNumber - not tried
2876 TrillPitchAccidental - not tried
2877 TrillPitchGroup - not tried
2880 Notez que ces commandes resteront effectives jusqu'à ce qu'elles soient
2883 @lilypond[verbatim,quote,relative=2]
2892 En matière de musique polyphonique, il est souvent plus judicieux
2893 d'utiliser des contextes @code{Voice} explicites que de modifier
2894 l'orientation des objets. Pour de plus amples informations, voir
2895 @ref{Plusieurs voix}.
2898 Manuel d'initiation :
2899 @rlearning{Objets inclus dans la portée}.
2901 Manuel de notation :
2902 @ref{Plusieurs voix}.
2905 @node Distances et unités de mesure
2906 @subsection Distances et unités de mesure
2907 @translationof Distances and measurements
2909 @cindex distance absolue
2910 @cindex distance relative
2911 @cindex distance extensible
2918 LilyPond considère deux types de distances : les distances absolues
2919 et les distances relatives ou extensibles.
2921 Les distances absolues permettent de spécifier les marges, indentations
2922 et autres détails de mise en page ; elles s'expriment par défaut en
2923 millimètres. Vous pouvez utiliser d'autres systèmes de mesure, dès lors
2924 que la quantité est suivie de la mesure : @code{\mm}, @code{\cm},
2925 @code{\in} (pouces) ou @code{\pt} (points, 1/72,27 pouce).
2926 Les mesures de mise en page peuvent aussi s'exprimer en unité extensible
2927 de portée @code{\staff-space} (voir ci-après). Pour plus d'information
2928 concernant la mise en page, voir la rubrique
2929 @ref{Mise en forme de la page}.
2931 Les distances relatives ou extensibles s'expriment toujours en
2932 @qq{espace de portée} ou, plus rarement, en @qq{demi espace de portée}.
2933 L'espace de portée correspond à la distance qui sépare deux lignes
2934 adjacentes d'une portée. Sa valeur par défaut est déterminée
2935 globalement par la taille de portée. Elle peut aussi s'ajuster
2936 ponctuellement en jouant sur la propriété @code{staff-space} de l'objet
2937 @code{StaffSymbol}. Les distances relatives s'ajustent automatiquement
2938 dès qu'une modification de la taille globale de portée ou bien de la
2939 propriété @code{staff-space} du @code{StaffSymbol} intervient.
2940 Cependant, les tailles de fonte ne s'ajusteront automatiquement que si
2941 la modification touche la taille globale des portées. La taille globale
2942 de portée permet ainsi de gérer l'aspect général de la partition --
2943 voir @ref{Définition de la taille de portée}.
2947 Lorsque seulement une portion de partition doit apparaître dans une
2948 taille, comme par exemple une portée d'ossia ou une note de bas de page,
2949 influer sur la taille globale de portée affecterait l'intégralité de la
2950 partition. Il convient donc dans ce cas de modifier à la fois la
2951 propriété @code{staff-space} du @code{StaffSymbol} et la taille des
2952 fontes. La fonction Scheme @code{magstep} est tout spécialement chargée
2953 d'adapter une modification du @code{staff-space} aux fontes. Pour de
2954 plus amples informations, reportez-vous à la rubrique
2955 @rlearning{Longueur et épaisseur des objets}.
2958 Manuel d'initiation :
2959 @rlearning{Longueur et épaisseur des objets}.
2961 Manuel de notation :
2962 @ref{Définition de la taille de portée},
2963 @ref{Mise en forme de la page}.
2966 @node Propriétés des symboles de la portée
2967 @subsection Propriétés des symboles de la portée
2968 @translationof Staff symbol properties
2970 @cindex ajustement des symboles de portée
2971 @cindex dessin des symboles de portée
2972 @cindex symboles de portée, dessin
2974 @c TODO Extend or remove this section. See also NR 1.6.2 Staff symbol
2975 @c Need to think of uses for these properties. Eg 'line-positions
2976 @c is used in a snippet to thicken centre line.
2977 @c If retained, add @ref to here in 1.6.2 -td
2979 L'emplacement vertical et le nombre de lignes d'une portée se
2980 définissent conjointement. Comme l'illustre l'exemple suivant, le
2981 positionnement des notes n'est en rien influencé par le positionnement
2982 des lignes de la portée.
2984 @warning{La propriété @code{'line-positions} écrase la propriété
2985 @code{'line-count}. Le nombre de lignes d'une portée est implicitement
2986 défini par le nombre d'éléments dans la liste des valeurs de
2987 @code{'line-positions}.}
2989 @lilypond[verbatim,quote,relative=1]
2991 \override StaffSymbol.line-positions = #'(7 3 0 -4 -6 -7)
2996 La largeur d'une portée, exprimée en espace de portée, peut être figée.
2997 L'espacement des objets inclus dans cette portée ne sera en rien affecté
3000 @lilypond[verbatim,quote,relative=1]
3002 \override StaffSymbol.width = #23
3008 @node Extenseurs et prolongateurs
3009 @subsection Extenseurs et prolongateurs
3010 @translationof Spanners
3012 De nombreux objets de notation musicale s'étendent sur plusieurs notes,
3013 voire même sur plusieurs mesures. Il en va ainsi des liaisons,
3014 ligatures, crochets de nolet, crochets de reprise, crescendos, trilles
3015 ou glissandos. Ces objets, que l'on englobe sous l'appellation
3016 @qq{d'extenseur}, sont pourvus de propriétés spécifiques destinées à
3017 contrôler leur apparence et leur comportement. Un certain nombre de ces
3018 propriétés sont communes à tous les extenseurs, d'autres n'affectent que
3019 certains d'entre eux.
3021 Tout extenseur dispose de la @code{spanner-interface}. Quelques uns,
3022 tout particulièrement ceux chargés de dessiner une ligne droite entre
3023 deux objets, disposent aussi de la @code{line-spanner-interface}.
3026 * Utilisation de spanner-interface::
3027 * Utilisation de line-spanner-interface::
3031 @node Utilisation de spanner-interface
3032 @unnumberedsubsubsec Utilisation de @code{spanner-interface}
3033 @translationof Using the spanner-interface
3035 Cette interface fournit deux propriétés qui s'appliquent à certains
3038 @strong{@i{La propriété @code{minimum-length}}}
3040 La longueur minimale d'un extenseur est déterminée par la propriété
3041 @code{minimum-length}. Au plus sa valeur est élevée, au plus
3042 l'espacement des notes qui le bornent sera grand. Forcer sa valeur
3043 restera néanmoins sans effet pour un certain nombre d'extenseurs dont la
3044 longueur dépend d'autres considérations. Voici quelques exemples de
3045 mise en œuvre de cette propriété.
3048 Cette propriété est pleinement fonctionnelle pour :
3049 Tie (liaison de prolongation)
3050 MultiMeasureRest (silence multimesures)
3052 Slur (liaison d'articulation)
3053 PhrasingSlur (liaison de phrasé)
3055 Cette propriété est fonctionnelle en présence d'un @emph{callback} :
3059 Cette propriété est sans effet sur :
3068 @lilypond[verbatim,quote,relative=2]
3071 % increase the length of the tie
3072 -\tweak minimum-length #5
3076 @lilypond[verbatim,quote,relative=2]
3078 \compressFullBarRests
3080 % increase the length of the rest bar
3081 \once \override MultiMeasureRest.minimum-length = #20
3086 @lilypond[verbatim,quote,relative=2]
3088 % increase the length of the hairpin
3089 \override Hairpin.minimum-length = #20
3093 Cette propriété permet aussi de jouer sur l'envergure d'une liaison
3094 d'articulation ou de phrasé.
3096 @lilypond[verbatim,quote,relative=2]
3099 -\tweak minimum-length #5
3104 -\tweak minimum-length #5
3108 Certains objets requièrent un appel explicite à la procédure
3109 @code{set-spacing-rods} pour que la propriété @code{minimum-length}
3110 produise ses effets. La propriété @code{set-spacing-rods} doit alors
3111 prendre pour valeur @code{ly:spanner::set-spacing-rods}. Par exemple, la
3112 longueur minimale d'un glissando ne pourra être forcée tant que la
3113 propriété @code{springs-and-rods} n'est pas définie :
3115 @lilypond[verbatim,quote,relative=1]
3119 % not effective alone
3120 \once \override Glissando.minimum-length = #20
3123 % effective only when both overrides are present
3124 \once \override Glissando.minimum-length = #20
3125 \once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
3129 Il en va de même pour l'objet @code{Beam} (ligature) :
3131 @lilypond[verbatim,quote,relative=1]
3132 % not effective alone
3133 \once \override Beam.minimum-length = #20
3136 % effective only when both overrides are present
3137 \once \override Beam.minimum-length = #20
3138 \once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
3142 @strong{@i{La propriété @code{to-barline}}}
3144 La seconde propriété fournie par la @code{spanner-interface} est
3145 @code{to-barline}. Elle est activée par défaut, raison pour laquelle
3146 les soufflets et autres extenseurs finissant sur la première note d'une
3147 mesure s'arrêtent visuellement au niveau de la barre de mesure qui la
3148 précède. Le fait de désactiver la propriété @code{to-barline} aura pour
3149 effet de prolonger l'extenseur au delà de la barre de mesure et jusqu'à
3150 la note qui le borne :
3152 @lilypond[verbatim,quote,relative=2]
3153 a \< a a a a \! a a a \break
3154 \override Hairpin.to-barline = ##f
3155 a \< a a a a \! a a a
3158 Cette propriété n'est pas opérationnelle pour tous les extenseurs. Il
3159 serait en effet quelque peu surprenant de l'activer (lui
3160 affecter @code{#t}) dans le cas d'une liaison d'articulation ou de
3164 @node Utilisation de line-spanner-interface
3165 @unnumberedsubsubsec Utilisation de @code{line-spanner-interface}
3166 @translationof Using the line-spanner-interface
3168 Un certain nombre d'objets disposent de la propriété
3169 @code{line-spanner-interface}, entre autres :
3172 @item @code{DynamicTextSpanner}
3173 @item @code{Glissando}
3174 @item @code{TextSpanner}
3175 @item @code{TrillSpanner}
3176 @item @code{VoiceFollower}
3179 La routine en charge de dessiner le stencil de ces extenseurs est
3180 @code{ly:line-interface::print}. Elle va déterminer les deux points
3181 extrêmes et dessiner entre eux une ligne du style requis. Bien que la
3182 localisation des deux bornes de l'extenseur soit calculée à la volée,
3183 vous pouvez cependant forcer leur ordonnée (coordonnée-Y). Les
3184 propriétés que vous devrez ajuster résident au deuxième niveau dans la
3185 hiérarchie, mais la syntaxe de la commande @code{\override} nécessaire
3186 demeure relativement simple :
3188 @lilypond[relative=2,quote,verbatim]
3190 \once \override Glissando.bound-details.left.Y = #3
3191 \once \override Glissando.bound-details.right.Y = #-2
3195 La propriété @code{Y} est valorisée en unités de @code{staff-space}, la
3196 ligne médiane de la portée correspondant au point zéro. Pour le
3197 glissando qui nous occupe, il s'agit du @code{Y} à l'aplomb
3198 (coordonnée-X) du centre de la tête de chacune des deux notes, si tant
3199 est que la ligne doive s'étendre entre ces deux points.
3201 Si le @code{Y} n'est pas défini, sa valeur sera calculée en fonction de
3202 la position verticale du point d'attachement de l'extenseur.
3204 Dans le cas où l'extenseur est interrompu par un saut de ligne, les
3205 terminaisons à cet endroit se gèrent grâce aux sous-clés
3206 @code{left-broken} et @code{right-broken} de @code{bound-details}, comme
3209 @lilypond[relative=2,ragged-right,verbatim,quote]
3210 \override Glissando.breakable = ##t
3211 \override Glissando.bound-details.right-broken.Y = #-3
3212 c1 \glissando \break
3216 Les sous-propriétés @code{left} et @code{right} du @code{bound-details}
3217 disposent d'autres clés modifiables de la même manière que @code{Y} :
3221 Détermine l'ordonnée (coordonnée-Y) de la terminaison, avec un
3222 décalage en @code{staff-space} par rapport à la ligne médiane de la
3223 portée. Il s'agit par défaut du centre de l'objet d'attachement, qui
3224 est le centre vertical de la tête de note pour un glissando.
3226 En ce qui concerne les extenseurs horizontaux, tels ceux comportant du
3227 texte ou les trilles, il est fixé à @code{0}.
3230 Détermine le début et la fin de la ligne sur l'axe des abscisses,
3231 relativement à l'objet de rattachement. Une valeur de @w{@code{-1}} (ou
3232 @code{LEFT}) aura pour effet de commencer ou terminer la ligne sur la
3233 gauche de la tête de note de rattachement.
3236 Il s'agit de l'abscisse (coordonnée-X) absolue de la terminaison. Elle
3237 se calcule à la volée, et son forçage n'apporte rien de plus.
3240 Les extenseurs linéaires peuvent commencer ou finir par un symbole,
3241 enregistré dans cette sous-propriété. Elle est conçue pour un usage
3242 interne, aussi nous vous conseillons de plutôt recourir à @code{text}.
3245 Il s'agit d'un @emph{markup} qui se poursuivra par l'extenseur. C'est la
3246 sous-propriété utilisée pour ajouter @i{cresc.}, @i{tr} ou autre texte à
3247 un extenseur horizontal.
3249 @lilypond[quote,ragged-right,relative=2,verbatim]
3250 \override TextSpanner.bound-details.left.text
3251 = \markup { \small \bold Slower }
3252 c2\startTextSpan b c a\stopTextSpan
3255 @item stencil-align-dir-y
3256 @item stencil-offset
3257 Lorsqu'aucune de ces deux sous-propriétés n'est définie, le stencil est
3258 simplement positionné à l'extrémité, centré sur la ligne telle que
3259 définie par les sous-propriétés @code{X} et @code{Y}. L'utilisation de
3260 @code{stencil-align-dir-y} ou @code{stencil-offset} permettra d'aligner
3261 le symbole verticalement par rapport au coin de la ligne :
3263 @lilypond[relative=1,quote,verbatim]
3264 \override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
3265 \override TextSpanner.bound-details.right.stencil-align-dir-y = #UP
3267 \override TextSpanner.bound-details.left.text = #"ggg"
3268 \override TextSpanner.bound-details.right.text = #"hhh"
3269 c4^\startTextSpan c c c \stopTextSpan
3272 Vous n'aurez pas manqué de constater qu'une valeur négative place le
3273 texte @emph{en haut} -- contrairement à ce que l'on serait en droit
3274 d'attendre. Ceci est dû au fait que la valeur @w{@code{-1}} ou
3275 @code{DOWN} signifie @qq{aligner le bord @emph{inférieur} du texte sur
3276 la ligne d'extension}. Une valeur égale à @code{1} ou @code{UP}
3277 alignera le sommet du texte sur cette ligne d'extension.
3280 L'activation de cette sous-propriété (lui affecter @code{#t}) ajoutera
3281 à l'extenseur une terminaison en flèche.
3284 Cette sous-propriété contrôle l'espace qui doit séparer l'extrémité de
3285 la ligne et la fin réelle de l'extenseur. Sans ce @qq{décalage}, le
3286 trait indiquant un glissando commencerait et finirait au beau milieu de
3287 chacune des têtes de note.
3291 La fonction @code{\endSpanners} permet d'interrompre l'extenseur qui
3292 vient dès la note suivante. Autrement dit, il ne s'étendra que sur une
3293 seule note, ou jusqu'à la prochaine barre de mesure si @code{to-barline}
3294 a été activé et que survient une barre avant la note suivante.
3296 @lilypond[verbatim,quote,ragged-right,relative=2]
3298 c2 \startTextSpan c2 c2
3303 L'utilisation de @code{\endSpanners} permet de s'affranchir d'insérer un
3304 @code{\stopTextSpan} pour clôturer un @code{\startTextSpan} ou un
3305 @code{\!} pour terminer un soufflet.
3308 Référence des propriétés internes :
3309 @rinternals{Glissando},
3310 @rinternals{line-spanner-interface},
3311 @rinternals{TextSpanner},
3312 @rinternals{TrillSpanner},
3313 @rinternals{VoiceFollower}.
3316 @node Visibilité des objets
3317 @subsection Visibilité des objets
3318 @translationof Visibility of objects
3320 @cindex objets, visibilité
3321 @cindex grobs, visibilité
3322 @cindex visibilité d'objets
3324 La visibilité des objets de rendu se contrôle de quatre façons
3325 différentes : vous pouvez supprimer leur stencil, les rendre
3326 transparents, les coloriser en blanc ou bien encore forcer leur
3327 propriété @code{break-visibility}. Les trois premières options peuvent
3328 s'appliquer à tous les objets, la dernière étant réservée aux objets
3329 @emph{changeables}. Le Manuel d'initiation contient une introduction à
3330 ces quatre techniques, à la rubrique
3331 @rlearning{Visibilité et couleur des objets}.
3333 LilyPond met en œuvre quelques techniques particulières adaptées à
3334 certains objets ; elles sont couvertes par une rubrique spécifique.
3337 * Suppression des stencils::
3338 * Transparence des objets::
3339 * Blanchiment des objets::
3340 * Utilisation de break-visibility::
3341 * Considérations spécifiques::
3345 @node Suppression des stencils
3346 @unnumberedsubsubsec Suppression des stencils
3347 @translationof Removing the stencil
3349 @cindex stencil, suppression
3351 Tout objet de rendu se voit attribuer une propriété @code{stencil}.
3352 Elle est par défaut définie par la fonction chargée de dessiner cet
3353 objet. Lorsque cette propriété est désactivée de force -- en lui
3354 attribuant la valeur @code{#f} -- aucune fonction ne sera appelée ;
3355 l'objet ne sera donc pas dessiné. Le retour au comportement par défaut
3356 s'opère à l'aide d'un @code{\revert}.
3358 @lilypond[quote,verbatim,relative=1]
3360 \override Score.BarLine.stencil = ##f
3362 \revert Score.BarLine.stencil
3367 @node Transparence des objets
3368 @unnumberedsubsubsec Transparence des objets
3369 @translationof Making objects transparent
3371 @cindex transparent, objet
3373 Tout objet de rendu dispose d'une propriété de transparence, qui est par
3374 défaut définie à @code{#f}. Le fait de l'activer rendra l'objet
3375 transparent tout en préservant la place qu'il occupe.
3377 @lilypond[quote,verbatim,relative=2]
3379 \once \override NoteHead.transparent = ##t
3384 @node Blanchiment des objets
3385 @unnumberedsubsubsec Blanchiment des objets
3386 @translationof Painting objects white
3388 @cindex objets, couleur
3389 @cindex couleur d'objet
3392 @cindex impression, ordre
3393 @cindex surimpression d'objets
3394 @cindex objets, surimpression
3395 @cindex grobs, superposition
3397 Tout objet de rendu dispose d'une propriété couleur, par défaut définie
3398 à @code{black} (noir). Le fait de la forcer à @code{white} (blanc)
3399 rendra l'objet indistinct du fond blanc. Néanmoins, lorsque cet objet
3400 en recouvre d'autres, la couleur de leurs points de jonction dépendra de
3401 l'ordre dans lequel ils sont dessinés, ce qui peut laisser apparaître
3402 un fantôme de l'objet blanchi comme ci-dessous :
3404 @lilypond[quote,verbatim,relative=2]
3405 \override Staff.Clef.color = #white
3409 Cet inconvénient peut être évité en modifiant l'ordre dans lequel les
3410 objets sont dessinés. Chaque objet de rendu dispose d'une propriété
3411 @code{layer} (calque ou niveau) à laquelle est affecté un nombre entier.
3412 Les objets ayant la plus faible valeur sont dessinés en premier, puis
3413 les autres, de telle sorte qu'un objet ayant une valeur plus élevée les
3414 recouvrira. La plupart des objet ont un @code{layer} valorisé
3415 à @code{1} -- quelques uns, dont @code{StaffSymbol} et
3416 @code{BarLine}, ont une valeur à @code{0}. L'ordre d'impression
3417 d'objets ayant une même valeur de @code{layer} est indéterminé.
3419 La clef de l'exemple précédent a par défaut un @code{layer}
3420 à @code{1} ; elle est donc dessinée après les lignes de la
3421 portée -- @code{layer} valorisé par défaut à @code{0} -- et donc
3422 les recouvre. Pour changer cet état de fait, l'objet @code{Clef} doit
3423 avoir un @code{layer} de valeur inférieure, disons @w{@code{-1}}, pour
3424 pouvoir être dessiné avant.
3426 @lilypond[quote,verbatim,relative=2]
3427 \override Staff.Clef.color = #white
3428 \override Staff.Clef.layer = #-1
3433 @node Utilisation de break-visibility
3434 @unnumberedsubsubsec Utilisation de break-visibility
3435 @translationof Using break-visibility
3437 @c TODO Add making other objects breakable
3439 @cindex break-visibility
3441 La plupart des objets de rendu ne sont imprimés qu'une seule fois ;
3442 certains cependant, tels les barres de mesure, clefs, métriques ou
3443 armures, apparaîtront deux fois lors d'un saut de ligne -- une première
3444 fois en fin de ligne, puis à nouveau au début de la ligne suivante. Ces
3445 objets, que l'on peut traiter de @emph{changeables} (@emph{breakable} en
3446 anglais) disposent de la propriété @code{break-visibility} spécialement
3447 chargée de contrôler leur visibilité aux trois endroits où il sont
3448 susceptibles d'apparaître : en début de ligne, en cours de ligne ou
3449 en fin de ligne -- si tant est qu'un changement s'y produise.
3451 Par exemple, la métrique est imprimée par défaut au début de la première
3452 ligne, et nulle part ailleurs. En cas de modification, une nouvelle
3453 métrique sera imprimée à l'endroit du changement. Dans le cas où ce
3454 changement intervient en fin de ligne, la nouvelle métrique s'imprime au
3455 début de la ligne suivante, et une métrique @qq{de précaution} viendra
3456 se placer au bout de la ligne précédente.
3458 Ce comportement est géré par la propriété @code{break-visibility}, dont
3459 vous trouverez une explication à la rubrique
3460 @rlearning{Visibilité et couleur des objets}. Cette propriété est
3461 constituée d'un vecteur de trois booléens qui, dans l'ordre, déterminent
3462 si l'objet sera imprimé à la fin, en cours, et au début d'une ligne --
3463 on pourrait aussi dire avant un saut de ligne, là où il n'y a pas de
3464 saut de ligne, et après un saut de ligne.
3466 Les huit combinaisons possibles sont aussi disponibles sous la forme de
3467 fonctions prédéfinies, regroupées dans le fichier
3468 @file{scm/output-lib.scm}. Le tableau suivant vous les présente ;
3469 les trois dernières colonnes indiquent l'endroit où l'objet sera visible.
3471 @multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t)}} {apres} {apres} {apres}
3472 @headitem Forme @tab Forme @tab Avant @tab Hors @tab Après
3473 @headitem fonctionnelle @tab vectorielle @tab saut @tab saut @tab saut
3475 @item @code{all-visible} @tab @code{'#(#t #t #t)} @tab oui @tab oui @tab oui
3476 @item @code{begin-of-line-visible} @tab @code{'#(#f #f #t)} @tab non @tab non @tab oui
3477 @item @code{center-visible} @tab @code{'#(#f #t #f)} @tab non @tab oui @tab non
3478 @item @code{end-of-line-visible} @tab @code{'#(#t #f #f)} @tab oui @tab non @tab non
3479 @item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)} @tab oui @tab oui @tab non
3480 @item @code{center-invisible} @tab @code{'#(#t #f #t)} @tab oui @tab non @tab oui
3481 @item @code{end-of-line-invisible} @tab @code{'#(#f #t #t)} @tab non @tab oui @tab oui
3482 @item @code{all-invisible} @tab @code{'#(#f #f #f)} @tab non @tab non @tab non
3485 Les réglages par défaut de la propriété @code{break-visibility}
3486 diffèrent selon l'objet de rendu. Le tableau suivant présente, pour la
3487 plupart des objets comportant la propriété @code{break-visibility},
3488 ces réglages par défaut.
3490 @multitable @columnfractions .3 .3 .4
3492 @headitem Objet de rendu @tab Contexte habituel @tab Réglage par défaut
3494 @c omit Ambitus as it appears not to be affected by break-visibility -td
3495 @c @item @code{Ambitus} @tab as specified @tab @code{begin-of-line-visible}
3496 @item @code{BarLine} @tab @code{Score} @tab calculé
3497 @item @code{BarNumber} @tab @code{Score} @tab @code{begin-of-line-visible}
3498 @c omit the following item until it can be explained -td
3499 @c @item @code{BreakAlignGroup} @tab @code{Score} @tab calculé
3500 @item @code{BreathingSign} @tab @code{Voice} @tab @code{begin-of-line-invisible}
3501 @item @code{Clef} @tab @code{Staff} @tab @code{begin-of-line-visible}
3502 @item @code{Custos} @tab @code{Staff} @tab @code{end-of-line-visible}
3503 @item @code{DoublePercentRepeat} @tab @code{Voice} @tab @code{begin-of-line-invisible}
3504 @c omit KeyCancellation until it can be explained -td
3505 @c @item @code{KeyCancellation} @tab ?? @tab @code{begin-of-line-invisible}
3506 @item @code{KeySignature} @tab @code{Staff} @tab @code{begin-of-line-visible}
3507 @c omit LeftEdge until it can be explained -td
3508 @c @item @code{LeftEdge} @tab @code{Score} @tab @code{center-invisible}
3509 @item @code{ClefModifier} @tab @code{Staff} @tab @code{begin-of-line-visible}
3510 @item @code{RehearsalMark} @tab @code{Score} @tab @code{end-of-line-invisible}
3511 @item @code{TimeSignature} @tab @code{Staff} @tab @code{all-visible}
3515 Voici un exemple d'utilisation de la forme vectorielle pour contrôler la
3516 visibilité des barres de mesure :
3518 @lilypond[quote,verbatim,relative=1,ragged-right]
3521 % Remove bar line at the end of the current line
3522 \once \override Score.BarLine.break-visibility = #'#(#f #t #t)
3528 Lors d'un forçage de @code{break-visibility} sous une forme vectorielle,
3529 les trois éléments doivent impérativement être mentionnés. Ces formes
3530 vectorielles ne sont d'ailleurs pas prises en charge par tous les objets
3531 de rendu, et certaines combinaisons peuvent entraîner des erreurs ;
3532 nous citerons entre autres :
3535 @item Une barre de mesure ne peut s'imprimer en début de ligne.
3536 @item Un numéro de mesure ne peut apparaître au début de la première
3537 ligne, à moins d'être différent de 1.
3538 @item Clef -- voir ci-après.
3539 @item Les répétitions en pourcentage sont soit toutes imprimées, soit
3540 aucune. Vous devrez utiliser @code{begin-of-line-invisible} pour les
3541 voir et @code{all-invisible} pour les masquer.
3542 @item Armure -- voir ci-après.
3543 @item Indication d'octaviation -- voir ci-après.
3547 @node Considérations spécifiques
3548 @unnumberedsubsubsec Considérations spécifiques
3549 @translationof Special considerations
3551 @strong{@emph{Visibilité après changement explicite}}
3553 @cindex armure, visibilité après changement explicite
3554 @cindex explicitKeySignatureVisibility
3555 @cindex clef, visibilité après changement explicite
3556 @cindex explicitClefVisibility
3558 La propriété @code{break-visibility} contrôle la visibilité des armures
3559 ou changements de clef en début de ligne uniquement, donc après un saut.
3560 Elle ne produit aucun effet sur la visibilité d'une armure ou d'une clef
3561 après un changement explicite de tonalité ou de clef, ni en cours, ni en
3562 fin de ligne. Dans l'exemple suivant, l'armure est présente même après
3563 le passage en si bémol majeur malgré l'activation de
3564 @code{all-invisible} (@emph{tous invisibles}).
3566 @lilypond[quote,verbatim,relative=1,ragged-right]
3569 % Try to remove all key signatures
3570 \override Staff.KeySignature.break-visibility = #all-invisible
3578 La visibilité lors de ces changements explicites d'armure ou de clef est
3579 géré respectivement par les propriétés
3580 @code{explicitKeySignatureVisibility} et @code{explicitClefVisibility}.
3581 Leur fonctionnement est en tout point identique à celui de la propriété
3582 @code{break-visibility} -- forme vectorielle à trois éléments ou forme
3583 fonctionnelle comme indiqué ci-avant. Toutes deux sont attachées au
3584 contexte @code{Staff} (la portée) et non directement aux objets de
3585 rendu ; elles sont de ce fait introduites par une instruction
3586 @code{\set}. Leur valeur par défaut est de toujours imprimer les objets
3587 -- réglage sur @code{all-visible}. Ces deux propriétés gèrent
3588 uniquement la visibilité des armures et clefs lors d'un changement
3589 explicite, et en dehors d'un début de ligne ; il faudra en pareil
3590 cas forcer la @code{break-visibility} de ces objets pour les supprimer.
3592 @lilypond[quote,verbatim,relative=1,ragged-right]
3595 \set Staff.explicitKeySignatureVisibility = #all-invisible
3596 \override Staff.KeySignature.break-visibility = #all-invisible
3603 @strong{@emph{Visibilité des altérations de précaution}}
3605 L'impression d'altérations de précaution au moment d'un changement
3606 explicite de tonalité sera annulée dès lors que vous aurez désactivé la
3607 propriété @code{printKeyCancellation} du contexte @code{Staff} :
3609 @lilypond[quote,verbatim,relative=1,ragged-right]
3612 \set Staff.explicitKeySignatureVisibility = #all-invisible
3613 \set Staff.printKeyCancellation = ##f
3614 \override Staff.KeySignature.break-visibility = #all-invisible
3621 Avec de tels réglages particuliers, seules les altérations accidentelles
3622 permettront d'indiquer le changement de tonalité.
3624 @c TODO Add visibility of cautionary accidentals before notes
3626 @strong{@emph{Barres de mesure automatiques}}
3628 @cindex automaticBars
3629 @cindex barres de mesure, suppression
3631 La désactivation de la propriété @code{automaticBars}, qui réside dans
3632 le contexte @code{Score}, permet de s'affranchir d'imprimer
3633 automatiquement les barres de mesure ; seules seront imprimées les
3634 barres explicitées à l'aide de la commande @code{\bar}. Néanmoins, et
3635 contrairement à ce qui se passe avec la commande @code{\cadenzaOn}, le
3636 compteur de numéro de mesure continuera de s'incrémenter. Les barres
3637 s'imprimeront à nouveau, au niveau où en est le compteur, dès que la
3638 propriété @code{automaticBars} sera réactivée. Gardez à l'esprit que
3639 les sauts de ligne, lorsque cette propriété est désactivée, ne peuvent
3640 intervenir qu'à l'occasion d'un @code{\bar} explicite.
3644 @strong{@emph{Clefs octaviées}}
3646 @cindex octaviation, visibilité de la clef
3647 @cindex visibilité d'un clef octaviée
3648 @cindex clef, visibilité de l'octaviation
3650 L'indication d'octaviation d'une clef est produite par l'objet de rendu
3651 @code{ClefModifier}. Sa visibilité étant gérée par héritage direct de
3652 l'objet @code{Clef}, nul n'est besoin de forcer un quelconque
3653 @code{break-visibility} au niveau des objets @code{ClefModifier} pour
3654 éliminer une indication d'octaviation lorsque la clef est invisible.
3656 Lors d'un changement explicite de clef, la propriété
3657 @code{explicitClefVisibility} gère à la fois le symbole de la clef et
3658 l'indication d'octaviation qui lui est attachée.
3661 Manuel d'initiation :
3662 @rlearning{Visibilité et couleur des objets}
3665 @node Styles de ligne
3666 @subsection Styles de ligne
3667 @translationof Line styles
3669 Certaines indications portées à l'attention de l'exécutant -- tels
3670 @i{rallentando}, @i{accelerando} et @i{trilles} -- apparaissent sous la
3671 forme d'un texte qui peut s'étendre sur plusieurs mesures à l'aide d'une
3672 ligne parfois pointillée ou ondulée.
3674 En matière de dessin du texte et des lignes, ces indications font appel
3675 aux mêmes routines que le glissando ; leur comportement peut donc
3676 être affiné selon les mêmes préceptes, au moyen de la routine
3677 @code{ly:line-interface::print} qui est tout spécialement chargée de
3678 dessiner les extenseurs. Cette routine détermine l'emplacement exact
3679 des deux points extrêmes de l'extenseur, puis trace une ligne du style
3680 demandé entre ces deux points.
3682 L'exemple ci-dessous indique les différents styles de ligne disponibles,
3683 ainsi que la manière de les spécifier.
3685 @lilypond[relative=2,ragged-right,verbatim,quote]
3687 \once \override Glissando.style = #'dashed-line
3689 \override Glissando.style = #'dotted-line
3691 \override Glissando.style = #'zigzag
3693 \override Glissando.style = #'trill
3697 Les points d'ancrage de l'extension sont calculés à la volée pour chaque
3698 objet graphique, mais rien ne vous empêche de les forcer :
3701 @lilypond[relative=2,ragged-right,verbatim,quote]
3703 \once \override Glissando.bound-details.right.Y = #-2
3707 La valeur de @code{Y} est ainsi fixée à @w{@code{-2}} en ce qui concerne
3708 la borne droite. Il en irait de même pour la borne gauche en spécifiant
3709 @code{left} (gauche) au lieu de @code{right} (droite).
3711 En l'absence de réglage du @code{Y}, celui-ci est calculé à partir de
3712 l'emplacement vertical des points d'attache gauche et droit de
3715 De plus amples informations quant à l'ajustement des extenseurs font
3716 l'objet de la rubrique @ref{Extenseurs et prolongateurs}.
3719 @node Rotation des objets
3720 @subsection Rotation des objets
3721 @translationof Rotating objects
3723 Qu'il s'agisse des objets de rendu ou d'éléments textuels sous forme de
3724 @emph{markup}, vous pouvez les faire pivoter selon vos désirs et à
3725 partir de n'importe quel point. La méthode diffère cependant selon ce
3726 que vous désirez manipuler.
3729 * Rotation des objets de mise en forme::
3730 * Rotation des étiquettes::
3734 @node Rotation des objets de mise en forme
3735 @unnumberedsubsubsec Rotation des objets de mise en forme
3736 @translationof Rotating layout objects
3738 Tout objet de rendu disposant de la @code{grob-interface} est
3739 susceptible de pivoter, grâce à la propriété @code{rotation}. Celle-ci
3740 prend en argument une liste de trois éléments : l'angle de rotation
3741 -- dans le sens inverse des aiguilles d'une montre -- ainsi que les
3742 coordonnées @code{x} et @code{y} du point appartenant à l'objet en
3743 question et à partir duquel doit s'effectuer cette rotation. L'angle
3744 est exprimé en degrés, les coordonnées en espaces de portée.
3746 L'angle et les coordonnées ne peuvent se déterminer que par tâtonnement.
3748 @cindex soufflet penché
3750 Il existe assez peu de situation où faire pivoter un objet de mise en
3751 forme soit réellement opportun ; en voici une :
3753 @lilypond[quote,verbatim,relative=1]
3755 \override Hairpin.rotation = #'(20 -1 0)
3760 @node Rotation des étiquettes
3761 @unnumberedsubsubsec Rotation des étiquettes
3762 @translationof Rotating markup
3764 Tout texte faisant l'objet d'un @emph{markup} peut pivoter selon
3765 n'importe quel angle, à l'aide de la commande @code{\rotate}. Celle-ci
3766 prend deux arguments : l'angle de rotation exprimé en degrés --
3767 dans le sens inverse des aiguilles d'une montre -- et le texte à
3768 basculer. Il ne s'agit pas ici de faire pivoter les extrémités du
3769 texte ; celles-ci récupéreront leurs coordonnées x et y du@emph{markup}
3770 pivoté. Dans l'exemple ci-dessous, la propriété
3771 @code{outside-staff-priority} à été fixée à @code{#f} afin de désactiver
3772 l'évitement automatique des collisions qui pourrait repousser certains
3776 @lilypond[quote,verbatim,relative=1]
3777 \override TextScript.outside-staff-priority = ##f
3778 g4^\markup { \rotate #30 "un sol" }
3779 b^\markup { \rotate #30 "un si" }
3780 des^\markup { \rotate #30 "un ré bémol" }
3781 fis^\markup { \rotate #30 "un fa dièse" }
3785 @node Retouches avancées
3786 @section Retouches avancées
3787 @translationof Advanced tweaks
3789 Nous allons voir, au fil des paragraphes qui suivent, différentes
3790 approches permettant de fignoler l'apparence d'une partition.
3793 * Alignement des objets::
3794 * Regroupement vertical d'objets graphiques::
3795 * Modification des stencils::
3796 * Modification de l'allure des éléments::
3797 * Conteneurs requalifiants::
3801 Manuel d'initiation :
3802 @rlearning{Autres sources de documentation},
3803 @rlearning{Retouche de partition}.
3805 Manuel de notation :
3806 @ref{En quoi consiste la référence des propriétés internes},
3807 @ref{Modification de propriétés}.
3809 Manuel d'extension :
3810 @rextend{Interfaces pour programmeurs}.
3812 Fichiers d'initialisation :
3813 @file{scm/define-grobs.scm}.
3816 @rlsrnamed{Tweaks and overrides,Retouches}.
3818 Référence des propriétés internes :
3819 @rinternals{All layout objects}.
3822 @node Alignement des objets
3823 @subsection Alignement des objets
3824 @translationof Aligning objects
3826 Les objets graphiques disposant des interfaces
3827 @code{self-alignment-interface} ou @code{side-position-interface}
3828 peuvent s'aligner par rapport à un objet précédemment positionné, ce de
3829 différentes manières. Ces objets sont référencés aux rubriques
3830 @rinternals{self-alignment-interface} et
3831 @rinternals{side-position-interface}.
3833 Tous les objets graphiques ont un point de référence, une étendue
3834 horizontale et une étendue verticale. L'étendue horizontale est
3835 représentée par une paire de nombres indiquant l'écart entre le point de
3836 référence et les bords gauche et droit -- l'écart à gauche étant
3837 négatif. L'étendue verticale est représentée par une paire de nombres
3838 indiquant l'écart entre le point de référence et les bords inférieur et
3839 supérieur -- l'écart vers le bas étant négatif.
3841 La position d'un objet sur la portée est donnée par la valeur des
3842 propriétés @code{X-offset} et @code{Y-offset}. La valeur de
3843 @code{X-offset} indique l'écart en abscisse (coordonnée X) par rapport
3844 au point de référence de l'objet parent ; la valeur de
3845 @code{Y-offset} indique l'écart par rapport à la ligne médiane de la
3846 portée. Les valeurs de @code{X-offset} et @code{Y-offset} peuvent être
3847 fournies arbitrairement, ou bien être calculé par des procédures
3848 spécifiques qui détermineront l'alignement par rapport à l'objet parent.
3850 @warning{Nombre d'objets sont affectés par des considérations
3851 spécifiques en matière de positionnement ; jouer sur les valeurs de
3852 @code{X-offset} ou @code{Y-offset} se révélera inefficace en pareil
3853 cas, même si l'objet dispose de la @code{self-alignment-interface}.
3854 Fixer arbitrairement les propriétés @code{X-offset} ou @code{Y-offset}
3855 annihilera alors les effets de la propriété @code{self-alignment}
3858 Par exemple, une altération peut se repositionner verticalement grâce à
3859 son @code{Y-offset} ; toute modification de son @code{X-offset}
3860 restera par contre sans effet.
3862 Les indications de repère s'alignent sur des objets de rupture -- tels
3863 les barres de mesure, clefs, métriques et armures. Certaines propriétés
3864 spécifiques -- dépendant de la @code{break-aligned-interface} --
3865 permettent de gérer le positionnement des indications de repère sur ces
3869 * Détermination directe de X-offset et Y-offset::
3870 * Utilisation de side-position-interface::
3871 * Utilisation de self-alignment-interface::
3872 * Utilisation de break-aligned-interface::
3876 Manuel de notation :
3877 @ref{Utilisation de break-aligned-interface}.
3879 Manuel d'extension :
3880 @rextend{Fonctions de rappel}.
3883 @node Détermination directe de X-offset et Y-offset
3884 @unnumberedsubsubsec Détermination directe de @code{X-offset} et @code{Y-offset}
3885 @translationof Setting X-offset and Y-offset directly
3887 Vous pouvez fournir, pour de nombreux objets, des valeurs numériques aux
3888 propriétés @code{X-offset} et @code{Y-offset}. Voici par exemple une
3889 note avec indication du doigté tout d'abord avec un positionnement par
3890 défaut, puis repositionnement par modification successive du
3891 @code{X-offset} et du @code{Y-offset}.
3893 @lilypond[verbatim,quote,relative=2]
3900 -\tweak X-offset #-1
3908 @node Utilisation de side-position-interface
3909 @unnumberedsubsubsec Utilisation de @code{side-position-interface}
3910 @translationof Using the side-position-interface
3912 Un objet disposant de la @code{side-position-interface} peut se voir
3913 accolé à son voisin de telle sorte que les bords des deux objets se
3914 touchent. Un tel objet peut se positionner au-dessus, en dessous, à
3915 droite ou à gauche de son parent. Ce parent ne saurait être
3916 stipulé ; il est déterminé par l'ordre d'apparition des éléments
3917 dans le flux des saisies. La plupart de ces objets ont pour parent une
3920 Les valeurs des propriétés @code{side-axis} et @code{direction}
3921 détermineront l'endroit où viendra se positionner l'objet, selon les
3922 préceptes suivants :
3924 @c TODO add an example of each to the table
3926 @multitable @columnfractions .3 .3 .3
3927 @headitem Propriété @tab Propriété @tab Positionnement
3928 @headitem @code{side-axis} @tab @code{direction} @tab
3930 @item @code{0} @tab @code{-1} @tab gauche
3931 @item @code{0} @tab @code{1} @tab droite
3932 @item @code{1} @tab @code{-1} @tab en dessous
3933 @item @code{1} @tab @code{1} @tab au-dessus
3937 Pour un @code{side-axis} à @code{0}, le @code{X-offset} devrait engager
3938 la procédure @code{ly:side-position-interface::x-aligned-side}.
3939 Celle-ci renverra la valeur adéquate de @code{X-offset} permettant
3940 d'accoler l'objet sur la droite ou sur la gauche de son parent, selon la
3941 valeur de @code{direction}.
3943 Pour un @code{side-axis} à @code{1}, le @code{Y-offset} devrait engager
3944 la procédure @code{ly:side-position-interface::y-aligned-side}.
3945 Celle-ci renverra la valeur adéquate de @code{Y-offset} permettant
3946 d'accoler l'objet au-dessus ou en dessous de son parent, selon la
3947 valeur de @code{direction}.
3949 @c TODO Add examples
3952 @node Utilisation de self-alignment-interface
3953 @unnumberedsubsubsec Utilisation de @code{self-alignment-interface}
3954 @translationof Using the self-alignment-interface
3956 @subsubsubheading Réalignement d'objets horizontalement
3958 L'alignement horizontal d'un objet disposant de la
3959 @code{self-alignment-interface} dépend de la valeur de sa propriété
3960 @code{self-alignment-X}, si tant est que la propriété @code{X-offset} de
3961 cet objet engage la procédure
3962 @code{ly:self-alignment-interface::x-aligned-on-self}.
3963 La propriété @code{self-alignment-X} peut contenir un nombre réel,
3964 l'unité de base étant la moitié de l'étendue horizontale de l'objet.
3965 Une valeur négative décalera l'objet vers la droite, une valeur positive
3966 vers la gauche. La valeur @code{0} permet de centrer l'objet sur
3967 le point de référence de son parent. Une valeur de @w{@code{-1}}
3968 alignera le bord gauche de l'objet sur le point de référence de son
3969 parent, et une valeur de @code{1} alignera le bord droit de l'objet
3970 sur le point de référence de son parent. Les valeurs symboliques
3971 @code{LEFT}, @code{CENTER} et @code{RIGHT} correspondent respectivement
3972 à @w{@code{-1}}, @code{0} et @code{1}.
3974 En règle générale, la valeur de @code{self-alignment-X} se modifie à
3975 l'aide d'une commande @code{\override}. Le recours à la commande
3976 @code{\tweak} permet de traiter séparément plusieurs annotations
3977 affectées à une même note :
3979 @lilypond[quote,verbatim,relative=1]
3981 -\tweak self-alignment-X #-1
3983 -\tweak self-alignment-X #0
3985 -\tweak self-alignment-X #RIGHT
3987 -\tweak self-alignment-X #-2.5
3988 ^"aligned further to the right"
3992 @subsubsubheading Réalignement d'objets verticalement
3994 L'alignement vertical suit le même principe : la propriété
3995 @code{Y-offset} doit alors engager la procédure
3996 @code{ly:self-alignment-interface::y-aligned-on-self}. Toutefois, il
3997 arrive bien souvent que d'autres mécanismes interviennent dans
3998 l'alignement vertical. La valeur de @code{Y-offset} n'étant que
3999 l'une des variables qui seront prises en compte, l'ajustement pour
4000 certains objets peut se révéler fastidieux. L'unité de base est
4001 relativement réduite, puisqu'elle est de la moitié de l'étendue
4002 verticale de l'objet ; le nombre à fournir en argument pourrait
4003 donc être relativement élevé. Une valeur de @w{@code{-1}}
4004 alignera le bord inférieur de l'objet sur le point de référence de son
4005 parent, et une valeur de @code{1} alignera le bord supérieur de
4006 l'objet sur le point de référence de son parent. La
4007 valeur @code{0} permet de centrer l'objet sur le point de référence
4008 de son parent. Les valeurs symboliques @code{DOWN}, @code{CENTER} et
4009 @code{UP} correspondent respectivement à @w{@code{-1}}, @code{0}
4013 @subsubsubheading Réalignement d'objets sur les deux axes
4015 Définir à la fois @code{X-offset} et @code{Y-offset} permet de réaligner
4016 un objet sur les deux axes.
4018 Dans l'exemple ci-dessous, nous ajustons l'indication de doigté de telle
4019 sorte qu'elle se place au plus près de la tête de note.
4021 @lilypond[quote,verbatim,relative=2]
4023 -\tweak self-alignment-X #0.5 % move horizontally left
4024 -\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
4025 -\tweak self-alignment-Y #-1 % move vertically up
4031 @unnumberedsubsubsec Utilisation de @code{aligned-on-parent}
4033 @c Cannot document as they do not seem to operate consistently on all objects -td
4034 @c TODO investigate further
4036 The @code{aligned-on-parent} procedures are used in the same way
4037 as the @code{aligned-on-self} procedures, they difference being
4038 that they permit an object to be aligned with the @emph{edges} of
4039 the parent rather than the parent's reference point. The following
4040 example shows the difference:
4044 @lilypond[verbatim,quote]
4051 @c unnumberedsubsubsec Utilisation de @code{centered-on-parent}
4053 @c Cannot document as they do not seem to operate consistently on all objects -td
4054 @c TODO investigate further
4058 @c TODO The align-interface, BassFigureAlignment and VerticalAlignment
4061 @node Utilisation de break-aligned-interface
4062 @unnumberedsubsubsec Utilisation de @code{break-aligned-interface}
4063 @translationof Using the break-alignable-interface
4065 @cindex alignement sur un objet
4066 @cindex break-align-symbols
4068 Indications de repère et numéros de mesure peuvent s'aligner sur des
4069 objets de notation autres qu'une barre de mesure. Parmi ces objets,
4070 nous citerons @code{ambitus}, @code{breathing-sign}, @code{clef},
4071 @code{custos}, @code{staff-bar}, @code{left-edge},
4072 @code{key-cancellation}, @code{key-signature}, et @code{time-signature}.
4074 Chaque objet possède son propre point de référence par défaut, sur
4075 lequel viendra s'aligner les indications de repère :
4077 @lilypond[verbatim,quote,relative=1]
4078 % The rehearsal mark will be aligned to right edge of the Clef
4079 \override Score.RehearsalMark.break-align-symbols = #'(clef)
4084 % The rehearsal mark will be centered above the Time Signature
4085 \override Score.RehearsalMark.break-align-symbols = #'(time-signature)
4091 % The rehearsal mark will be centered above the Breath Mark
4092 \override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
4101 Les différents objets sur lesquels l'alignement pourrait intervenir
4102 seront regroupés dans une liste. Si l'un des objets est invisible à
4103 l'endroit voulu, en raison d'un réglage de @code{break-visibility} ou
4104 bien par forçage de la visibilité des armures et clefs, le repère ou le
4105 numéro de mesure viendra s'aligner sur le premier élément de cette liste
4106 qui soit visible. Dans le cas où aucun objet de la liste n'est visible,
4107 l'alignement se fera sur la barre de mesure ou, dans le cas où la barre
4108 de mesure est invisible, à l'endroit même où la barre prendrait place.
4110 @lilypond[verbatim,quote,relative=1]
4111 % The rehearsal mark will be aligned to the right edge of the Key Signature
4112 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
4117 % The rehearsal mark will be aligned to the right edge of the Clef
4118 \set Staff.explicitKeySignatureVisibility = #all-invisible
4119 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
4124 % The rehearsal mark will be centered above the Bar Line
4125 \set Staff.explicitKeySignatureVisibility = #all-invisible
4126 \set Staff.explicitClefVisibility = #all-invisible
4127 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
4134 L'alignement d'un repère sur un objet de notation peut se modifier,
4135 comme l'illustre l'exemple suivant. Toutefois, si la partition comporte
4136 plusieurs portées, ce réglage devra apparaître dans chacune des portées.
4138 @lilypond[verbatim,quote,relative=1]
4139 % The RehearsalMark will be aligned with the right edge of the Key Signature
4140 \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
4146 % The RehearsalMark will be centered above the Key Signature
4147 \once \override Score.KeySignature.break-align-anchor-alignment = #CENTER
4151 % The RehearsalMark will be aligned with the left edge of the Key Signature
4152 \once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
4158 Le bord gauche d'un repère peut se décaler arbitrairement sur la gauche
4159 ou la droite. La valeur est exprimée en espaces de portée.
4161 @lilypond[verbatim,quote,relative=1]
4162 % The RehearsalMark will be aligned with the left edge of the Key Signature
4163 % and then shifted right by 3.5 staff-spaces
4164 \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
4165 \once \override Score.KeySignature.break-align-anchor = #3.5
4169 % The RehearsalMark will be aligned with the left edge of the Key Signature
4170 % and then shifted left by 2 staff-spaces
4171 \once \override Score.KeySignature.break-align-anchor = #-2
4178 @node Regroupement vertical d'objets graphiques
4179 @subsection Regroupement vertical d'objets graphiques
4180 @translationof Vertical grouping of grobs
4182 @c TODO Expand this section
4184 Les objets @code{VerticalAlignment} et @code{VerticalAxisGroup}
4185 travaillent de concert. Comme leur nom anglais l'indiquent,
4186 @code{VerticalAxisGroup} regroupe différents objets tels que les portées
4187 (@code{Staff}), les paroles (@code{Lyrics}) et ainsi de suite ;
4188 puis @code{VerticalAlignment} synchronise verticalement ces différents
4189 groupes. En général, il n'y a qu'un seul @code{VerticalAlignment} pour
4190 l'ensemble de la partition, mais chaque contexte @code{Staff},
4191 @code{Lyrics}, etc. possède son propre @code{VerticalAxisGroup}.
4194 @node Modification des stencils
4195 @subsection Modification des stencils
4196 @translationof Modifying stencils
4198 Tout objet de rendu dispose d'une propriété @code{stencil} attachée à la
4199 @code{grob-interface}. En règle générale, cette propriété référence
4200 par défaut une fonction spécifique à l'objet et taillée sur mesure pour
4201 fournir le symbole qui va le représenter dans l'output. Par exemple,
4202 le réglage standard de la propriété @code{stencil} de l'objet
4203 @code{MultiMeasureRest} est @code{ly:multi-measure-rest::print}.
4205 Le symbole standard d'un objet quel qu'il soit peut être remplacé à
4206 partir du moment où la propriété @code{stencil} référence une procédure
4207 différente et écrite à cet effet. Ceci requiert une bonne maîtrise du
4208 fonctionnement interne de LilyPond, mais est grandement facilité dans
4209 bien des cas et permet d'obtenir le résultat escompté.
4211 En effet, rien ne nous interdit, à partir de la propriété
4212 @code{stencil}, d'appeler la procédure qui génère du texte,
4213 @code{ly:text-interface::print} en l'occurrence, et d'adjoindre à l'objet
4214 une propriété @code{text} qui contiendra, sous forme de @emph{markup},
4215 le symbole à dessein. Grâce à l'extrême flexibilité des @emph{markups},
4216 vous pourrez parvenir à bien des choses -- voir à ce sujet
4217 @ref{Éléments graphiques dans du texte formaté}.
4219 C'est la technique employée ici, où l'une des têtes de note est
4220 remplacée par une croix inscrite dans un cercle :
4222 @lilypond[verbatim,quote]
4224 \once \override NoteHead.stencil = #ly:text-interface::print
4225 \once \override NoteHead.text = \markup {
4227 \halign #-0.7 \draw-circle #0.85 #0.2 ##f
4228 \musicglyph #"noteheads.s2cross"
4236 Tous les glyphes de la fonte Feta sont accessibles à l'aide de la
4237 commande de @emph{markup} @code{\musicglyph} -- voir
4238 @ref{La fonte Feta}.
4240 @c TODO Add inserting eps files or ref to later
4242 @c TODO Add inserting Postscript or ref to later
4245 Manuel de notation :
4246 @ref{Text markup commands},
4247 @ref{Éléments graphiques dans du texte formaté},
4248 @ref{La fonte Feta},
4249 @ref{Mise en forme du texte}.
4252 @node Modification de l'allure des éléments
4253 @subsection Modification de l'allure des éléments
4254 @translationof Modifying shapes
4257 * Modification des liaisons::
4261 @node Modification des liaisons
4262 @unnumberedsubsubsec Modification des liaisons
4263 @translationof Modifying ties and slurs
4265 @cindex liaison, modification
4266 @cindex Bézier, points de contrôle d'une courbe
4267 @cindex points de contrôle, courbe de Bézier
4269 Les liaisons, qu'elles soient de prolongation (@code{Tie}),
4270 d'articulation (@code{Slur}), de phrasé (@code{PhrasingSlur}), de
4271 laisser-vibrer (@code{LaissezVibrerTie} ou de reprise
4272 (@code{RepeatTie}), sont dessinées sous la forme de courbes de
4273 Bézier de degré trois. Lorsque l'aspect de la liaison
4274 automatiquement calculé n'est pas satisfaisant, il peut être
4275 modifié manuellement de deux manières différentes :
4279 en spécifiant l'ajustement qui doit être apporté aux points de
4280 contrôle de la courbe calculée automatiquement, ou
4282 en fournissant explicitement les quatre points de contrôle qui
4283 permettront de définir cette courbe.
4286 Ces deux méthodes sont expliquées ci-dessous. La première
4287 convient mieux dans le cas d'une légère adaptation de la courbe ;
4288 la seconde sera plus efficace lorsqu'il s'agira de créer une courbe
4289 sur une seule et unique note.
4291 @subsubsubheading Courbes de Bézier cubiques
4292 @c VO Cubic Bézier curves
4294 Quatre points définissent une courbe de Bézier cubique. Les premier et
4295 quatrième points sont les points de départ et d'arrivée de la
4296 courbe ; les deux autres points de contrôle -- P1 et P2 -- en
4297 détermineront l'allure. La courbe se trace en partant du point P0, en
4298 se dirigeant vers P1 et en arrivant au point P3 selon la direction
4299 @w{P2-P3}. La courbe est à l'intérieur de l'enveloppe convexe des
4300 points de contrôle. Tout déplacement (translation, rotation,
4301 échelonnement) des points de contrôle sera répercuté sur le dessin
4305 @subsubsubheading Spécification de l'ajustement des points de contrôle
4306 @c VO Specifying displacements from current control points
4308 Voici par exemple une liaison de prolongation dont l'allure n'est pas
4309 des plus heureuses, même en optant pour un @code{\tieDown}.
4311 @cindex galbe des liaisons
4314 @lilypond[verbatim,quote,relative=1]
4318 { r4 <g c,> <g c,> <g c,> }
4322 L'ajustement des points de contrôle de cette liaison de tenue à
4323 l'aide de @code{\shape} permet d'éviter les collisions.
4325 L'instruction @code{\shape} obéit à la syntaxe
4328 [-]@code{\shape} @var{déplacements} @var{élément}
4331 Ceci aura pour effet de repositionner les points de contrôle de
4332 @var{élément} des différents montants fournis par
4333 @var{déplacements}. L'argument @var{déplacements} est constitué
4334 d'une liste de paires de nombres ou bien d'une liste de telles
4335 listes. Chacun des membres de l'une des paires indique
4336 l'ajustement de la coordonnée d'un point de contrôle. Lorsque
4337 @var{élément} est textuel, il en résulte une dérogation
4338 particulière appliquée au type d'objet considéré, alors que dans
4339 le cas d'une expression musicale sera appliqué un affinage
4342 En d'autres termes, la fonction @code{\shape} se comporte soit
4343 comme un @code{\once \override}, soit comme un @code{\tweak} selon
4344 que l'argument @var{élément} est un nom d'objet -- tel « Slur »
4345 -- ou une expression musicale tel un « ( ». L'argument
4346 @var{déplacements} spécifie les ajustements à apporter aux quatre
4347 points de contrôle, sous la forme d'une liste de paires
4348 @w{@code{(dx . dy)}} dont les valeurs sont exprimées en espace de
4349 portée ; on utilisera une liste de listes de paires dans le cas où
4350 la courbe comporte plusieurs segments.
4352 La fonction sera précédée d'un tiret si et seulement si elle doit
4353 s'appliquer sous forme de @code{\tweak}.
4355 Pour l'exemple qui nous occupe, l'adaptation sous forme
4356 dérogatoire -- recours à @code{\once\override} -- de la fonction
4357 @code{\shape}, nous pouvons remonter la liaison d'un demi espace
4360 @lilypond[verbatim,quote,relative=1]
4363 \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
4367 { r4 <g c,> <g c,> <g c,> }
4371 La liaison est maintenant mieux positionnée ; mais sa partie
4372 centrale pourrait être un peu plus relevée, en procédant comme
4373 ci-dessous, cette fois en utilisant la formulation d'affinage
4374 -- la forme @code{\tweak} :
4376 @lilypond[verbatim,quote,relative=1]
4379 e1-\shape #'((0 . 0.5) (0 . 1) (0 . 1) (0 . 0.5)) ~ e
4382 { r4 <g c,> <g c,> <g c,> }
4386 L'adaptation du positionnement horizontal des points de contrôle
4387 se réalise de la même manière, ce qui permet de gérer le galbe de
4388 deux courbes débutant au même instant musical :
4390 @lilypond[verbatim,quote,ragged-right,relative=2]
4392 \shape #'((0.7 . -0.4) (0.5 . -0.4) (0.3 . -0.3) (0 . -0.2)) Slur
4393 \shape #'((0 . 0) (0 . 0.5) (0 . 0.5) (0 . 0)) PhrasingSlur
4397 La fonction @code{\shape} permet aussi d'adapter les points de
4398 contrôle d'une courbe qui se prolonge après un saut de ligne.
4399 Chaque portion de la courbe peut se voir appliquer sa propre liste
4400 d'ajustements. Lorsque l'un des segments ne nécessite pas de
4401 retouche, il suffit de lui fournir une liste vide. Dans l'exemple
4402 suivant, le saut de ligne laisse à croire qu'il y a non pas une
4403 seule mais deux liaisons :
4405 @lilypond[verbatim,quote,ragged-right,relative=1]
4411 Regalber les deux moitiés de la liaison rend plus évident le fait
4412 qu'elle d'étend par delà le saut de ligne :
4414 @lilypond[verbatim,quote,ragged-right,relative=1]
4415 % () may be used as a shorthand for ((0 . 0) (0 . 0) (0 . 0) (0 . 0))
4416 % if any of the segments does not need to be changed
4418 (( 0 . 0) (0 . 0) (0 . 0) (0 . 1))
4419 ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
4426 La présence d'une courbe en S requiert obligatoirement d'ajuster
4427 manuellement les points de contrôle -- LilyPond n'optera jamais
4428 automatiquement pour un tel galbe.
4430 @lilypond[verbatim,quote,relative=2]
4431 c8( e b-> f d' a e-> g)
4432 \shape #'((0 . -1) (5.5 . -0.5) (-5.5 . -10.5) (0 . -5.5)) PhrasingSlur
4433 c8\( e b-> f d' a e-> g\)
4436 @subsubsubheading Déclaration explicite des points de contrôle
4437 @c VO Specifying control points explicitly
4439 Les coordonnées des points de contrôle sont données en unités d'espace
4440 de portée. L'abscisse est relative au point de référence de la note de
4441 départ de la liaison ; l'ordonnée est relative à la ligne médiane
4442 de la portée. Les différentes coordonnées sont entrées sous la forme
4443 d'une liste de quatre paires de nombres décimaux (ou nombres réels).
4444 L'une des manières de procéder consiste à tout d'abord estimer les
4445 coordonnées des deux extrémités puis, par tâtonnement, déterminer les
4446 deux points intermédiaires. Gardez à l'esprit que ces valeurs
4447 pourront devoir être revues si la musique ou sa mise en forme sont
4450 L'une des situation où spécifier explicitement les points de
4451 contrôle se révèle être tout à fait appropriée est lorsqu'ils se
4452 réfèrent à une seul et unique note. L'exemple suivant illustre
4453 l'un des moyens d'indiquer une liaison qui se prolonge sur les
4454 alternatives d'une répétition.
4456 @lilypond[verbatim,quote,relative=2]
4458 \repeat volta 3 { c4 d( e f }
4463 % create a slur and move it to a new position
4464 % the <> is just an empty chord to carry the slur termination
4465 -\tweak control-points #'((-2 . 3.8) (-1 . 3.9) (0 . 4) (1 . 3.4)) ( <> )
4470 % create a slur and move it to a new position
4471 -\tweak control-points #'((-2 . 3) (-1 . 3.1) (0 . 3.2) (1 . 2.4)) ( <> )
4478 Lorsque plusieurs liaisons, quelle qu'en soit la nature, commencent au
4479 même moment, jouer sur la propriété @code{control-points} est
4480 impossible, et la commande @code{\tweak} inefficace. Vous pouvez
4481 néanmoins influer sur la propriété @code{tie-configuration} de l'objet
4482 @code{TieColumn} pour déterminer la ligne de départ et l'orientation.
4485 Référence des propriétés internes :
4486 @rinternals{TieColumn}.
4489 @node Conteneurs requalifiants
4490 @subsection Conteneurs requalifiants
4491 @translationof Unpure-pure containers
4493 @cindex Scheme, pure containers
4494 @cindex Scheme, unpure containers
4495 @cindex pure containers, Scheme
4496 @cindex unpure containers, Scheme
4497 @cindex espacement horizontal, affinage
4499 Les conteneurs requalifiants permettent de faciliter le calcul des
4500 espacements en cas de modification du @emph{Y-axis} -- plus
4501 particulièrement les composantes @code{Y-offset} et @code{Y-extent} -- à
4502 l'aide d'une fonction scheme en lieu et place de valeurs.
4504 L'envergure verticale (@code{Y-extent}) de certains objets dépend de la
4505 propriété @code{stencil} ; jouer sur leur stencil requiert alors une
4506 intervention supplémentaire au niveau du @code{Y-extent} à l'aide d'un
4507 conteneur transitoire. Lorsqu'une fonction affecte un @code{Y-offset} ou
4508 un @code{Y-extent}, cela déclenche la détermination des sauts de ligne
4509 de manière anticipée dans la séquence des traitements. Il en résulte
4510 que cette opération n'est en fait pas exécutée ; elle renvoie
4511 habituellement @code{0} ou @code{'(0 . 0)}, ce qui peut engendrer des
4512 collisions. Une fonction @qq{pure} évitera d'avorter la construction
4513 des propriétés ou objets, qui de ce fait verront leurs arguments liés à
4514 la verticalité (@code{Y-axis}) correctement évalués.
4516 Il existe actuellement une trentaine de fonctions que l'on peut
4517 qualifier de @qq{pures}. Le recours à un conteneur transitoire permet
4518 de requalifier une fonction de telle sorte qu'elle soit reconnue comme
4519 @qq{pure} et soit donc évaluée @strong{avant} détermination des sauts de
4520 ligne -- l'espacement horizontal sera de fait ajusté en temps et en heure.
4521 La fonction @qq{impure} sera ensuite évaluée @strong{après} le
4522 positionnement des sauts de ligne.
4524 @warning{Il n'est pas toujours facile d'avoir l'assurance qu'une
4525 fonction soit qualifiée de @qq{pure} ; aussi nous vous recommandons
4526 d'éviter d'utiliser les objets @code{Beam} or @code{VerticalAlignment}
4527 lorsque vous désirez en créer une.}
4529 Un conteneur requalifiant se construit selon la syntaxe
4531 @code{(ly:make-unpure-pure-container f0 f1)}
4533 où @code{f0} est une fonction prenant @var{n} arguments (@var{n_>=_1}),
4534 le premier devant être l'objet en question ; il s'agit de la
4535 fonction dont le résultat sera réutilisé. @var{f1} est la fonction qui
4536 sera qualifiée de @qq{pure}. Elle prend @var{n_+_2} arguments, le
4537 premier devant être lui aussi l'objet en question, et les second et
4538 troisième étant respectivement les @qq{point de départ} (@var{start}) et
4539 @qq{point d'arrivée} (@var{end}).
4541 @var{start} et @var{end} sont dans tous les cas des valeurs fictives qui
4542 trouveront leur utilité dans le cas d'objets de type @code{Spanner},
4543 tels les soufflets (@code{Hairpin}) ou barres de ligature (@code{Beam}),
4544 en retournant les différentes estimations de hauteur basées sur leurs
4545 début et fin d'extension.
4547 Viennent ensuite les autres arguments de la fonction initiale @code{f0}
4548 -- autrement dit aucun si @var{n_=_1}.
4550 Les résultats de la deuxième fonction (@code{f1}) permettent une
4551 approximation des valeurs qui seront ensuite utilisées par la fonction
4552 initiale aux fins d'ajustement lors des phases ultérieures d'espacement.
4554 @lilypond[verbatim,quote,ragged-right]
4555 #(define (square-line-circle-space grob)
4556 (let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
4557 (notename (ly:pitch-notename pitch)))
4558 (if (= 0 (modulo notename 2))
4559 (make-circle-stencil 0.5 0.0 #t)
4560 (make-filled-box-stencil '(0 . 1.0)
4563 squareLineCircleSpace = {
4564 \override NoteHead.stencil = #square-line-circle-space
4567 smartSquareLineCircleSpace = {
4568 \squareLineCircleSpace
4569 \override NoteHead.Y-extent =
4570 #(ly:make-unpure-pure-container
4571 ly:grob::stencil-height
4572 (lambda (grob start end) (ly:grob::stencil-height grob)))
4575 \new Voice \with { \remove "Stem_engraver" }
4577 \squareLineCircleSpace
4579 \smartSquareLineCircleSpace
4584 La première mesure de l'exemple ci-dessus ne fait pas appel à un
4585 conteneur requalifiant ; le moteur d'espacement n'a donc aucune
4586 connaissance de la largeur des têtes de note et ne peut empêcher
4587 qu'elles chevauchent les altérations. Dans la deuxième mesure, par
4588 contre, le recours à un conteneur requalifiant informe le moteur
4589 d'espacement de la largeur des têtes de note ; les collisions sont
4590 alors évitées du fait de l'espace réservé à chacune des têtes.
4592 Lorsqu'il s'agit de calculs simples, les fonctions, tant pour la partie
4593 @qq{pure} que pour la partie @qq{impure}, peuvent être identiques au
4594 détail près du nombre d'arguments utilisés ou du domaine d'intervention.
4596 @warning{Le fait de qualifier une fonction de @qq{pure} alors qu'elle ne
4597 l'est pas peut générer des résultats imprévisibles.}
4600 @node Utilisation de fonctions musicales
4601 @section Utilisation de fonctions musicales
4602 @translationof Using music functions
4604 @c TODO -- add @seealso, etc. to these subsections
4606 Une adaptation ou un affinage qui devient récurrent parce que doit
4607 s'appliquer à différentes expressions musicales peut faire l'objet d'une
4608 @emph{fonction musicale}. Nous ne traiterons ici que des fonctions de
4609 @emph{substitution}, dont le but est de substituer une variable en un
4610 bout de code LilyPond. D'autres fonctions, plus complexes, sont
4611 abordées au chapitre @rextend{Fonctions musicales}.
4614 * Syntaxe d'une fonction de substitution::
4615 * Exemples de fonction de substitution::
4619 @node Syntaxe d'une fonction de substitution
4620 @subsection Syntaxe d'une fonction de substitution
4621 @translationof Substitution function syntax
4623 La rédaction d'une fonction chargée de substituer du code LilyPond à une
4624 variable est chose relativement aisée. Une telle fonction est de la
4629 #(define-music-function
4630 (parser location @var{arg1} @var{arg2} @dots{})
4631 (@var{type1?} @var{type2?} @dots{})
4633 @var{@dots{}musique@dots{}}
4640 @multitable @columnfractions .33 .66
4641 @item @code{@var{argN}}
4642 @tab @var{n}ième argument.
4644 @item @code{@var{typeN?}}
4645 @tab un @emph{type de prédicat} Scheme pour lequel @code{@var{argN}}
4646 doit renvoyer @code{#t}.
4648 @item @code{@var{@dots{}musique@dots{}}}
4649 @tab du code LilyPond tout ce qu'il y a de plus ordinaire, avec des
4650 @code{$} (là où seule une construction LilyPond est autorisée) et des
4651 @code{#} (lorsqu'il s'agit d'une valeur en Scheme, d'un argument de
4652 fonction musicale ou de musique faisant partie d'une liste) pour
4653 référencer les arguments (par ex. @samp{#arg1}).
4656 Les arguments @code{parser} et @code{location} sont obligatoires ;
4657 ils sont utilisés dans certaines situations évoluées, comme indiqué dans
4658 le manuel d'extension des fonctionnalités à au chapitre
4659 @rextend{Fonctions musicales}. Assurez-vous bien de ne pas les omettre
4660 dans vos fonctions de substitution.
4662 La liste des types de prédicat est elle aussi obligatoire. Voici
4663 quelques uns des types de prédicat les plus utilisés dans les fonctions
4668 cheap-list? @emph{(au lieu de }@qq{list?}@emph{, pour accélérer le traitement)}
4680 Une liste plus fournie est disponible à l'annexe
4681 @ref{Types de prédicats prédéfinis}. Vous pouvez par ailleurs définir
4682 vos propres types de prédicat.
4685 Manuel de notation :
4686 @ref{Types de prédicats prédéfinis}.
4688 Manuel d'extension :
4689 @rextend{Fonctions musicales}.
4691 Fichiers d'initialisation :
4692 @file{lily/music-scheme.cc},
4694 @file{scm/lily.scm}.
4697 @node Exemples de fonction de substitution
4698 @subsection Exemples de fonction de substitution
4699 @translationof Substitution function examples
4701 La présente rubrique regroupe quelques exemples de fonction
4702 substitutive. Le propos est ici d'illustrer les possibilités qu'offrent
4703 les fonctions de substitution simple.
4705 Dans ce premier exemple, nous définissons une fonction dans le but de
4706 simplifier le réglage du décalage d'une annotation (un
4709 @lilypond[quote,verbatim,ragged-right]
4711 #(define-music-function
4712 (parser location padding)
4715 \once \override TextScript.padding = #padding
4719 c4^"piu mosso" b a b
4721 c4^"piu mosso" d e f
4723 c4^"piu mosso" fis a g
4727 Nous pouvons utiliser autre chose que des nombres au sein d'une
4728 fonction, y compris une expression musicale :
4730 @lilypond[quote,verbatim,ragged-right]
4732 #(define-music-function
4733 (parser location note)
4736 \tweak NoteHead.stencil #ly:text-interface::print
4737 \tweak NoteHead.text
4738 \markup \musicglyph #"custodes.mensural.u0"
4739 \tweak Stem.stencil ##f
4743 \relative c' { c4 d e f \custosNote g }
4746 Une fonction de substitution peut traiter plusieurs arguments :
4748 @lilypond[quote,verbatim,ragged-right]
4750 #(define-music-function
4751 (parser location padding tempotext)
4754 \once \override Score.MetronomeMark.padding = #padding
4755 \tempo \markup { \bold #tempotext }
4759 \tempo \markup { "Low tempo" }
4761 \tempoPadded #4.0 "High tempo"
4766 @c TODO: add appropriate @@ref's here.