1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
4 Translation of GIT committish: 76de7e168dbc9ffc7671d99663c5ce50dae42abb
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. See TRANSLATION for details.
12 @c Translators: Valentin Villenave
13 @c Translation checkers: Gilles Thibault
16 @node Modification des réglages prédéfinis
17 @chapter Modification des réglages prédéfinis
18 @translationof Changing defaults
20 LilyPond est conçu pour engendrer, par défaut, des partitions de la
21 plus haute qualité. Cependant, on peut parfois avoir à modifier cette
22 mise en page par défaut. Celle-ci est réglée par tout un ensemble de
23 @qq{leviers et manettes}, dont ce chapitre ne cherche pas à faire
24 l'inventaire exhaustif. Le propos est plutôt ici de mettre en évidence
25 les différents groupes auxquels s'apparentent ces contrôles, et d'expliquer
26 comment trouver le bon levier pour obtenir tel ou tel effet en particulier.
28 @cindex Référence du programme
30 Les moyens de contrôle des différents réglages sont décrits dans un document
33 référence du programme
36 @ref{Top,Référence du programme,,lilypond-internals}.
38 Ce guide répertorie toutes les variables, fonctions et autres options que
39 LilyPond met à votre disposition. Il est consultable
40 @c leave the @uref as one long line.
41 @uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/user/@/lilypond@/-internals/,en@tie{}ligne},
42 au format HTML, mais est également inclus dans la documentation
43 fournie avec le logiciel.
45 Il est quatre domaines dans lesquels on peut modifier les réglages par défaut :
49 La notation automatique, ce qui revient à modifier la manière dont les éléments
50 de notation sont automatiquement créés -- par exemple, les règles de ligatures.
53 L'apparence, qui se rapporte aux objets pris individuellement -- ainsi de la direction
54 des hampes, du placement des indications textuelles.
57 Les contextes, qui recouvrent la manière dont les évènements musicaux sont représentés sous forme de
58 notation -- par exemple, le fait d'attribuer un chiffre de mesure distinct à chaque portée.
61 La mise en page, autrement dit les marges, l'espacement, la taille du papier ; tous ces facteurs
62 font l'objet des chapitres @ref{Généralités en matière d'entrée et sortie} et @ref{Gestion de l'espace}.
65 En sous-main, LilyPond se sert du langage Scheme (un dérivé du LISP) comme
66 infrastructure. Modifier les choix de mise en page revient à pénétrer dans
67 les entrailles du programme, et de ce fait requiert l'emploi du Scheme.
68 Les fragments de Scheme, dans un fichier @code{.ly}, sont introduits par le
69 caractère @q{hash}, (@code{#}, improprement surnommé @q{dièse}).@footnote{Le
70 @rlearning{Tutoriel Scheme} fournit quelques notions de base pour saisir des nombres,
71 des listes, des chaînes de caractères ou des symboles, en Scheme.}
75 * Contextes d'interprétation::
76 * En quoi consiste la référence du programme::
77 * Modification de propriétés::
78 * Propriétés et contextes utiles::
79 * Retouches avancées::
82 @node Contextes d'interprétation
83 @section Contextes d'interprétation
84 @translationof Interpretation contexts
86 Cette section traite des contextes.
89 * Tout savoir sur les contextes::
90 * Création d'un contexte::
91 * Modification des greffons de contexte::
92 * Retouches de mise en forme au sein des contextes::
93 * Modification des réglages par défaut d'un contexte::
94 * Définition de nouveaux contextes::
95 * Alignement des contextes::
98 @node Tout savoir sur les contextes
99 @subsection Tout savoir sur les contextes
100 @translationof Contexts explained
103 @c TODO Rethink and rewrite
105 >> > > - list of contexts: my *danger unmaintainable*
106 >> > > alarm just went off. I'm
108 I knew it would... And leaving out some of them is perfectly fine
110 I do think that a list like this, with the main contexts and a
112 description of what they do (perhaps also with a note about what
114 behavior is associated with each of them, but this may be
116 should be there, and then we could simply list the remaining ones
118 further explanation and with links to the IR.
121 @c TODO Improve layout, order and consistency of wording -td
123 @c TODO Add introduction which explains contexts in generality -td
125 @c TODO Describe propagation of property values -td
129 * Score - le père de tous les contextes::
130 * Contextes de haut niveau - les systèmes::
131 * Contextes de niveau intermédiaire - les portées::
132 * Contextes de bas niveau - les voix::
135 @node Score - le père de tous les contextes
136 @unnumberedsubsubsec Score - le père de tous les contextes
137 @translationof Score - the master of all contexts @c external
142 @node Contextes de haut niveau - les systèmes
143 @unnumberedsubsubsec Contextes de haut niveau - les systèmes
144 @translationof Top-level contexts - staff containers @c external
149 @node Contextes de niveau intermédiaire - les portées
150 @unnumberedsubsubsec Contextes de niveau intermédiaire - les portées
151 @translationof Intermediate-level contexts - staves @c external
156 @node Contextes de bas niveau - les voix
157 @unnumberedsubsubsec Contextes de bas niveau - les voix
158 @translationof Bottom-level contexts - voices @c external
163 @node Création d'un contexte
164 @subsection Création d'un contexte
165 @translationof Creating contexts @c external
170 @node Modification des greffons de contexte
171 @subsection Modification des greffons de contexte
172 @translationof Modifying context plug-ins
174 Les contextes, tels que @code{Score} ou @code{Staff}, ne contiennent
175 pas que des propriétés ; ils mettent également en œuvre certains
176 sous-programmes (@q{plug-ins}, pour employer le terme consacré) nommés
177 @q{graveurs} (@q{engravers}, pour reprendre le terme anglais).
178 Ces sous-programmes sont chargés de créer les différents éléments de notation :
179 On trouve ainsi dans le contexte @code{Voice}, un graveur @code{Note_head_engraver},
180 chargé des têtes de notes, et dans le contexte @code{Staff}, un graveur
181 @code{Key_signature_engraver}, chargé de l'armure.
183 Vous trouverez une description exhaustive de chaque graveur dans
185 @rinternals{Engravers and Performers}.
188 Program reference @expansion{} Translation @expansion{} Engravers.
190 Chaque contexte mentionné dans
192 @rinternals{Contexts}
195 Program reference @expansion{} Translation @expansion{} Context.
197 répertorie les graveurs mis en œuvre.
200 On peut faire, au moyen de ces graveurs, sa propre @qq{cuisine}, en
201 modifiant les contextes à volonté.
204 Lorsque un contexte est créé, par la commande @code{\new} ou @code{\context}, on peut
205 y adjoindre un bloc @code{\with} (en anglais @q{avec}), dans lequel il est possible
206 d'ajouter (commande @code{\consists}) ou d'enlever (commande @code{\remove})
212 \new @var{contexte} \with @{
225 Ici les points de suspension @dots{} devront être remplacés par les noms
226 des graveurs désirés. Dans l'exemple suivant, on enlève du contexte
227 @code{Staff}, le chiffre de mesure (graveur @code{Time_signature_engraver})
228 et la clé (graveur @code{Clef_engraver}).
230 @lilypond[quote,relative=1,verbatim,fragment]
236 \remove "Time_signature_engraver"
237 \remove "Clef_engraver"
244 La clé et le chiffre de mesure ont disparu de la deuxième portée. C'est une méthode
245 quelque peu radicale, puisqu'elle affectera toute la portée jusqu'à la fin de la
246 partition. L'espacement s'en trouve également affecté, ce qui peut être ou non
247 l'effet recherché. Une méthode plus sophistiquée aurait été de rendre ces objets
248 transparents (voir @rlearning{Visibilité et couleur des objets}).
250 Dans l'exemple suivant, voici une mise en pratique plus utile. En temps
251 normal, les barres de mesure et la métrique sont synchronisées verticalement
252 dans toute la partition. Les graveurs qui en sont responsables se nomment
253 @code{Timing_translator} et @code{Default_bar_line_engraver}.
254 En les enlevant du contexte @code{Score} pour les attribuer au contexte
255 @code{Staff}, chaque portée peut désormais avoir sa propre métrique.
257 @cindex polymétrique, partition
258 @cindex Chiffres de mesure multiples
260 @lilypond[quote,relative=1,ragged-right,verbatim,fragment]
262 \remove "Timing_translator"
263 \remove "Default_bar_line_engraver"
266 \consists "Timing_translator"
267 \consists "Default_bar_line_engraver"
273 \consists "Timing_translator"
274 \consists "Default_bar_line_engraver"
283 @c deprecated node: delete. --fv
284 @node Retouches de mise en forme au sein des contextes
285 @subsection Retouches de mise en forme au sein des contextes
286 @translationof Layout tunings within contexts
288 Chaque contexte est chargé de créer plusieurs types d'objets graphiques.
289 Il contient également les réglages nécessaires pour chacun de ces objets.
290 Si l'on modifie ces réglages, les objets n'auront plus la même apparence.
292 La syntaxe employée pour ce faire est
295 \override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur}
298 Ici @var{objet} est un objet graphique, tel que @code{Stem} (les hampes)
299 ou @code{NoteHead} (les têtes de note) ; @var{propriété} est une variable
300 (désignée par un symbole, ce qui explique l'apostrophe) employée par le système
301 de mise en page. La sous-section @ref{Élaboration d'une retouche} vous
302 aidera à savoir quoi mettre à la place de @var{objet}, @var{propriété} et
303 @var{valeur} ; notre propos n'est ici que d'examiner l'emploi de cette commande.
305 La commande suivante :
308 \override Staff.Stem #'thickness = #4.0
312 rend les hampes plus épaisses (la valeur par défaut est 1.3, ce qui signifie qu'elles
313 sont 1,3 fois plus épaisses que les lignes de la portée). Dans la mesure où nous avons
314 indiqué @code{Staff} comme contexte, ce réglage ne s'appliquera qu'à la portée courante ;
315 les autres portées demeureront intactes.
318 @lilypond[quote,verbatim,relative=2,fragment]
320 \override Staff.Stem #'thickness = #4.0
326 La commande @code{\override} modifie donc la définition de l'objet @code{Stem}
327 dans le contexte @code{Staff} ; toutes les hampes qui suivent seront affectées.
329 Tout comme avec la commande @code{\set}, l'argument @var{contexte} peut être omis, auquel
330 cas le contexte par défaut (ici, @code{Voice}) sera employé. La commande @code{\once}
331 permet de n'appliquer la modification qu'une seule fois.
333 @lilypond[quote,fragment,verbatim,relative=2]
335 \once \override Stem #'thickness = #4.0
340 La commande @code{\override} doit être entrée @emph{avant} l'objet concerné.
341 Ainsi, lorsque l'on veut altérer un objet qui se prolonge, tel qu'une liaison,
342 une ligature ou tout autre objet dit @emph{Spanner}, la commande @code{\override}
343 doit être saisie avant que l'objet soit créé.
345 @lilypond[quote,fragment,verbatim,relative=2]
346 \override Slur #'thickness = #3.0
348 \override Beam #'thickness = #0.6
353 Dans cet exemple, la liaison (@emph{Slur}) est épaissie, mais non la ligature
354 (@emph{Beam}). En effet, le code qui lui est relatif n'a pas été inséré avant le début de
355 la ligature, et demeure donc sans effet.
357 De même que la commande @code{\unset}, la commande @code{\revert} défait
358 ce qui a été fait par une commande @code{\override}. Tout comme avec @code{\unset},
359 elle ne peut annuler que les réglages effectués dans le même contexte.
360 Ainsi dans l'exemple suivant, la commande @code{\revert} est sans effet.
363 \override Voice.Stem #'thickness = #4.0
364 \revert Staff.Stem #'thickness
367 Il existe, à l'intérieur même de certaines propriétés, des options que l'on
368 nomme @q{sous-propriétés}. La syntaxe est alors
370 @c leave this as a long long
372 \override @var{contexte}.@var{objet} #'@var{propriété} #'@var{sous-propriété} = #@var{valeur}
379 \override Stem #'(details beamed-lengths) = #'(4 4 3)
384 Référence du programme : @rinternals{OverrideProperty}, @rinternals{RevertProperty},
385 @rinternals{PropertySet}, @rinternals{Backend}, et
386 @rinternals{All layout objects}.
391 La sous-couche Scheme ne vérifie pas la saisie des propriétés de façon
392 très stricte. Des références cycliques dans des valeurs Scheme peuvent
393 de ce fait interrompre, ou faire planter le programme -- ou bien les deux.
396 @node Modification des réglages par défaut d'un contexte
397 @subsection Modification des réglages par défaut d'un contexte
398 @translationof Changing context default settings
400 Les réglages montrés dans les sous-sections @ref{La commande de fixation (set)}, @ref{Modification des greffons de contexte} et
401 @ref{Retouches de mise en forme au sein des contextes} peuvent également être saisis indépendamment
402 de la musique dans le bloc @code{\layout}, au moyen de la commande @code{\context} :
411 \override Stem #'thickness = #4.0
412 \remove "Time_signature_engraver"
417 Le raccourci @code{\Staff} invoque les définitions inhérentes au contexte
418 @code{Staff}, de façon à ce qu'elles puissent être modifiées.
420 Les lignes suivantes affecteront toutes les portées (tous les contextes @code{Staff})
424 \override Stem #'thickness = #4.0
425 \remove "Time_signature_engraver"
429 Les autres contextes peuvent être modifiés de même manière.
431 La commande @code{\set}, dans le bloc @code{\layout}, est facultative ; aussi
432 les lignes suivantes produiront-elles le même effet.
444 Il est impossible de stocker des modifications de contexte dans un identificateur.
446 Le raccourci @code{\RemoveEmptyStaffContext} détruit tous les réglages
447 du contexte @code{\Staff}. Pour modifier des propriétés de portées gouvernées
448 par @code{\RemoveEmptyStaffContext}, il faut le faire impérativement @emph{après}
449 avoir invoqué @code{\RemoveEmptyStaffContext} :
454 \RemoveEmptyStaffContext
456 \override Stem #'thickness = #4.0
462 @node Définition de nouveaux contextes
463 @subsection Définition de nouveaux contextes
464 @translationof Defining new contexts
466 Les contextes tels que @code{Staff} ou @code{Voice} sont faits
467 de briques de constructions empilées. En combinant divers graveurs,
468 il est possible de créer de nouveaux types de contextes.
470 Dans l'exemple suivant, on construit, de zéro, un nouveau contexte très
471 semblable à @code{Voice}, mais qui n'imprime que des têtes de notes en forme
472 de barres obliques au centre de la portée. Un tel contexte, par exemple, peut
473 servir à indiquer un passage improvisé dans un morceau de jazz.
476 @lilypond[quote,ragged-right]
479 \type "Engraver_group"
480 \consists "Note_heads_engraver"
481 \consists "Rhythmic_column_engraver"
482 \consists "Text_engraver"
483 \consists Pitch_squash_engraver
484 squashedPosition = #0
485 \override NoteHead #'style = #'slash
486 \override Stem #'transparent = ##t
490 \accepts "ImproVoice"
494 a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
495 c4 c^"dévêtez-vous" c_"tout en jouant :)" c }
501 On a rassemblé les réglages dans un bloc @code{\context}, lui-même dans
502 le bloc @code{\layout} :
512 En lieu et place des points (@dots{}), voici les éléments à saisir :
515 @item Tout d'abord, il convient de donner un nom @code{\name} à notre nouveau contexte :
521 @item Comme il est très semblable à @code{Voice}, nous souhaitons que toutes les
522 commandes associées au @code{Voice} déjà existant, restent valables. D'où nécessité
523 de la commande @code{\alias}, qui va l'associer au contexte @code{Voice} :
529 @item Ce contexte doit pouvoir imprimer des notes, et des indications textuelles ;
530 on ajoute donc les graveurs appropriés.
533 \consists Note_heads_engraver
534 \consists Text_engraver
537 @item Cependant, on veut que les notes s'affichent toutes au centre de la portée :
540 \consists Pitch_squash_engraver
541 squashedPosition = #0
545 Le graveur @rinternals{Pitch_squash_engraver} intercepte les notes créées par
546 @rinternals{Note_heads_engraver}, et les @q{écrase} pour qu'elles aient toutes la
547 même position verticale, définie par @code{squashedPosition} : ici il s'agit de la
548 valeur@tie{}@code{0}, c'est-à-dire la ligne du milieu.
550 @item On veut que les notes aient la forme d'une barre oblique, sans aucune hampe :
553 \override NoteHead #'style = #'slash
554 \override Stem #'transparent = ##t
557 @item Afin que tous ces graveurs puissent travailler de concert, on leur adjoint un
558 sous-programme spécial, introduit par la commande @code{\type} : il s'agit de
559 @code{Engraver_group},
562 \type "Engraver_group"
567 Récapitulons -- on se retrouve avec le bloc suivant :
572 \type "Engraver_group"
573 \consists "Note_heads_engraver"
574 \consists "Text_engraver"
575 \consists Pitch_squash_engraver
576 squashedPosition = #0
577 \override NoteHead #'style = #'slash
578 \override Stem #'transparent = ##t
584 Ce n'est pas tout. En effet, on veut intégrer le nouveau contexte
585 @code{ImproVoice} dans la hiérarchie des contextes. Tout comme le
586 contexte @code{Voice}, sa place est au sein du contexte @code{Staff}.
587 Nous allons donc modifier le contexte @code{Staff},
588 au moyen de la commande @code{\accepts} :
598 Le contraire de @code{\accepts} est @code{\denies},
599 qui est parfois utile lorsque l'on recycle des définitions de
600 contextes déjà existantes.
602 Enfin, tout cela doit prendre place dans le bloc @code{\layout},
613 \accepts "ImproVoice"
618 On peut alors saisir la musique, comme dans l'exemple plus haut :
626 c c_"tout en jouant :)"
633 @node Alignement des contextes
634 @subsection Alignement des contextes
635 @translationof Aligning contexts
638 Il est possible d'aligner verticalement chaque nouveau contexte,
639 en-dessous ou au-dessus, par exemple dans le cas de musique vocale
640 (@rlearning{Ensemble vocal}) ou d'@qq{ossias}.
643 @findex alignAboveContext
644 @findex alignBelowContext
646 @lilypond[quote,ragged-right]
649 \relative c' \new Staff = "main" {
652 \new Staff \with { alignAboveContext = #"main" } \ossia
660 @node En quoi consiste la référence du programme
661 @section En quoi consiste la référence du programme
662 @translationof Explaining the Internals Reference
666 * Navigation dans la référence du programme::
667 * Interfaces de rendu::
668 * Détermination de la propriété d'un objet graphique (grob)::
669 * Conventions de nommage::
672 @node Navigation dans la référence du programme
673 @subsection Navigation dans la référence du programme
674 @translationof Navigating the program reference
676 Comment, par exemple, déplacer le doigté dans le fragment suivant ?
678 @lilypond[quote,fragment,relative=2,verbatim]
684 Sur la page de la documentation relative aux doigtés, c'est-à-dire
685 @ref{Doigtés}, se trouve l'indication suivante :
689 Référence du programme : @rinternals{Fingering}.
692 @c outdated info; probably will delete.
694 This fragment points to two parts of the program reference: a page
695 on @code{FingerEvent} and one on @code{Fingering}.
697 The page on @code{FingerEvent} describes the properties of the music
698 expression for the input @code{-2}. The page contains many links
699 forward. For example, it says
702 Accepted by: @rinternals{Fingering_engraver},
706 That link brings us to the documentation for the Engraver, the
710 This engraver creates the following layout objects: @rinternals{Fingering}.
713 In other words, once the @code{FingerEvent}s are interpreted, the
714 @code{Fingering_engraver} plug-in will process them.
718 @c I can't figure out what this is supposed to mean. -gp
720 The @code{Fingering_engraver} is also listed to create
721 @rinternals{Fingering} objects,
723 @c old info? it doesn't make any sense to me with our current docs.
725 second bit of information listed under @b{See also} in the Notation
730 Ladite référence est disponible au format HTML, ce qui rend la navigation bien
731 plus aisée. Il est possible soit de la lire en ligne, soit de la télécharger
732 dans ce format. La démarche présentée ici sera plus difficle à comprendre
733 dans un document au format PDF.
736 Suivons le lien @rinternals{Fingering}. En haut de la nouvelle page,
740 Fingering objects are created by: @rinternals{Fingering_engraver} and
741 @rinternals{New_fingering_engraver}.
744 En d'autres termes, @emph{Les indications de doigtés}
745 (@code{Fingering} en anglais) @emph{sont créées par les graveurs
746 @rinternals{Fingering_engraver} et @rinternals{New_fingering_engraver}.}
748 En suivant derechef les liens propres à la référence du programme, on suit en fait
749 le cheminement qui aboutit à la création de la partition :
753 @item @rinternals{Fingering}:
754 @rinternals{Fingering} objects are created by:
755 @rinternals{Fingering_engraver}
757 @item @rinternals{Fingering_engraver}:
758 Music types accepted: @rinternals{fingering-event}
760 @item @rinternals{fingering-event}:
761 Music event type @code{fingering-event} is in Music expressions named
762 @rinternals{FingeringEvent}
765 Ce cheminement se produit, bien sûr, en sens inverse : nous sommes ici partis
766 du résultat, et avons abouti aux évènements (en anglais @q{Events}) engendrés
767 par le fichier d'entrée. L'inverse est également possible : on peut partir d'un
768 évènement, et suivre le cheminement de LilyPond qui aboutit à la création d'un
769 ou plusieurs objets graphiques.
771 La référence du programme peut également se parcourir comme un document normal.
772 On y trouve des chapitres tels que
774 @rinternals{Music definitions},
777 @code{Music definitions}
779 @rinternals{Translation}, ou encore @rinternals{Backend}. Chaque chapitre
780 recense toutes les définitions employées, et les propriétés sujettes à
783 @c -- what about adding a link to the glossary here ? -vv
785 La Référence du programme n'est pas traduite en français -- notamment du fait
786 qu'elle est en évolution constante, tout comme LilyPond. En revanche, les termes
787 musicaux font l'objet d'un @commentfairelelien{glossaire} fort utile pour les utilisateurs
792 @node Interfaces de rendu
793 @subsection Interfaces de rendu
794 @translationof Layout interfaces
796 @cindex interfaces de rendu
797 @cindex rendu, interfaces de
798 @cindex objets graphiques
800 Tous les éléments de notation sont considérés comme des objets graphiques
801 (en anglais @q{Graphical Object}, d'où le diminutif @emph{Grob}).
802 Chaque objet est doté d'un certain nombre de propriétés (l'épaisseur du trait,
803 l'orientation, etc.), et lié à d'autres objets.
804 Le fonctionnement de ces objets est décrit en détail dans @rinternals{grob-interface}.
806 Prenons l'exemple des doigtés (en anglais @q{Fingering}).
807 La page @code{Fingering} de la Référence du programme établit une liste de définitions
808 propres à ce type d'objets :
811 @code{padding} (dimension, in staff space):
817 Ce qui signifie que les doigtés doivent être maintenus à une certaine distance (@emph{padding})
818 des notes : 0,5 unités @emph{staff-space} (espace de portée).
821 Chaque objet peut avoir plusieurs attributs, en tant qu'élément typographique
822 ou musical. Ainsi, un doigté (objet @q{Fingering}) possède les attributs suivants :
827 Sa taille ne dépend pas de l'espacement horizontal, contrairement aux liaisons ou ligatures.
830 C'est du texte -- un texte vraiment court, certes.
833 Ce texte est imprimé au moyen d'une fonte, contrairement aux liaisons ou ligatures.
836 Sur l'axe horizontal, le centre de ce symbole doit être aligné avec le centre de la note.
839 Sur l'axe vertical, le symbole doit être proche de la note et de la portée.
842 Sur l'axe vertical encore, il doit également s'ordonner avec les éventuels
843 autres symboles, ponctuations, ou éléments textuels.
846 Faire appliquer ces différents attributs est le rôle des @emph{interfaces},
847 que l'on trouve en bas de la page @rinternals{Fingering}.
850 This object supports the following interfaces:
851 @rinternals{item-interface},
852 @rinternals{self-alignment-interface},
853 @rinternals{side-position-interface}, @rinternals{text-interface},
854 @rinternals{text-script-interface}, @rinternals{font-interface},
855 @rinternals{finger-interface}, and @rinternals{grob-interface}.
862 Cet objet admet les interfaces suivantes :
865 Suit la liste des interfaces en question, présentées comme autant de liens,
866 qui conduisent sur les pages dédiées à chacune d'entre elles.
867 Chaque interface est dotée d'un certain nombre de propriétés, dont certaines
868 peuvent être modifiées, et d'autres non (les @q{Internal properties}, ou
869 propriétés internes).
871 Pour aller encore plus loin, plutôt que de simplement parler de l'objet
872 @code{Fingering}, ce qui ne nous avance pas à grand chose, on peut aller explorer
873 son âme même, dans les fichiers source de LilyPond (voir
874 @rlearning{Autres sources de documentation}), en l'occurence le fichier
875 @file{scm/@/define@/-grobs@/.scm} :
880 (avoid-slur . around)
882 (staff-padding . 0.5)
883 (self-alignment-X . 0)
884 (self-alignment-Y . 0)
885 (script-priority . 100)
886 (stencil . ,ly:text-interface::print)
887 (direction . ,ly:script-interface::calc-direction)
888 (font-encoding . fetaNumber)
889 (font-size . -5) ; don't overlap when next to heads.
890 (meta . ((class . Item)
891 (interfaces . (finger-interface
893 text-script-interface
895 side-position-interface
896 self-alignment-interface
901 @dots{}où l'on découvre que l'objet @code{Fingering} n'est rien de plus qu'un
902 amas de variables et de réglages. La page de la Référence du programme est
903 en fait directement engendrée par cette définition.
906 @node Détermination de la propriété d'un objet graphique (grob)
907 @subsection Détermination de la propriété d'un objet graphique (grob)
908 @translationof Determining the grob property
911 Nous voulions changer la position du chiffre @b{2} dans le fragment suivant :
913 @lilypond[quote,fragment,relative=2,verbatim]
919 Dans la mesure où le @b{2} est placé, verticalement, à proximité de la note qui lui
920 correspond, nous allons devoir trouver l'interface en charge de ce placement, qui se
921 trouve être @code{side-position-interface}. Sur la page de cette interface, on
925 @code{side-position-interface}
927 Position a victim object (this one) next to other objects (the
928 support). The property @code{direction} signifies where to put the
929 victim object relative to the support (left or right, up or down?)
935 @code{side-position-interface}
937 Placer l'objet affecté à proximité d'autres objets. La propriété
938 @code{direction} indique où placer l'objet (à droite ou à gauche,
944 En-dessous de cette description se trouve décrite la variable @code{padding} :
949 (dimension, in staff space)
951 Add this much extra space between objects that are next to each other.
958 Ajouter tel espace supplémentaire entre des objets proches les uns des
963 En augmentant la valeur de @code{padding}, on peut donc éloigner le doigté de la
964 note. La commande suivante insère trois unités d'espace vide entre la note et le doigté :
967 \once \override Voice.Fingering #'padding = #3
970 En ajoutant cette commande avant la création du doigté (de l'objet @q{Fingering}),
971 donc avant @code{c2}, on obtient le résultat suivant :
973 @lilypond[quote,relative=2,fragment,verbatim]
974 \once \override Voice.Fingering #'padding = #3
981 Dans le cas présent, le réglage intervient dans le contexte @code{Voice},
982 ce qui pouvait également se déduire de la Référence du programme, où la page
983 du graveur @rinternals{Fingering_engraver} indique :
986 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
992 Le graveur Fingering_engraver fait partie des contextes : @dots{} @rinternals{Voice}
996 @node Conventions de nommage
997 @subsection Conventions de nommage
998 @translationof Naming conventions @c external
1003 @node Modification de propriétés
1004 @section Modification de propriétés
1005 @translationof Modifying properties
1007 @c TODO change the menu and subsection node names to use
1008 @c backslash once the new macro to handle the refs
1009 @c is available. Need to find and change all refs at
1010 @c the same time. -td
1013 * Vue d'ensemble de la modification des propriétés::
1014 * La commande de fixation (set)::
1015 * La commande de dérogation (@emph{override})::
1016 * Élaboration d'une retouche::
1017 * La commande d'affinage (@emph{tweak})::
1021 @node Vue d'ensemble de la modification des propriétés
1022 @subsection Vue d'ensemble de la modification des propriétés
1023 @translationof Overview of modifying properties @c external
1028 @node La commande de fixation (set)
1029 @subsection La commande @code{\set}
1030 @translationof The set command
1034 @cindex modifier des propriétés
1036 Chaque contexte peut avoir plusieurs @emph{propriétés}, c'est-à-dire
1037 des variables qu'il inclut. Ces dernières peuvent être modifiées @qq{à la volée},
1038 c'est-à-dire pendant que la compilation s'accomplit. C'est là le rôle de la
1039 commande @code{\set}.
1042 \set @var{contexte}.@var{propriété} = #@var{valeur}
1046 @lilypond[quote,verbatim,relative=2,fragment]
1048 \set Score.skipBars = ##t
1052 Cette commande permet de condenser les mesures vides de notes, en des silences
1053 multi-mesures. Il s'agit d'un objet Scheme, auquel on attribue la valeur booléenne
1054 @q{vrai}, c'est-à-dire la lettre @code{#t} pour @q{True} en anglais.
1056 Ce changement étant appliqué @q{à la volée}, il n'affecte que le second groupe de notes.
1058 Si l'argument @var{contexte} n'est pas spécifié, alors la propriété cherchera à s'appliquer
1059 dans le contexte le plus restreint où elle est employée : le plus souvent
1060 @code{ChordNames}, @code{Voice}, ou @code{Lyrics}. Dans l'exemple suivant,
1062 @lilypond[quote,verbatim,relative=2,fragment]
1064 \set autoBeaming = ##f
1069 aucun argument @var{contexte} n'a été donné à la commande @code{\set}.
1070 De ce fait, les ligatures automatiques sont désactivées dans le
1071 contexte actuel, c'est-à-dire @rinternals{Voice}. Notez que le
1072 contexte le plus restreint n'est pas toujours le bon,
1073 et peut ne pas contenir la propriété qui vous intéresse : ainsi, la propriété
1074 @code{skipBars}, évoquée plus haut, ne relève pas du contexte @code{Voice},
1075 et le code suivant ne fonctionnera pas.
1077 @lilypond[quote,verbatim,relative=2,fragment]
1083 Les contextes s'organisent de façon hiérarchique : aussi, lorsqu'un contexte de niveau
1084 supérieur est spécifié (par exemple @code{Staff}), la propriété sera modifée dans
1085 tous les contextes inférieurs (tous les contextes @code{Voice}, par exemple)
1090 La commande @code{\unset} permet d'annuler la définition d'une propriété :
1093 \unset @var{contexte}.@var{propriété}
1097 si et seulement si cette propriété à été définie dans ce @var{contexte}
1101 \set Staff.autoBeaming = ##f
1105 même s'il s'applique à tous les contextes @code{Voice} contenus dans le
1106 contexte @code{Staff}, ne peut être annulé au niveau @code{Voice}. Le code
1107 suivant sera sans effet.
1110 \unset Voice.autoBeaming
1114 En d'autres termes, la commande @code{\unset} doit impérativement être
1115 accompagnée du même contexte que la commande @code{\set} d'origine.
1116 Pour annuler l'effet, dans notre exemple, de @code{Staff.autoBeaming = ##f},
1117 il faut donc entrer :
1119 \unset Staff.autoBeaming
1122 Si l'on se trouve dans le contexte le plus restreint, il n'est pas obligatoire,
1123 là encore, de spécifier le @var{contexte}. Ainsi, les deux lignes suivantes sont équivalentes.
1127 \set Voice.autoBeaming = ##t
1128 \set autoBeaming = ##t
1133 Pour modifier une propriété de façon à ce qu'elle ne s'applique qu'une seule fois,
1134 il convient d'employer la commande @code{\once} :
1136 @lilypond[quote,verbatim,relative=2,fragment]
1138 \once \set fontSize = #4.7
1143 Ici le changement de taille est annulé aussitôt après la note concernée.
1145 La référence du programme contient une description exhaustive de toutes les
1146 propriétés contexte par contexte : voir
1148 @rinternals{Tunable context properties}.
1151 Translation @expansion{} Tunable context properties.
1155 @node La commande de dérogation (@emph{override})
1156 @subsection La commande @code{\override}
1157 @translationof The override command
1160 La commande @code{\override} permet de modifier la mise en page
1161 en détail. Examinons son utilisation concrètementet dans les détails.
1162 La syntaxe de cette commande ressemble généralement à :
1165 \override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur}
1168 La propriété @var{propriété} de l'objet @var{objet}, appartenant au contexte
1169 @var{contexte}, se voit ainsi attribuer la valeur @var{valeur}.
1172 @c deprecated node. Delete. --fv
1173 @node Élaboration d'une retouche
1174 @subsection Élaboration d'une retouche
1175 @translationof Constructing a tweak
1177 Les commandes permettant de modifier l'apparence de la partition
1178 ressemblent en général à
1181 \override Voice.Stem #'thickness = #3.0
1185 Pour élaborer un réglage de ce type, on a besoin de connaître précisément :
1188 @item le contexte : ici @code{Voice} (la voix).
1189 @item l'objet à affecter : ici @code{Stem} (les hampes).
1190 @item la propriété à modifier : ici @code{thickness} (l'épaisseur du trait).
1191 @item la valeur désirée : ici @code{3.0} (par défaut, elle est de 1.3).
1194 Certaines @q{sous-propriétés} sont parfois contenues dans une propriété.
1195 La commande devient alors :
1198 \override Stem #'(details beamed-lengths) = #'(4 4 3)
1201 @cindex documentation exhaustive
1202 @cindex trouver des objets graphiques
1203 @cindex objets graphiques, description
1207 Pour bien des propriétés, quel que soit le type de valeur requise,
1208 attribuer la valeur @q{faux} (@code{##f} en Scheme) reviendra à désactiver
1209 complètement l'action de la propriété qui se trouve ainsi purement
1210 ignorée par LilyPond. Cela peut s'avérer fort utile pour des propriétés
1211 causant des désagréments.
1213 @c such announcements are to be avoided -vv
1215 We demonstrate how to glean this information from the notation manual
1216 and the program reference.
1220 @node La commande d'affinage (@emph{tweak})
1221 @subsection La commande @code{\tweak}
1222 @translationof The tweak command
1227 Dans certains cas, on peut passer par un raccourci pour arranger les
1228 objets graphiques. Lorsqu'un objet est directement engendré par un élément distinct
1229 du fichier source, on peut utiliser la commande @code{\tweak}.
1231 Dans l'accord suivant, les notes sont modifiées une par une :
1233 @lilypond[relative=2,fragment,verbatim,ragged-right]
1236 \tweak #'color #red d
1238 \tweak #'duration-log #1 a
1239 >4-\tweak #'padding #10 -.
1242 Comme on peut le voir, les propriétés sont ici modifiées directement
1243 en même temps que les objets sont saisis. Il n'est plus besoin de spécifier ni
1244 le nom de l'objet (@emph{grob}), ni le contexte dans lequel cela doit s'appliquer.
1246 Ce procédé ne marche que pour des objets directement liés aux évènements
1247 (@rinternals{Event}) du fichier source. Par exemple :
1250 @item Les têtes de notes au sein d'un accord, qui sont directement engendrées par
1251 les hauteurs indiquées
1252 @item Les signes d'articulation, engendrés par les indications de ponctuation.
1255 En revanche, les hampes ou les altérations sont engendrées par les têtes de notes,
1256 et non par des évènements dans le fichier source. De même pour les clés, qui ne
1257 sont pas directement engendrées par le fichier source, mais plutôt par le
1258 changement d'une propriété interne.
1260 En fait, très peu d'objets passent @emph{directement} du code source à la partition.
1261 Une note toute simple, par exemple @code{c4}, fait l'objet d'un traitement et n'est donc
1262 pas directement rendue ; c'est pourquoi le code suivant ne sera d'aucun effet :
1265 \tweak #'color #red c4
1269 Voir pour plus de détails @ref{Affichage d'expressions musicales}.
1272 @node set ou override
1273 @subsection @code{\set} ou @code{\override}
1274 @translationof set versus override
1277 Si les propriétés peuvent être modifiées de deux façons, par les commandes
1278 @code{\set} et @code{\override}, c'est qu'il y a deux types de propriétés.
1280 Les contextes peuvent avoir des propriétés, dont les noms commencent par une
1281 minuscule puis comprennent une ou plusieurs majuscules (de style
1282 @code{totoTutu}). Elles ont surtout trait
1283 à la notation des éléments musicaux : par exemple, @code{localKeySignature} permet
1284 de choisir s'il faut ou non imprimer une altération, ou @code{measurePosition} permet
1285 de choisir quand il faut imprimer une barre de mesure. Ces propriétés de contextes
1286 sont appelées à changer au long de l'interprétation de la partition :
1287 @code{measurePosition} en est un exemple évident. Ces propriétés doivent
1288 être modifiées avec la commande @code{\set}.
1290 Il existe un type particulier de propriétés : les descriptions
1291 d'éléments. Ces propriétés, dont les noms commencent par une majuscule, puis comprennent
1292 une ou plusieurs majuscules (de style @code{TotoTata}), contiennent les réglages
1293 @q{par défaut} pour les objets graphiques. Ces réglages sont sous forme de liste Scheme ; on
1294 peut les consulter dans le fichier @file{scm/@/define@/-grobs@/.scm}.
1295 Les descriptions d'éléments doivent être modifiées avec la commande @code{\override}.
1297 @code{\override} est en fait un raccourci :
1300 \override @var{contexte}.@var{objet} #'@var{propriété} = #@var{valeur}
1304 est plus ou moins l'équivalent de
1306 @c leave this long line -gp
1308 \set @var{contexte}.@var{objet} #'@var{propriété} = #(cons (cons '@var{propriété} @var{valeur}) <valeur précédente de @var{contexte})
1311 La valeur de @code{context} (la liste Scheme, ou @q{alist}) sert à initialiser
1312 les propriétés des objets un par un. Les objets eux-même ont leurs propriétés,
1313 dont les noms, dans la tradition du langage Scheme, comprennent un trait d'union
1314 (@code{toto-titi}). Ces propriétés internes changent constamment au cours de la mise
1315 en page : en fait, la gravure d'une page n'est autre que le calcul de toutes
1316 ces propriétés, au moyen de fonctions de rappel.
1318 La propriété @code{fontSize} est une exception : c'est un raccourci, qui équivaudrait
1319 à saisir @code{\override @dots{} #'font-size} pour tous les objets
1320 textuels. Dans la mesure où il s'agit d'une manipulation très
1321 courante, une propriété spéciale a été créée. Elle doit
1322 être modifiée avec la commande @code{\set}.
1326 @node Propriétés et contextes utiles
1327 @section Propriétés et contextes utiles
1328 @translationof Useful concepts and properties
1333 * Direction et positionnement::
1334 * Distances et unités de mesure::
1335 * Propriétés des lignes de portée::
1336 * Extenseurs et prolongateurs::
1337 * Visibilité des objets::
1339 * Rotation des objets::
1342 @node Modes de saisie
1343 @subsection Modes de saisie
1344 @translationof Input modes @c external
1349 @node Direction et positionnement
1350 @subsection Direction et positionnement
1351 @translationof Direction and placement @c external
1356 @node Distances et unités de mesure
1357 @subsection Distances et unités de mesure
1358 @translationof Distances and measurements @c external
1363 @node Propriétés des lignes de portée
1364 @subsection Propriétés des lignes de portée
1365 @translationof Staff symbol properties @c external
1370 @node Extenseurs et prolongateurs
1371 @subsection Extenseurs et prolongateurs
1372 @translationof Spanners @c external
1377 @unnumberedsubsubsec Utilisation de @code{spanner-interface}
1378 @unnumberedsubsubsec Utilisation de @code{line-spanner-interface}
1379 @node Visibilité des objets
1380 @subsection Visibilité des objets
1381 @translationof Visibility of objects @c external
1387 * Suppression des stencils::
1388 * Transparence des objets::
1389 * Blanchiment des objets::
1390 * Utilisation de break-visibility::
1391 * Considérations spécifiques::
1394 @node Suppression des stencils
1395 @unnumberedsubsubsec Suppression des stencils
1396 @translationof Removing the stencil @c external
1401 @node Transparence des objets
1402 @unnumberedsubsubsec Transparence des objets
1403 @translationof Making objects transparent @c external
1408 @node Blanchiment des objets
1409 @unnumberedsubsubsec Blanchiment des objets
1410 @translationof Painting objects white @c external
1415 @node Utilisation de break-visibility
1416 @unnumberedsubsubsec Utilisation de break-visibility
1417 @translationof Using break-visibility @c external
1422 @node Considérations spécifiques
1423 @unnumberedsubsubsec Considérations spécifiques
1424 @translationof Special considerations @c external
1429 @node Styles de ligne
1430 @subsection Styles de ligne
1431 @translationof Line styles @c external
1436 @node Rotation des objets
1437 @subsection Rotation des objets
1438 @translationof Rotating objects @c external
1444 * Rotation des objets de mise en forme::
1445 * Rotation des étiquettes::
1448 @node Rotation des objets de mise en forme
1449 @unnumberedsubsubsec Rotation des objets de mise en forme
1450 @translationof Rotating layout objects @c external
1455 @node Rotation des étiquettes
1456 @unnumberedsubsubsec Rotation des étiquettes
1457 @translationof Rotating markup @c external
1462 @node Retouches avancées
1463 @section Retouches avancées
1464 @translationof Advanced tweaks @c external
1470 * Alignement des objets::
1471 * Regroupement vertical d'objets graphiques::
1472 * Modification des stencils::
1473 * Modification de l'allure des éléments::
1476 @node Alignement des objets
1477 @subsection Alignement des objets
1478 @translationof Aligning objects @c external
1484 * Détermination directe de @code{X-offset} et @code{Y-offset}::
1485 * Utilisation de @code{side-position-interface}::
1486 * Utilisation de @code{self-alignment-interface}::
1487 * Utilisation de @code{break-aligned-interface}::
1490 @node Détermination directe de @code{X-offset} et @code{Y-offset}
1491 @unnumberedsubsubsec Détermination directe de @code{X-offset} et @code{Y-offset}
1492 @translationof Setting @code{X-offset} and @code{Y-offset} directly @c external
1497 @node Utilisation de @code{side-position-interface}
1498 @unnumberedsubsubsec Utilisation de @code{side-position-interface}
1499 @translationof Using the @code{side-position-interface} @c external
1504 @node Utilisation de @code{self-alignment-interface}
1505 @unnumberedsubsubsec Utilisation de @code{self-alignment-interface}
1506 @translationof Using the @code{self-alignment-interface} @c external
1511 @unnumberedsubsubsec Utilisation des procédures @code{aligned-on-parent}
1512 @unnumberedsubsubsec Utilisation des procédures @code{centered-on-parent}
1513 @node Utilisation de @code{break-aligned-interface}
1514 @unnumberedsubsubsec Utilisation de @code{break-aligned-interface}
1515 @translationof Using the @code{break-alignable-interface} @c external
1520 @node Regroupement vertical d'objets graphiques
1521 @subsection Regroupement vertical d'objets graphiques
1522 @translationof Vertical grouping of grobs
1524 Les objets @code{VerticalAlignment} et @code{VerticalAxisGroup}
1525 travaillent de concert. Comme leurs noms anglais l'indiquent,
1526 @code{VerticalAxisGroup} regroupe différents objets tels que les portées
1527 (@code{Staff}), les paroles (@code{Lyrics}) et ainsi de suite ; puis
1528 @code{VerticalAlignment} synchronise verticalement ces différents groupes.
1529 En général, il n'y a qu'un seul @code{VerticalAlignment} pour l'ensemble
1530 de la partition, mais chaque contexte @code{Staff}, @code{Lyrics}, etc.
1531 possède son propre @code{VerticalAxisGroup}.
1534 @node Modification des stencils
1535 @subsection Modification des stencils
1536 @translationof Modifying stencils @c external
1541 @node Modification de l'allure des éléments
1542 @subsection Modification de l'allure des éléments
1543 @translationof Modifying shapes
1546 * Modification des liaisons::
1549 @node Modification des liaisons
1550 @unnumberedsubsubsec Modification des liaisons
1551 @translationof Modifying ties and slurs @c external