1@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- 2 3@ignore 4 Translation of GIT committish: 8b9b4a3ebe554037ebc9c52e96328cc0999712c3 5 6 When revising a translation, copy the HEAD committish of the 7 version that you are working on. For details, see the Contributors' 8 Guide, node Updating translation committishes.. 9@end ignore 10 11@c \version "2.19.22" 12 13@c Translators: Valentin Villenave, Nicolas Klutchnikoff, Damien Heurtebise 14@c Translation checkers: Jean-Charles Malahieude, John Mandereau 15@c Translation status: post-GDP 16 17@node Retouche de partition 18@chapter Retouche de partition 19@translationof Tweaking output 20 21Ce chapitre indique comment modifier le résultat obtenu. 22LilyPond offre de nombreuses possibilités de réglages, permettant 23théoriquement de modifier chaque élément de votre partition. 24 25@menu 26* Retouches élémentaires:: 27* Le manuel de référence des propriétés internes:: 28* Apparence des objets:: 29* Positionnement des objets:: 30* Espacement vertical:: 31* Collisions d'objets:: 32* Autres retouches:: 33@end menu 34 35 36@node Retouches élémentaires 37@section Retouches élémentaires 38@translationof Tweaking basics 39 40@menu 41* Introduction aux retouches:: 42* Objets et interfaces:: 43* Conventions de nommage des objets et propriétés:: 44* Méthodes de retouche:: 45@end menu 46 47 48@node Introduction aux retouches 49@subsection Introduction aux retouches 50@translationof Introduction to tweaks 51 52LilyPond regroupe sous le terme de « retouches » (@emph{tweaks} en 53anglais) les différents moyens dont dispose l'utilisateur pour 54intervenir sur l'interprétation du fichier d'entrée et pour modifier 55l'apparence du fichier de sortie. Certaines retouches sont très 56simples à mettre en œuvre ; d'autres sont plus complexes. Mais 57à elles toutes, elles permettent d'obtenir tout ce qu'on veut en matière 58de musique imprimée. 59 60Dans ce chapitre, nous traitons des concepts de base nécessaires 61pour comprendre l'art de la retouche. Puis nous présentons de 62nombreuses commandes déjà prêtes, qu'il suffit de recopier pour 63obtenir un résultat identique dans vos partitions ; nous en profitons 64pour expliquer comment ces commandes ont été construites, si bien que 65vous pouvez apprendre par la même occasion à développer vos propres 66retouches. 67 68Avant de vous lancer dans ce chapitre, il peut être utile de revoir la 69section @ref{Contextes et graveurs}, dans la mesure où les contextes, 70graveurs et autres propriétés qui y sont décrits, sont indispensables 71pour comprendre et construire les retouches. 72 73 74@node Objets et interfaces 75@subsection Objets et interfaces 76@translationof Objects and interfaces 77 78@cindex objet 79@cindex grob 80@cindex spanner 81@cindex extenseur 82@cindex interface 83@cindex propriétés des objets 84@cindex objet, propriétés 85@cindex objet de rendu 86@cindex rendu, objets de 87 88Toute retouche implique que l'on modifie les opérations internes 89et les structures du programme LilyPond. Nous allons donc, pour 90commencer, présenter certains termes qui servent à décrire ces 91opérations internes et ces structures. 92 93Le terme « Objet » est un terme générique qui fait référence à 94une multitude de structures internes mises en place par LilyPond 95durant la compilation d'un fichier d'entrée. Ainsi, quand une 96commande du type @code{\new Staff} apparaît, un nouvel objet du type 97@code{Staff} est créé. Cet objet @code{Staff} contient alors toutes les 98propriétés associées à cette portée, par exemple son nom et son armure, 99ainsi que le détail des graveurs qui ont été désignés pour fonctionner 100dans ce contexte de portée. Certains objets peuvent contenir les 101propriétés de tous les autres contextes, comme les objets @code{Voice}, 102les objets @code{Score}, les objets @code{Lyrics} ; d'autres se 103rapportent à tous les éléments de notation, comme les barres de mesure, 104les liaisons, les nuances, etc. Chaque objet dispose de son propre 105échantillon de valeurs pour le réglage des propriétés. 106 107Certains types d'objet portent des noms spécifiques. Les objets qui se 108rapportent à des éléments de notation sur le fichier de sortie, comme 109les notes, les hampes, les liaisons de phrasé ou de prolongation, les 110doigtés, les clefs, etc. sont appelés « Objets de rendu » ; ils sont 111aussi connus sous le nom « d'Objets graphiques » (en anglais : 112@emph{Graphical objects} ou @emph{Grobs} pour faire court). Ce sont 113bien des objets au sens générique ci-dessus et, en tant que tels, ils 114reçoivent des propriétés qui leur sont associées, comme leur position, 115leur taille, leur couleur, etc. 116 117Certains objets de rendu, comme les liaisons de phrasé, les soufflets 118de crescendo, les marques d'octaviation et beaucoup d'autres 119@emph{grobs}, ont pour particularité de ne pas se situer à un seul et 120unique endroit -- ils ont un point de départ, un point d'arrivée, et 121éventuellement d'autres propriétés relatives à leur forme. Ces objets 122avec une forme étendue sont appelés des bandeaux (@emph{Spanners} en 123anglais). 124 125Les bandeaux ne peuvent être retouchés après leur création. Ceci 126inclut les @code{StaffSymbol} et @code{LedgerLineSpanner} qui se 127déroulent tout au long de la partition -- à moins qu'ils n'aient été 128rompus par une commande @code{\stopStaff} puis créés de nouveau à l'aide 129de la commande @code{\startStaff}. 130 131De plus existent certains @emph{grobs} que l'on peut qualifier 132« d'astraits ». Ils n'ont pas pour fonction intrinsèque d'imprimer 133quelque chose, mais plutôt de collecter, positionner et gérer d'autres 134objets. Citons, parmi les plus courants, @code{DynamicLineSpanner}, 135@code{BreakAlignment}, @code{NoteColumn}, @code{VerticalAxisGroup}, 136@code{NonMusicalPaperColumn}. Nous verrons plus avant comment les 137utiliser. 138 139Il reste à expliquer ce que sont les « interfaces ». De nombreux 140objets, qui peuvent être très différents les uns des autres, ont pour 141point commun de devoir être compilés simultanément. Par exemple, tous 142les @emph{grobs} ont une couleur, une taille, une position, etc. et 143toutes ces propriétés sont compilées simultanément durant 144l'interprétation du fichier d'entrée par LilyPond. Pour alléger ces 145opérations internes, ces actions et propriétés communes sont regroupées 146en un objet appelé @code{grob-interface}. Il existe beaucoup d'autres 147regroupements de propriétés communes dans le genre de celui-ci, chacun 148portant un nom qui se termine par @code{interface}. En tout, on en 149compte plus d'une centaine. Nous verrons plus loin en quoi c'est 150intéressant et utile pour l'utilisateur. 151 152Ainsi s'achève le tour des principaux termes relatifs aux objets 153que nous serons amenés à utiliser dans ce chapitre. 154 155 156@node Conventions de nommage des objets et propriétés 157@subsection Conventions de nommage des objets et propriétés 158@translationof Naming conventions of objects and properties 159 160@cindex conventions de nommage des objets 161@cindex conventions de nommage des propriétés 162@cindex objets, conventions de nommage 163@cindex propriétés, conventions de nommage 164 165Nous avons eu un aperçu, dans @ref{Contextes et graveurs}, de la façon 166de nommer les objets. Voici maintenant une liste de référence des types 167d'objets et de propriétés les plus courants, avec leurs conventions de 168nommage et quelques exemples de cas concrets. La lettre @var{A} 169représente n'importe quel caractère alphabétique majuscule, et les 170lettres @var{aaa} un nombre indéterminé de caractères alphabétiques 171minuscules. Les autres caractères sont à prendre tels qu'ils se 172présentent. 173 174@multitable @columnfractions .33 .33 .33 175@headitem Type d'objet/propriété 176 @tab Convention de nommage 177 @tab Exemples 178@item Contextes 179 @tab Aaaa ou AaaaAaaaAaaa 180 @tab Staff, GrandStaff 181@item Objets de rendu 182 @tab Aaaa ou AaaaAaaaAaaa 183 @tab Slur, NoteHead 184@item Graveurs 185 @tab Aaaa_aaa_engraver 186 @tab Clef_engraver, Note_heads_engraver 187@item Interfaces 188 @tab aaa-aaa-interface 189 @tab grob-interface, break-aligned-interface 190@item Propriétés de contexte 191 @tab aaa ou aaaAaaaAaaa 192 @tab alignAboveContext, skipBars 193@item Propriétés d'objet de rendu 194 @tab aaa ou aaa-aaa-aaa 195 @tab direction, beam-thickness 196@end multitable 197 198Comme nous le verrons bientôt, les propriétés des différents types 199d'objet sont modifiées par des commandes différentes, si bien qu'il est 200bon de savoir reconnaître le type d'un objet ou d'une propriété en 201fonction de son nom. 202 203@morerefs 204Manuel de notation : 205@ruser{Modification de propriétés}. 206 207 208@node Méthodes de retouche 209@subsection Méthodes de retouche 210@translationof Tweaking methods 211 212@cindex retouches, méthodologie 213@cindex méthodes de retouche 214 215@menu 216* La commande override:: 217* La commande revert:: 218* Le préfixe once:: 219* La commande overrideProperty:: 220* La commande tweak:: 221* Le préfixe single:: 222@end menu 223 224 225@node La commande override 226@unnumberedsubsubsec La commande @code{@bs{}override} 227@translationof The override command 228 229@cindex override, commande 230@cindex override, syntaxe 231 232@funindex \override 233 234Dans @ref{Modification des propriétés d'un contexte} et dans 235@ref{Ajout et suppression de graveurs}, nous avons déjà rencontré les 236commandes @code{\set} et @code{\with}, qui servent à changer les 237propriétés des @strong{contextes} et à supprimer ou ajouter des 238@strong{graveurs}. Voici maintenant d'autres commandes plus 239importantes. 240 241La commande pour changer les propriétés des @strong{objets de rendu} 242est @code{\override}. Du fait que cette commande modifie en profondeur 243les propriétés internes de LilyPond, sa syntaxe n'est pas aussi simple 244que pour les commandes vues précédemment. Elle a besoin de savoir avec 245précision quelle est la propriété à modifier, pour quel objet et dans 246quel contexte, et quelle doit être sa nouvelle valeur. Voyons de quoi 247il retourne. 248 249La syntaxe générale de cette commande est : 250 251@example 252\override @var{Contexte}.@var{ObjetDeRendu}.@var{propriété-rendu} = #@var{valeur} 253@end example 254 255@noindent 256Elle attribue à la propriété appelée @var{propriété-rendu}, associée à 257l'objet @var{ObjetDeRendu}, appartenant lui-même au contexte 258@var{Contexte}, une valeur @var{valeur}. 259 260Le contexte @var{Contexte} peut être omis (c'est généralement le cas) 261quand il n'y a pas d'ambiguïté et qu'il s'agit d'un contexte de très bas 262niveau, comme @code{Voice}, @code{ChordNames} ou @code{Lyrics}. Dans les 263exemples qui suivent, le contexte sera très souvent omis. Nous verrons 264plus tard dans quelles circonstances il doit impérativement être 265indiqué. 266 267Les sections ci-dessous traitent largement des propriétés et de leurs 268valeurs -- voir @ref{Types de propriétés} -- mais, pour illustrer la 269mise en forme et l'utilisation de ces commandes, nous nous limiterons à 270n'employer que quelques propriétés et valeurs simples, facilement 271compréhensibles. 272 273LilyPond reconnaît comme expression primaire les éléments musicaux tels 274que les notes et durées, ainsi que les chînes de caractères et 275annotations (les @emph{markups}). D'autres expressions spécifiques comme 276les nombres, symboles et listes sont gérées en « mode Scheme », mode 277appelé en faisant précéder une valeur par un @samp{#}. Pour de plus 278amples informations quant au mode Scheme, consultez 279@rextend{Syntaxe Scheme dans LilyPond}. 280 281La commande @code{\override} est la plus fréquemment utilisée pour faire 282des retouches, et pratiquement tout le reste de ce chapitre aura pour 283but de montrer, à travers des exemples, comment l'utiliser. L'exemple 284ci-dessous change la couleur des têtes de notes : 285 286@cindex couleur,exemple d'utilisation de la propriété 287@cindex NoteHead, exemple de dérogation 288 289@lilypond[quote,ragged-right,verbatim] 290\relative { 291 c'4 d 292 \override NoteHead.color = "red" 293 e4 f | 294 \override NoteHead.color = "green" 295 g4 a b c | 296} 297@end lilypond 298 299 300@node La commande revert 301@unnumberedsubsubsec La commande @code{@bs{}revert} 302@translationof The revert command 303 304@cindex revert, commande 305 306@funindex \revert 307 308Une fois qu'elle a été modifiée, la propriété conserve sa nouvelle 309valeur jusqu'à ce qu'elle soit à nouveau modifiée ou qu'elle rencontre 310la commande @code{\revert}. La commande @code{\revert} obéit à la 311syntaxe ci-dessous et ramène la valeur de la propriété à sa valeur 312d'origine. Attention : dans le cas où plusieurs @code{\override} ont 313été employés, il ne s'agit pas de la valeur précédente mais bien de la 314valeur par défaut. 315 316@example 317\revert @var{Contexte}.@var{ObjetDeRendu}.@var{propriété-de-rendu} 318@end example 319 320Tout comme pour la commande @code{\override}, la mention du 321@var{Contexte} est souvent facultative. Elle sera omise dans de 322nombreux exemples ci-dessous. Voici un exemple qui ramène la couleur 323des deux dernières notes à leur valeur par défaut : 324 325@cindex couleur,exemple d'utilisation de la propriété 326@cindex NoteHead, exemple de dérogation 327 328@lilypond[quote,ragged-right,verbatim] 329\relative { 330 c'4 d 331 \override NoteHead.color = "red" 332 e4 f | 333 \override NoteHead.color = "green" 334 g4 a 335 \revert NoteHead.color 336 b4 c | 337} 338@end lilypond 339 340 341@node Le préfixe once 342@unnumberedsubsubsec Le préfixe @code{@bs{}once} 343@translationof The once prefix 344 345@funindex \once 346 347Les commandes @code{\override}, @code{\revert}, @code{\set} et 348@code{\unset} peuvent supporter le préfixe @code{\once}. Celui-ci a 349pour fonction de n'appliquer la commande considérée qu'à l'instant 350musical en cours, avant que la propriété ne reprenne sa valeur 351antérieure -- qui n'est pas forcément la valeur par défaut lorsqu'un 352autre @code{\override} ou @code{\set} est toujours effectif. Toujours à 353partir du même exemple, il est possible de ne changer la couleur que 354d'une seule note : 355 356@cindex couleur,exemple d'utilisation de la propriété 357@cindex NoteHead, exemple de dérogation 358 359@lilypond[quote,ragged-right,verbatim] 360\relative { 361 c'4 d 362 \override NoteHead.color = "red" 363 e4 f | 364 \once \override NoteHead.color = "green" 365 g4 a 366 \once \revert NoteHead.color 367 b c | 368 \revert NoteHead.color 369 f2 c | 370} 371@end lilypond 372 373Le préfixe @code{\once} peut s'utiliser avec de nombreuses 374commandes prédéfinies pour en limiter les effets à un seul instant 375musical : 376 377@lilypond[quote,verbatim] 378\relative { 379 c'4( d) 380 \once \slurDashed 381 e4( f) | 382 g4( a) 383 \once \hideNotes 384 b( c) | 385} 386@end lilypond 387 388 389@node La commande overrideProperty 390@unnumberedsubsubsec La commande @code{@bs{}overrideProperty} 391@translationof The overrideProperty command 392 393@cindex overrideProperty, commande 394 395@funindex \overrideProperty 396 397Il existe une autre forme de commande @code{\override}, 398@code{\overrideProperty}, qui est parfois utile. Nous la mentionnons 399ici par souci d'exhaustivité ; pour le détail, voir 400@rextend{Retouches complexes}. 401 402@c Maybe explain in a later iteration -td 403 404 405@node La commande tweak 406@unnumberedsubsubsec La commande @code{@bs{}tweak} 407@translationof The tweak command 408 409@cindex tweak, commande 410 411@funindex \tweak 412 413La dernière commande disponible pour les retouches est 414@code{\tweak}. Elle sert à changer les propriétés d'objets qui 415surviennent simultanément dans la musique, comme par exemple les 416notes d'un accord. La commande @code{\override} modifierait toutes 417les notes de l'accord, tandis que @code{\tweak} permet de ne modifier 418que l'élément immédiatement suivant dans la chaîne de saisie. 419 420Voici un exemple. Supposons que nous voulions changer la taille de 421la tête de note du milieu (le mi) dans un accord de do majeur. Voyons 422d'abord ce que donnerait @code{\once \override} : 423 424@cindex font-size, exemple d'utilisation de la propriété 425@cindex NoteHead, exemple de dérogation 426 427@lilypond[quote,ragged-right,verbatim] 428\relative { 429 <c' e g>4 430 \once \override NoteHead.font-size = #-3 431 <c e g>4 432 <c e g>4 433} 434@end lilypond 435 436Nous voyons que @code{\override} modifie @strong{toutes} les têtes 437de notes de l'accord, car toutes les notes de l'accord surviennent au 438même @strong{instant musical} et que la fonction de @code{\once} 439est de faire porter la modification sur tous les objets du type spécifié 440qui surviennent au même instant musical, comme le fait la commande 441@code{\override} elle-même. 442 443La commande @code{\tweak} opère différemment. Elle agit 444sur l'élément immédiatement suivant dans la chaîne de saisie. Dans sa 445forme la plus simple, elle ne fonctionne que sur les objets créés 446directement à partir de l'élément suivant dans la chaîne de saisie, 447c'est-à-dire essentiellement des têtes de notes et des articulations. 448 449Pour reprendre notre exemple, la taille de la note du milieu d'un 450accord peut être modifiée de cette manière : 451 452@cindex font-size, exemple d'utilisation de la propriété 453@cindex @code{\tweak}, exemple 454 455@lilypond[quote,ragged-right,verbatim] 456\relative { 457 <c' e g>4 458 <c \tweak font-size #-3 e g>4 459} 460@end lilypond 461 462Vous noterez que la syntaxe de @code{\tweak} est différente de 463celle de la commande @code{\override}. Ni le contexte, 464ni l'objet n'ont besoin d'être spécifiés ; au contraire, cela 465produirait une erreur si on le faisait. Tous deux sont sous-entendus 466par l'élément suivant dans la chaîne de saisie. Il n'est pareillement 467pas nécessaire d'insérer un signe égal. La syntaxe générale 468de la commande @code{\tweak} est donc, tout simplement : 469 470@example 471\tweak @var{propriété-de-rendu} #@var{valeur} 472@end example 473 474La commande @code{\tweak} est aussi utilisée quand on veut, dans 475une série d'articulations, n'en modifier qu'une seule. Ainsi : 476 477@cindex couleur, exemple d'utilisation de la propriété 478@cindex @code{\tweak}, exemple 479 480@lilypond[quote,fragment,ragged-right,verbatim] 481a'4^"Black" 482 -\tweak color "red" ^"Red" 483 -\tweak color "green" _"Green" 484@end lilypond 485 486@noindent 487Attention : la commande @code{\tweak} doit être précédée d'une 488marque d'articulation, comme si elle-même était une articulation. Dans 489la cas de multiples positionnements forcés (@code{^} ou @code{_}), celui 490le plus à gauche aura préséance puisqu'il sera appliqué en dernier. 491 492@cindex @code{\tweak} et altération 493@cindex @code{\tweak} et objet de rendu spécifique 494 495Les objets tels que hampes et altérations seront créés postérieurement à 496l'événement qui survient. L'utilisation de la commande @code{\tweak} 497sur de tels objets indirectement créés peut se faire en nommant 498explicitement l'objet de rendu, si tant est que LilyPond puisse remonter 499jusqu'à l'événement originel : 500 501@lilypond[quote,fragment,ragged-right,verbatim] 502<\tweak Accidental.color "red" cis''4 503 \tweak Accidental.color "green" es'' 504 g''> 505@end lilypond 506 507Cette forme développée de la commande @code{\tweak} correspond à : 508@example 509\tweak @var{objet-de-rendu}.@var{propriété-de-rendu} #@var{valeur} 510@end example 511 512@cindex n-olets imbriqués 513@cindex triolets imbriqués 514@cindex crochet de n-olet 515@cindex n-olet, crochet 516@cindex triolet, crochet 517 518@funindex TupletBracket 519 520Quand plusieurs n-olets sont imbriqués et commencent au même instant 521musical, c'est encore la commande @code{\tweak} qui est utilisée pour 522changer l'apparence de l'un d'entre eux. Dans l'exemple suivant, le 523long crochet de n-olet et le premier des trois crochets courts commencent 524au même instant musical ; une commande @code{\override} s'appliquerait 525donc à la fois aux deux. En revanche, @code{\tweak} permet de les 526dissocier. La première commande @code{\tweak} indique que le long 527crochet doit être placé au-dessus des notes, et la seconde indique que 528le coefficient de n-olet doit être imprimé en rouge sur le premier 529crochet de triolet court. 530 531@cindex @code{\tweak}, exemple 532@cindex direction, exemple d'utilisation de la propriété 533@cindex couleur, exemple d'utilisation de la propriété 534 535@lilypond[quote,ragged-right,verbatim] 536\relative c'' { 537 \tweak direction #up 538 \tuplet 3/4 { 539 \tweak color "red" 540 \tuplet 3/2 { c8[ c c] } 541 \tuplet 3/2 { c8[ c c] } 542 \tuplet 3/2 { c8[ c c] } 543 } 544} 545@end lilypond 546 547Si les n-olets imbriqués ne commencent pas au même moment, 548leur apparence peut alors être modifiée de la façon habituelle, 549avec la commande @code{\override} : 550 551@cindex texte, exemple d'utilisation de la propriété 552@cindex tuplet-number, exemple de fonction 553@cindex transparence, exemple d'utilisation de la propriété 554@cindex TupletNumber, exemple de dérogation 555 556@lilypond[quote,ragged-right,verbatim] 557\relative { 558 \tuplet 3/2 { c'8[ c c] } 559 \once \override TupletNumber.text = #tuplet-number::calc-fraction-text 560 \tuplet 3/2 { 561 c8[ c] 562 c8[ c] 563 \once \override TupletNumber.transparent = ##t 564 \tuplet 3/2 { c8[ c c] } 565 \tuplet 3/2 { c8[ c c] } 566 } 567} 568@end lilypond 569 570@morerefs 571Manuel de notation : 572@ruser{La commande d'affinage (tweak)}. 573 574 575@node Le préfixe single 576@unnumberedsubsubsec Le préfixe @code{@bs{}single} 577@translationof The single prefix 578 579@funindex \single 580 581@cindex tweak généré par override 582 583Supposons que nous voulions mettre en exergue certaines têtes de note -- 584plus grosses et en rouge -- et, pour nous simplifier la vie, que nous 585avons réalisé un fonction à ce effet : 586 587@lilypond[quote,verbatim] 588emphNoteHead = { 589 \override NoteHead.color = "red" 590 \override NoteHead.font-size = 2 591} 592\relative { 593 c''4 a \once \emphNoteHead f d | 594} 595@end lilypond 596 597Le préfixe @code{\once} fonctionne à merveille dans le cas d'une note 598isolée ou de l'intégralité d'un accord, mais ne permet pas de souligner 599individuellement l'une des notes d'un accord. Nous avons vu comment un 600@code{\tweak} permet d'y arriver -- voir @ref{La commande tweak}. Un 601@code{\tweak} ne peut toutefois pas s'utiliser dans une fonction ; un 602@code{\single} permet d'appliquer la fonction une seule fois : 603 604@lilypond[quote,verbatim] 605emphNoteHead = { 606 \override NoteHead.color = "red" 607 \override NoteHead.font-size = 2 608} 609\relative { 610 <c'' a \single \emphNoteHead f d>4 611} 612@end lilypond 613 614En résumé, l'instruction @code{\single} convertit les instructions 615@code{\override} en @code{\tweak} de telle sorte que lorsque plusieurs 616objets se trouvent en un même point du temps musical, comme la tête des 617notes formant un accord, @code{\single} n'en affectera qu'une seule, 618celle générée par l'expression musicale qui vient juste après, 619contrairement à un @code{\once} qui en affectera tous les objets. 620 621Cette utilisation de @code{\single} permet d'appliquer individuellement 622n'importe quel raccourci de fonction contenant des @code{\override} aux 623notes d'un accord. Néanmoins, l'instruction @code{\single} ne permet 624pas de convertir des @code{\revert}, @code{\set} ou @code{\unset} en 625@code{\tweak}. 626 627@morerefs 628Manuel d'initiation : 629@ref{La commande tweak}, 630@ref{Utilisation de variables dans les retouches}. 631 632 633@node Le manuel de référence des propriétés internes 634@section Le manuel de référence des propriétés internes 635@translationof The Internals Reference manual 636 637@cindex Références internes 638 639@menu 640* Propriétés des objets de rendu:: 641* Propriétés listées par interface:: 642* Types de propriétés:: 643@end menu 644 645 646@node Propriétés des objets de rendu 647@subsection Propriétés des objets de rendu 648@translationof Properties of layout objects 649 650@cindex propriétés des objets de rendu 651@cindex propriétés des objets graphiques (grobs) 652@cindex grobs, propriétés 653@cindex objets de rendu, propriétés 654@cindex Manuel des références internes 655 656Imaginons que votre partition contienne une liaison trop fine à votre 657goût et que vous vouliez la rendre plus épaisse. Comment vous y 658prendre ? Vous êtes convaincu, avec tout ce qui a été dit sur la 659souplesse de LilyPond, qu'une telle retouche est réalisable et 660vous vous dites qu'elle fera sans doute intervenir la commande 661@code{\override}. Mais existe-t-il une propriété épaisseur qui 662s'applique à une liaison et, dans l'affirmative, comment faire pour la 663modifier ? C'est là qu'intervient la Référence des propriétés 664internes. Elle contient toutes les informations dont vous avez besoin 665pour construire n'importe quelle commande @code{\override}. 666 667Avant de nous plonger dans la Référence des propriétés 668internes, un mot d'avertissement. Il s'agit d'un document de 669@strong{références}, de sorte qu'il ne contient pas ou peu 670d'explications : son but est de présenter les informations de 671façon précise et concise. Cela peut paraître décourageant 672à première vue. Pas d'inquiétude ! Les conseils et les 673explications fournis ici vous permettent de retrouver par vous-même les 674informations dans la Référence des propriétés internes. Il 675suffit d'un peu de pratique. 676 677@cindex override, exemple 678@cindex dérogation, exemple 679@cindex Références internes, exemple d'utilisation 680@cindex @code{\addlyrics} -- exemple 681 682Prenons un exemple concret tiré d'un morceau de musique connu : 683 684@c Mozart, Die Zauberflöte Nr.7 Duett 685 686@lilypond[quote,verbatim] 687{ 688 \key es \major 689 \time 6/8 690 \relative { 691 r4 bes'8 bes[( g]) g | 692 g8[( es]) es d[( f]) as | 693 as8 g 694 } 695 \addlyrics { 696 The man who | feels love's sweet e -- | mo -- tion 697 } 698} 699@end lilypond 700 701Admettons que nous voulions rendre les traits de liaison plus épais. 702Est-ce possible ? Une liaison est assurément un objet de rendu, si 703bien que la question est « Existe-t-il une propriété attachée aux 704liaisons et qui en contrôle l'épaisseur ? » Pour y répondre, nous 705consultons la Référence des propriétés internes (ou RPI pour faire 706court). 707 708Vous trouverez sur le site de LilyPond @uref{https://lilypond.org} la 709RPI correspondant à votre version du programme. Allez sur la page 710Documentation et cliquez sur Référence des propriétés internes. 711Pour l'apprentissage, mieux vaut utiliser la version HTML standard, 712et non la « page unique en anglais » ou le PDF. Durant la lecture 713des prochains paragraphes, il vous est conseillé de vous y reporter 714réellement afin que les explications prennent tout leur sens. 715 716En dessous du bandeau d'en-tête figurent cinq liens. Cliquez sur le 717lien vers le @emph{Backend}, où se trouvent les informations sur les 718objets de rendu. En dessous du titre @strong{Backend}, choisissez 719alors le lien vers @emph{Tous les objets de rendu}. La page qui s'ouvre 720énumère, dans l'ordre alphabétique, tous les objets utilisés dans votre 721version de LilyPond. Cliquez sur Liaisons (@emph{Slurs} en anglais), 722et les propriétés des liaisons apparaîtront. 723 724Il existe un autre moyen de trouver cette page, à partir du Manuel de 725notation. Une des pages qui traitent des liaisons contient un lien vers 726la Référence des propriétés internes, qui mène directement à cette 727page. Mais lorsque vous connaissez le nom de l'objet à retoucher, le 728plus simple est de consulter la RPI. 729 730La page de la RPI sur les liaisons commence par préciser que les objets 731« Liaison » sont créés par le graveur @code{Slur_engraver}. Vient 732ensuite la liste des réglages standard ; vous y trouverez la propriété 733susceptible de contrôler l'épaisseur des traits de liaison. 734 735@example 736thickness (nombre) 737 1.2 738 Épaisseur de ligne, généralement mesurée en line-thickness 739@end example 740 741Voilà qui semble approprié pour changer l'épaisseur (@emph{thickness} en 742anglais). On apprend que la valeur de @code{thickness} est un simple 743nombre (@emph{number}), qu'elle est par défaut définie à 1,2 et que 744l'unité de mesure est fixée par une autre propriété appelée 745@code{line-thickness}. 746 747Comme il a été indiqué, on ne trouve que peu, voire pas du tout 748d'explication dans la RPI, mais nous en savons assez pour essayer 749de changer l'épaisseur de la liaison. Comme nous l'avons vu, le 750nom de l'objet est @code{Slur}, le nom de la propriété à changer 751est @code{thickness} et la nouvelle valeur sera un nombre supérieur 752à @code{1.2} si l'on veut augmenter l'épaisseur du trait. 753 754Pour construire la commande @code{\override}, il suffit donc de 755remplacer les valeurs que nous avons trouvées en guise de noms, en 756laissant de côté le contexte. Commençons par une valeur très élevée 757dans un premier temps, pour nous assurer que la commande fonctionne. 758Nous obtenons : 759 760@example 761\override Slur.thickness = #5.0 762@end example 763 764N'oublions pas le @code{#} qui doit précéder la nouvelle valeur. 765 766La dernière question est : « Où placer cette commande ? » 767Tant qu'on n'est pas sûr de soi, la meilleure réponse est « À 768l'intérieur de l'expression musicale, avant la première liaison et 769proche d'elle. » Essayons : 770 771@cindex Slur, exemple de dérogation 772@cindex thickness, exemple d'utilisation de la propriété 773 774@lilypond[quote,verbatim] 775{ 776 \key es \major 777 \time 6/8 778 \relative { 779 % Increase thickness of all following slurs from 1.2 to 5.0 780 \override Slur.thickness = #5.0 781 r4 bes'8 bes[( g]) g | 782 g8[( es]) es d[( f]) as | 783 as8 g 784 } 785 \addlyrics { 786 The man who | feels love's sweet e -- | mo -- tion 787 } 788} 789@end lilypond 790 791@noindent 792et nous constatons que le trait de liaison est beaucoup plus épais. 793 794Telle est la façon normale de construire des commandes @code{\override}. 795Comme nous aurons l'occasion de le voir par la suite, le problème est 796parfois plus complexe. Dans l'immédiat, nous en savons assez pour 797construire nos propres commandes -- mais il faut encore s'exercer. Les 798exemples suivants sont là dans cette intention. 799 800 801@subsubsubheading Détermination du contexte adéquat 802@c VO Finding the context 803 804@cindex contexte, détermination du 805@cindex contexte, identification correcte du 806 807Tout d'abord, de quoi avions-nous besoin pour préciser le contexte ? À 808quoi devait-il ressembler ? Gageons que les liaisons appartiennent au 809contexte Voix, dans la mesure où elles sont étroitement liées à une 810ligne mélodique, mais comment en être sûr ? Pour répondre à cette 811question, revenons en haut de la page de la RPI consacrée aux liaisons ; 812il est écrit : « Les objets Liaison sont créés par le graveur 813Slur_engraver. » Ainsi les liaisons seront créées dans n'importe quel 814contexte où se trouve le @code{Slur_engraver}. Suivons le lien vers la 815page @code{Slur_engraver}. Tout en bas, on lit que le 816@code{Slur_engraver} est un élément appartenant à sept contextes Voix, 817dont le contexte de voix standard, @code{Voice}. Notre hypothèse était 818donc juste. Et parce que @code{Voice} est un contexte de très bas 819niveau, qu'il est activé sans ambiguïté par le fait que l'on est 820en train de saisir des notes, on peut ici ne pas le mentionner. 821 822 823@subsubsubheading Redéfinition pour une seule occurrence 824@c VO Overriding once only 825 826@cindex dérogation pour une seule fois 827@cindex usage unique, dérogation à 828 829@funindex \once 830 831Dans le dernier exemple ci-dessus, @emph{toutes} les liaisons étaient 832plus épaisses. Et si on veut épaissir uniquement la première liaison ? 833On recourt alors à la commande @code{\once}. Placée juste avant la 834commande @code{\override}, elle lui indique de ne changer que la liaison 835commençant avec la note @strong{juste après}. Si la note juste après 836n'ouvre pas une liaison, la commande sera sans aucun effet -- elle ne 837reste pas en mémoire jusqu'à la prochaine liaison, elle est purement et 838simplement ignorée. Il faut donc que la commande introduite par 839@code{\once} soit insérée comme suit : 840 841@cindex Slur, exemple de dérogation 842@cindex thickness, exemple d'utilisation de la propriété 843@cindex Liaison, exemple de dérogation 844@cindex Épaisseur, exemple d'utilisation de la propriété 845 846@lilypond[quote,verbatim] 847{ 848 \key es \major 849 \time 6/8 850 \relative { 851 r4 bes'8 852 % Increase thickness of immediately following slur only 853 \once \override Slur.thickness = #5.0 854 bes8[( g]) g | 855 g8[( es]) es d[( f]) as | 856 as8 g 857 } 858 \addlyrics { 859 The man who | feels love's sweet e -- | mo -- tion 860 } 861} 862@end lilypond 863 864@noindent 865Alors seule la première liaison est rendue plus épaisse. 866 867La commande @code{\once} peut aussi être utilisée devant la commande 868@code{\set}. 869 870 871@subsubsubheading Rétablissement 872@c VO Reverting 873 874@cindex revert 875@cindex rétablissement 876@cindex retour 877@cindex défaut, retour aux propriétés par 878 879@funindex \revert 880 881Et si l'on voulait que les deux premières liaisons soient plus 882épaisses ? On pourrait bien sûr utiliser deux commandes, chacune 883précédée de @code{\once} et placée juste avant la note par laquelle 884débute la liaison : 885 886@cindex liaison, exemple de dérogation 887@cindex thickness, exemple d'utilisation de la propriété 888@cindex épaisseur, exemple d'utilisation 889 890@lilypond[quote,verbatim] 891{ 892 \key es \major 893 \time 6/8 894 \relative { 895 r4 bes'8 896 % Increase thickness of immediately following slur only 897 \once \override Slur.thickness = #5.0 898 bes[( g]) g | 899 % Increase thickness of immediately following slur only 900 \once \override Slur.thickness = #5.0 901 g8[( es]) es d[( f]) as | 902 as8 g 903 } 904 \addlyrics { 905 The man who | feels love's sweet e -- | mo -- tion 906 } 907} 908@end lilypond 909 910@noindent 911mais on peut aussi, au lieu de la commande @code{\once}, utiliser après 912la seconde liaison la commande @code{\revert}, qui ramène la propriété 913@code{thickness} à sa valeur par défaut : 914 915@cindex Slur, exemple de dérogation 916@cindex thickness, exemple d'utilisation de la propriété 917@cindex liaison, exemple de dérogation 918@cindex épaisseur, exemple d'utilisation 919 920@lilypond[quote,verbatim] 921{ 922 \key es \major 923 \time 6/8 924 \relative { 925 r4 bes'8 926 % Increase thickness of all following slurs from 1.2 to 5.0 927 \override Slur.thickness = #5.0 928 bes[( g]) g | 929 g8[( es]) es 930 % Revert thickness of all following slurs to default of 1.2 931 \revert Slur.thickness 932 d8[( f]) as | 933 as8 g 934 } 935 \addlyrics { 936 The man who | feels love's sweet e -- | mo -- tion 937 } 938} 939@end lilypond 940 941@noindent 942N'importe quelle propriété modifiée par @code{\override} peut ainsi 943être ramenée, grâce à la commande @code{\revert}, à sa valeur par 944défaut. 945 946Ici s'achève notre introduction à la RPI et aux retouches 947simples. Vous trouverez d'autres exemples dans les prochaines 948sections de ce chapitre ; ils vous permettront, d'une part, 949d'apprendre à connaître un peu mieux la RPI et, d'autre part, de 950vous entraîner un peu plus à y chercher les informations. Ces 951exemples seront progressivement accompagnés d'explications et 952introduiront des termes nouveaux. 953 954 955@node Propriétés listées par interface 956@subsection Propriétés listées par interface 957@translationof Properties found in interfaces 958 959@cindex interface 960@cindex interfaces, propriétés des 961@cindex propriétés des interfaces 962 963Supposons maintenant que nous voulions imprimer des paroles en italique. 964Quelle formulation de la commande @code{\override} allons-nous 965utiliser ? Nous consultons en premier lieu, comme précédemment, la 966page de la RPI qui contient la liste « Tous les objets de rendu », et 967recherchons un objet qui contrôle les paroles. Nous trouvons 968@code{LyricText}, qui semble approprié. Nous cliquons dessus et nous 969voyons apparaître les différentes propriétés des paroles, parmi 970lesquelles @code{font-series} et @code{font-size}. Mais aucune ne 971propose l'italique. Car la mise en forme des caractères est une 972propriété commune à tous les objets d'écriture, si bien que, au lieu de 973figurer dans tous les objets de rendu, elle est regroupée avec d'autres 974propriétés semblables et placée dans une @strong{Interface}, la 975@code{font-interface}. 976 977Il nous faut donc apprendre à trouver les propriétés des interfaces 978et découvrir les objets qui utilisent les propriétés de ces interfaces. 979 980Retournons à la page de la RPI qui traite des paroles 981(@emph{LyricText}). En bas de la page est dressée sous forme de liens 982la liste des interfaces qui concernent LyricText. Cette liste comporte 983plusieurs entrées, dont @code{font-interface}. En cliquant dessus, nous 984voyons apparaître les différentes propriétés associées à cette 985interface, qui sont en même temps les propriétés de tous les objets qui 986s'y rapportent, parmi lesquels @code{LyricText}. 987 988Nous avons alors sous les yeux tous les réglages des propriétés qui 989contrôlent les polices de caractères, et notamment 990@code{font-shape(symbole)}, où @code{symbole} peut prendre la valeur 991@code{upright}, @code{italic} ou @code{caps}. 992 993Vous remarquerez que @code{font-series} et @code{font-size} figurent 994aussi dans la liste. La question qui ne manque pas de se poser 995est : « Comment se fait-il que les propriétés @code{font-series} 996et @code{font-size} se retrouvent à la fois dans @code{LyricText} et 997dans l'interface @code{font-interface} alors que ce n'est pas le cas 998pour @code{font-shape} ? » La réponse est que lorsqu'un objet 999@code{LyricText} est créé, les valeurs globales par défaut de 1000@code{font-series} et @code{font-size} sont modifiées, mais pas celles 1001de @code{font-shape}. Les possibilités de modification dans 1002@code{LyricText} ne concernent donc que les valeurs à appliquer à 1003@code{LyricText}. Les autres objets qui dépendent de 1004@code{font-interface} fixeront leurs propriétés différemment lorsqu'ils 1005seront créés. 1006 1007Voyons maintenant si nous sommes en mesure de formuler la commande 1008@code{\override} pour mettre les paroles en italique. L'objet est 1009@code{LyricText}, la propriété est @code{font-shape} et la valeur est 1010@code{italic}. Comme auparavant, nous laissons de côté le contexte. 1011 1012Signalons rapidement -- même si cette remarque est importante -- que 1013certaines valeurs de propriétés se présentent sous forme de 1014symboles, comme @code{italic}, et doivent donc être précédées 1015d'une simple apostrophe, Ces symboles seront alors interprétés 1016comme tels par LilyPond. À ne pas confondre avec les chaînes de 1017caractères libres qui se présentent comme @code{"un texte 1018libre"} ; pour plus de détails sur les symboles et les chaînes de 1019caractères, voir le @rextend{Tutoriel Scheme}. 1020 1021Ainsi, la commande @code{\override} pour mettre les paroles en italique 1022est : 1023 1024@example 1025\override LyricText.font-shape = #'italic 1026@end example 1027 1028@noindent 1029et doit être placée juste devant et tout près des paroles à modifier, 1030comme ceci : 1031 1032@cindex font-shape, exemple d'utilisation de la propriété 1033@cindex italic, exemple 1034@cindex LyricText, exemple de dérogation 1035@cindex @code{\addlyrics}, exemple 1036 1037@lilypond[quote,ragged-right,verbatim] 1038{ 1039 \key es \major 1040 \time 6/8 1041 \relative { 1042 r4 bes'8 bes[( g]) g | 1043 g8[( es]) es d[( f]) as | 1044 as8 g 1045 } 1046 \addlyrics { 1047 \override LyricText.font-shape = #'italic 1048 The man who | feels love's sweet e -- | mo -- tion 1049 } 1050} 1051@end lilypond 1052 1053@noindent 1054et voilà les paroles en italiques. 1055 1056@warning{Dans la saisie des paroles, pensez à toujours laisser une 1057espace entre la dernière syllabe et l'accolade fermante.} 1058 1059@morerefs 1060Manuel d'extension : 1061@rextend{Tutoriel Scheme}. 1062 1063 1064@node Types de propriétés 1065@subsection Types de propriétés 1066@translationof Types of properties 1067 1068@cindex propriété, types de 1069 1070Nous avons vu jusqu'à maintenant deux types de propriétés : 1071@code{nombre} et @code{symbole}. Pour pouvoir fonctionner, la valeur 1072associée à une propriété doit correspondre au type attendu et suivre les 1073règles liées à ce type. Le type de propriété est toujours donné entre 1074parenthèses après le nom de propriété dans la RPI. Voici une liste des 1075différents types de propriétés, avec les règles qui les régissent et 1076quelques exemples d'utilisation. Il faut, bien sûr, toujours ajouter un 1077symbole @emph{hash} (@code{#}) devant ces valeurs lors de la saisie de 1078la commande @code{\override}, ce même si cette valeur comporte 1079déjà un @code{#} en premier caractère. Les exemples ici présentés 1080ne sont que de simples illustrations ; l'utilisation de Scheme 1081pour obtenir des valeurs fait l'objet de la rubrique 1082@rextend{Scheme et les calculs}. 1083 1084@multitable @columnfractions .2 .45 .35 1085@headitem Type de propriété 1086 @tab Règles 1087 @tab Exemples 1088@item Booléenne (@emph{Boolean} en anglais) 1089 @tab Vrai (@emph{true} en anglais) ou Faux (@emph{false} en anglais), 1090 sous la forme @code{#t} ou @code{#f} 1091 @tab @code{#t}, @code{#f} 1092@item Dimension (en espaces de portée) 1093 @tab Un nombre décimal (en unités de lignes de portée) 1094 @tab @code{2.5}, @code{0.34} 1095@item Direction 1096 @tab Une direction valide ou son équivalent numérique (@code{0} 1097 ou @code{CENTER} indiquent une position neutre) 1098 @tab @code{LEFT}, @code{CENTER}, @code{UP}, @code{1}, @w{@code{-1}} 1099@item Entier (@emph{Integer} en anglais) 1100 @tab Un nombre entier 1101 @tab @code{3}, @code{-1} 1102@item Liste 1103 @tab Une séquence de constantes ou symboles séparés par une 1104 espace, encadrées par des parenthèses et précédées par une apostrophe 1105 @tab @code{'(left-edge staff-bar)}, @code{'(1)}, @code{'()}, 1106 @code{'(1.0 0.25 0.5)} 1107@item Markup (ou étiquette) 1108 @tab Toute commande @code{\markup} valide 1109 @tab @code{\markup @{ \italic "cresc." @}}, @code{"bagpipe"} 1110@item Durée (@emph{Moment} en anglais) 1111 @tab Une durée de note construite avec la fonction make-moment 1112 @tab @code{(ly:make-moment 1/4)}, @code{(ly:make-moment 3/8)} 1113@item Nombre 1114 @tab Une valeur positive ou négative, qui peut être décimale 1115 @tab @code{3}, @w{@code{-2.45}} 1116@item Paire (de nombres) 1117 @tab Deux nombres séparés par « espace point espace », encadrés 1118par des parenthèses et précédés par une apostrophe 1119 @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)} 1120@item Symbole 1121 @tab L'un des symboles autorisés pour cette propriété, précédé par une 1122 apostrophe 1123 @tab @code{'italic}, @code{'inside} 1124@item Inconnu (@emph{Unknown} en anglais) 1125 @tab Un processus, ou @code{#f} pour empêcher toute action 1126 @tab @code{bend::print}, @code{ly:text-interface::print}, @code{#f} 1127@item Vecteur 1128 @tab Des constantes encadrés par @code{#(}@dots{}@code{)} 1129 @tab @code{'#(#t #t #f)} 1130@end multitable 1131 1132@morerefs 1133Manuel d'extension : 1134@rextend{Tutoriel Scheme}. 1135 1136 1137@node Apparence des objets 1138@section Apparence des objets 1139@translationof Appearance of objects 1140 1141Il est temps de mettre en pratique les notions apprises précédemment 1142pour modifier l'allure de la partition ; les exemples qui suivent 1143montrent l'utilisation des différentes méthodes de retouche. 1144 1145@menu 1146* Visibilité et couleur des objets:: 1147* Taille des objets:: 1148* Longueur et épaisseur des objets:: 1149@end menu 1150 1151 1152@node Visibilité et couleur des objets 1153@subsection Visibilité et couleur des objets 1154@translationof Visibility and color of objects 1155 1156Dans un but pédagogique, on peut être amené à masquer certains éléments 1157d'une partition, que les élèves doivent ensuite compléter. Imaginons, 1158par exemple, un exercice dans lequel il faudrait rétablir les barres de 1159mesure dans un morceau de musique. En temps normal, les barres de 1160mesure s'insèrent automatiquement. Comment faire pour les effacer de la 1161partition ? 1162 1163Avant de nous y attaquer, souvenons-nous que les propriétés d'objets 1164sont parfois groupées dans ce qu'on appelle des @emph{interfaces} -- 1165voir @ref{Propriétés listées par interface}. Cela permet de rapprocher 1166toutes les propriétés susceptibles d'être utilisées ensemble pour 1167modifier un objet graphique -- si l'une d'elles est choisie pour un 1168objet, elle s'appliquera à tous les autres. Certains objets tirent 1169alors leurs propriétés de telle ou telle interface, d'autres objets de 1170telle ou telle autre interface. La liste des interfaces qui contiennent 1171les propriétés liées à un objet graphique (@emph{grob}) figure dans la 1172RPI, en bas de la page de description du @emph{grob} ; pour voir 1173ces propriétés, il faut aller voir ces interfaces. 1174 1175Nous avons vu, dans @ref{Propriétés des objets de rendu}, comment 1176trouver les informations sur les @emph{grobs}. Nous procédons de la 1177même manière et consultons la RPI pour connaître l'objet chargé 1178d'imprimer les barres de mesure. En cliquant sur @emph{Backend} puis 1179sur @emph{Tous les objets de rendu}, nous trouvons un objet appelé 1180@code{BarLine}. Parmi ses propriétés, deux d'entre elles déterminent 1181son aspect visuel : @code{break-visibility} et @code{stencil}. 1182L'objet @code{BarLine} est également lié à plusieurs interfaces, dont la 1183@code{grob-interface} où figurent les propriétés @code{transparent} et 1184@code{color}. Toutes peuvent modifier l'aspect visuel des barres de 1185mesure -- et de beaucoup d'autres objets, bien sûr. Examinons chacune 1186d'elles tour à tour. 1187 1188@menu 1189* La propriété stencil:: 1190* La propriété break-visibility:: 1191* La propriété transparent:: 1192* La propriété color:: 1193@end menu 1194 1195 1196@node La propriété stencil 1197@unnumberedsubsubsec La propriété @code{stencil} 1198@translationof The stencil property 1199 1200@cindex stencil, propriété 1201 1202Cette propriété contrôle l'apparence des barres de mesure en précisant 1203le type de symbole (glyphe) à imprimer. Comme pour de nombreuses 1204autres propriétés, on peut lui indiquer de ne rien imprimer en lui 1205attribuant la valeur @code{#f}. Essayons en laissant de côté, une fois 1206encore, le contexte concerné (@code{Voice} en l'occurrence) : 1207 1208@cindex BarLine, exemple de dérogation 1209@cindex stencil, exemple d'utilisation de la propriété 1210 1211@lilypond[quote,ragged-right,verbatim] 1212\relative { 1213 \time 12/16 1214 \override BarLine.stencil = ##f 1215 c''4 b8 c d16 c d8 | 1216 g,8 a16 b8 c d4 e16 | 1217 e8 1218} 1219@end lilypond 1220 1221Les barres de mesure sont encore là ! Pourquoi ? Retournons 1222à la RPI et regardons de nouveau la page qui traite des propriétés de 1223@code{BarLine}. En haut de la page, il est précisé que « Les objets 1224BarLine sont créés par le graveur Bar_engraver ». Allons à la page de 1225@code{Bar_engraver}. Tout en bas se trouve la liste des contextes dans 1226lesquels fonctionne ce graveur. Tous sont du type @code{Staff}, de 1227sorte que, si la commande @code{\override} n'a pas fonctionné comme 1228prévu, c'est parce que @code{Barline} n'appartient pas au contexte par 1229défaut, @code{Voice}. Si le contexte spécifié est erroné, la commande 1230ne fonctionne pas. Cela n'entraîne pas de message d'erreur, et rien 1231n'apparaît dans le fichier @emph{log}. Essayons de corriger en 1232mentionnant le bon contexte : 1233 1234@cindex BarLine, exemple de dérogation 1235@cindex stencil, exemple d'utilisation de la propriété 1236 1237@lilypond[quote,ragged-right,verbatim] 1238\relative { 1239 \time 12/16 1240 \override Staff.BarLine.stencil = ##f 1241 c''4 b8 c d16 c d8 | 1242 g,8 a16 b8 c d4 e16 | 1243 e8 1244} 1245@end lilypond 1246 1247Cette fois, les barres de mesure ont disparu. Désactiver la 1248propriété @code{stencil} est une opération tellement fréquente que 1249LilyPond dispose d'un raccourci -- @code{\omit} (pour « oublier ») 1250-- à cet effet : 1251 1252@funindex \omit 1253 1254@lilypond[quote,ragged-right,verbatim] 1255\relative { 1256 \time 12/16 1257 \omit Staff.BarLine 1258 c''4 b8 c d16 c d8 | 1259 g,8 a16 b8 c d4 e16 | 1260 e8 1261} 1262@end lilypond 1263 1264Vous remarquerez que l'affectation de la valeur @code{#f} à la propriété 1265@code{stencil} déclenchera une erreur dès lors que l'objet en question se 1266doit d'avoir des dimensions pour les nécessités du traitement. Ce sera 1267le cas, par exemple, si vous effacez le @code{stencil} d'un objet 1268@code{NoteHead}. Il vaut mieux, en pareil cas, utiliser la fonction 1269@code{point-stencil} qui, quant à elle, attribue à l'objet une taille à 1270zéro : 1271 1272@lilypond[quote,verbatim] 1273\relative { 1274 c''4 c 1275 \once \override NoteHead.stencil = #point-stencil 1276 c4 c 1277} 1278@end lilypond 1279 1280 1281@node La propriété break-visibility 1282@unnumberedsubsubsec La propriété @code{break-visibility} 1283@translationof The break-visibility property 1284 1285@cindex break-visibility, propriété 1286 1287La RPI mentionne, à la page sur @code{BarLine}, que la propriété 1288@code{break-visibility} attend comme argument un vecteur de trois 1289booléens. Ceux-ci indiquent respectivement si les barres de mesure 1290doivent être imprimées ou non à la fin de la ligne, à l'intérieur de la 1291ligne et au début de la ligne. Dans notre cas, nous voulons que toutes 1292les barres soient supprimées, si bien que la valeur dont nous avons 1293besoin est @code{#(#f #f #f)}. Essayons, sans oublier d'ajouter le 1294contexte @code{Staff}. Vous remarquerez que, en plus de cette valeur, 1295nous ajoutons @code{##} devant la parenthèse ouvrante. Un second 1296@code{#} est nécessaire car il fait partie intégrante de la valeur 1297contenant un vecteur, et le premier @code{#} est là, comme 1298toujours avec la commande @code{\override}, pour introduire la 1299valeur elle-même. 1300 1301@cindex BarLine, exemple de dérogation 1302@cindex break-visibility exemple d'utilisation de la propriété 1303 1304@lilypond[quote,fragment,ragged-right,verbatim] 1305\relative { 1306 \time 12/16 1307 \override Staff.BarLine.break-visibility = ##(#f #f #f) 1308 c''4 b8 c d16 c d8 | 1309 g,8 a16 b8 c d4 e16 | 1310 e8 1311} 1312@end lilypond 1313 1314Comme on peut le constater, cette solution-là aussi supprime les barres 1315de mesure. 1316 1317 1318@node La propriété transparent 1319@unnumberedsubsubsec La propriété @code{transparent} 1320@translationof The transparent property 1321 1322@cindex transparent, propriété 1323@cindex transparence 1324 1325La RPI mentionne, à la page sur @code{grob-interface}, que la propriété 1326@code{transparent} attend comme argument un booléen. Il faudrait donc 1327mettre @code{#t} pour rendre l'objet transparent. Dans cet exemple, 1328essayons de rendre transparente la métrique (@emph{time signature} en 1329anglais) plutôt que les barres de mesure. Pour cela, il nous faut 1330trouver le nom du @emph{grob} chargé de l'indication de mesure. De 1331retour sur la page « Tous les objets de rendu » de la RPI, nous 1332cherchons les propriétés de l'objet @code{TimeSignature}. Celui-ci est 1333géré par le graveur @code{Time_signature_engraver} qui, comme vous 1334pouvez le constater, appartient au contexte @code{Staff} et peut se 1335rattacher à la @code{grob-interface}. Dans ces conditions, la commande 1336pour rendre la métrique transparente est : 1337 1338@cindex TimeSignature, exemple de dérogation 1339@cindex transparent, exemple d'utilisation de la propriété 1340 1341@lilypond[quote,ragged-right,verbatim] 1342\relative { 1343 \time 12/16 1344 \override Staff.TimeSignature.transparent = ##t 1345 c''4 b8 c d16 c d8 | 1346 g,8 a16 b8 c d4 e16 | 1347 e8 1348} 1349@end lilypond 1350 1351@noindent 1352L'utilisation de la propriété @code{transparent} étant 1353relativement fréquent, LilyPond dispose d'un raccourci à cet 1354effet : @code{\hide} (pour « masquer »). 1355 1356@funindex \hide 1357 1358@lilypond[quote,ragged-right,verbatim] 1359\relative { 1360 \time 12/16 1361 \hide Staff.TimeSignature 1362 c''4 b8 c d16 c d8 | 1363 g,8 a16 b8 c d4 e16 | 1364 e8 1365} 1366@end lilypond 1367 1368@noindent 1369La métrique a bien disparu dans les deux cas, mais la commande a 1370laissé un blanc en lieu et place du chiffrage. Ce peut être 1371souhaitable dans le cadre d'un exercice, afin que les élèves aient 1372la place pour compléter, mais dans d'autres circonstances, ce peut 1373être gênant. Pour y remédier, attribuons plutôt au stencil des 1374métriques la valeur @code{#f} : 1375 1376@cindex TimeSignature, exemple de dérogation 1377@cindex stencil, exemple d'utilisation de la propriété 1378 1379@lilypond[quote,fragment,ragged-right,verbatim] 1380\relative { 1381 \time 12/16 1382 \omit Staff.TimeSignature 1383 c''4 b8 c d16 c d8 | 1384 g,8 a16 b8 c d4 e16 | 1385 e8 1386} 1387@end lilypond 1388 1389@noindent 1390La différence est flagrante : le fait d'attribuer au stencil la 1391valeur @code{#f} ou grâce à @code{\omit} supprime totalement 1392l'objet, tandis que le fait de le rendre @code{transparent} -- ce 1393qui s'obtient aussi par la commande @code{\hide} -- le laisse en 1394place, mais de façon invisible. 1395 1396 1397@node La propriété color 1398@unnumberedsubsubsec La propriété @code{color} 1399@translationof The color property 1400 1401@cindex color, propriété 1402 1403Essayons enfin de rendre les barres de mesure invisibles en les colorant 1404en blanc. La difficulté est de savoir si les barres blanches vont 1405couper ou non les lignes de la portée aux endroits où elles se 1406croisent. Vous verrez dans les exemples ci-dessous que cela peut se 1407produire, sans qu'on le sache à l'avance. Les explications de ce 1408phénomène et les solutions pour y remédier sont exposées dans 1409@ruser{Blanchiment des objets}. Pour le moment, acceptons cet 1410inconvénient et concentrons-nous sur l'apprentissage de la gestion des 1411couleurs. 1412 1413La @code{grob-interface} indique que la valeur de la propriété 1414@code{color} est une liste, sans plus d'explication. En fait, cette 1415liste est une liste de valeurs en unités internes ; pour éviter 1416d'avoir à chercher ce qu'il faut y mettre, il existe différents moyens 1417d'indiquer la couleur. Le premier moyen consiste à utiliser l'une des 1418couleurs @emph{CSS} de la première @ruser{Liste des couleurs}. 1419Pour mettre les barres de mesure en blanc, on écrit : 1420 1421@cindex BarLine, exemple de dérogation 1422@cindex color, exemple d'utilisation de la propriété 1423@cindex CSS, couleurs 1424@cindex couleurs CSS 1425 1426@lilypond[quote,ragged-right,verbatim] 1427\relative { 1428 \time 12/16 1429 \override Staff.BarLine.color = "white" 1430 c''4 b8 c d16 c d8 | 1431 g,8 a16 b8 c d4 e16 | 1432 e8 1433} 1434@end lilypond 1435 1436@noindent 1437et nous constatons que les barres de mesure sont une fois de plus 1438invisibles. Attention : aucune apostrophe ne précède @code{white} -- il 1439ne s'agit pas d'un symbole, mais d'une chaîne de caractères mappée dans 1440une liste prédéfinie de valeurs internes. La syntaxe de Lilypond, à ce 1441propos, ressemble en tout point au @uref{https://www.w3.org/Style/CSS/, 1442langage CSS} couremment utilisé pour les pages internet. En plus des 1443noms prédéfinis, il est possible de spécifier une couleur par un code 1444hexadécimal : 1445 1446@cindex BarLine, exemple de dérogation 1447@cindex color, exemple d'utilisation de la propriété 1448 1449@lilypond[quote,ragged-right,verbatim] 1450\relative { 1451 \time 12/16 1452 \override Staff.BarLine.color = "#FFFFFF" 1453 c''4 b8 c d16 c d8 | 1454 g,8 a16 b8 c d4 e16 | 1455 e8 1456} 1457@end lilypond 1458 1459@noindent 1460 1461@cindex rgb, couleur 1462@cindex couleurs rgb 1463 1464@funindex rgb-color 1465 1466Un autre moyen d'ajouter des couleurs à une partition consiste à 1467recourir à une fonction. Deux fonctions sont utiles à cet égard : la 1468fonction @code{x11-colors} que nous verrons plus avant, et la fonction 1469@code{rgb-colors} qui, quant à elle, illustre la logique interne de 1470LilyPond. Cette fonction prend trois arguments, donnant respectivement 1471l'intensité du rouge, du vert et du bleu. Ces arguments prennent des 1472valeurs comprises entre 0 et 1. Ainsi, pour choisir la couleur rouge, la 1473valeur serait @code{(rgb-color 1 0 0)} ; pour le blanc, ce serait 1474@code{(rgb-color 1 1 1)} : 1475 1476@cindex BarLine, exemple de dérogation 1477@cindex color, exemple d'utilisation de la propriété 1478 1479@lilypond[quote,ragged-right,verbatim] 1480\relative { 1481 \time 12/16 1482 \override Staff.BarLine.color = #(rgb-color 1 1 1) 1483 c''4 b8 c d16 c d8 | 1484 g,8 a16 b8 c d4 e16 | 1485 e8 1486} 1487@end lilypond 1488 1489+@noindent 1490Notez bien que, dans ce cas, l'intégralité de l'appel à cette fonction 1491est borné par des parenthèses. Il en va de même pour la fonction 1492@code{x11-colors} que nous avions laissée de côté. 1493 1494@cindex couleur X11 1495@cindex X11, couleurs 1496 1497@funindex x11-color 1498La fonction @code{x11-colors}, elle aussi, convertit les noms 1499symboliques de couleur en une liste de valeurs internes, mais elle offre 1500plus de choix que les couleurs CSS comme on peut le constater dans la 1501@ruser{Liste des couleurs}. Par exemple, elle comporte une échelle de 1502gris qui va du noir (@code{'grey0}) au blanc (@code{'grey100}), avec 1503un pas de 1. Essayons de l'utiliser en attribuant à tous les objets de 1504notre exemple différentes nuances de gris : 1505 1506@cindex StaffSymbol, exemple de dérogation 1507@cindex TimeSignature, exemple de dérogation 1508@cindex Clef, exemple de dérogation 1509@cindex NoteHead, exemple de dérogation 1510@cindex Stem, exemple de dérogation 1511@cindex BarLine, exemple de dérogation 1512@cindex color, exemple d'utilisation de la propriété 1513@cindex x11-color, exemple d'utilisation 1514 1515@lilypond[quote,ragged-right,verbatim] 1516\relative { 1517 \time 12/16 1518 \override Staff.StaffSymbol.color = #(x11-color 'grey30) 1519 \override Staff.TimeSignature.color = #(x11-color 'grey60) 1520 \override Staff.Clef.color = #(x11-color 'grey60) 1521 \override Voice.NoteHead.color = #(x11-color 'grey85) 1522 \override Voice.Stem.color = #(x11-color 'grey85) 1523 \override Staff.BarLine.color = #(x11-color 'grey10) 1524 c''4 b8 c d16 c d8 | 1525 g,8 a16 b8 c d4 e16 | 1526 e8 1527} 1528@end lilypond 1529 1530@noindent 1531Vous remarquerez le contexte associé à chacun des objets. Une erreur 1532sur ce point empêcherait la commande de fonctionner. Souvenez-vous que 1533le contexte est celui dans lequel est placé le graveur approprié. Pour 1534chaque graveur, on peut trouver son contexte par défaut en partant de 1535l'objet lui-même, puis en cherchant le graveur qui le produit ; la 1536page du graveur dans la RPI nous indique alors le contexte dans lequel 1537le graveur se trouve normalement. 1538 1539 1540@node Taille des objets 1541@subsection Taille des objets 1542@translationof Size of objects 1543 1544@cindex modification de la taille des objets 1545@cindex taille d'objets 1546@cindex objets, taille 1547@cindex objets, modification de taille 1548 1549Pour commencer, reprenons l'exemple qui se trouvait dans 1550@ref{Expressions musicales imbriquées}, qui montrait comment créer une 1551nouvelle portée temporaire, du type @rglos{ossia}. 1552 1553@cindex alignAboveContext, exemple d'utilisation de la propriété 1554@cindex @code{\with}, exemple 1555 1556@lilypond[quote,ragged-right,verbatim] 1557\new Staff ="main" { 1558 \relative { 1559 r4 g'8 g c4 c8 d | 1560 e4 r8 1561 << 1562 { f8 c c } 1563 \new Staff \with { 1564 alignAboveContext = "main" } 1565 { f8 f c } 1566 >> 1567 r4 | 1568 } 1569} 1570@end lilypond 1571 1572Normalement, les ossias ne comportent ni clef ni indication de mesure, 1573et elles sont imprimées légèrement plus petit que la portée principale. 1574Nous avons déjà appris à enlever la clef et la métrique -- il suffit de 1575régler le stencil de chacun sur @code{#f}, comme ceci : 1576 1577@cindex alignAboveContext, exemple d'utilisation de la propriété 1578@cindex @code{\with}, exemple 1579@cindex Clef, exemple de dérogation 1580@cindex TimeSignature, exemple de dérogation 1581@funindex \omit 1582 1583@lilypond[quote,ragged-right,verbatim] 1584\new Staff ="main" { 1585 \relative { 1586 r4 g'8 g c4 c8 d | 1587 e4 r8 1588 << 1589 { f8 c c } 1590 \new Staff \with { 1591 alignAboveContext = "main" 1592 } 1593 { 1594 \omit Staff.Clef 1595 \omit Staff.TimeSignature 1596 { f8 f c } 1597 } 1598 >> 1599 r4 | 1600 } 1601} 1602@end lilypond 1603 1604@noindent 1605La paire d'accolades ajoutée après la clause @code{\with} est nécessaire 1606pour être sûr que les retouches (@code{\override}) ainsi que la musique 1607qui se trouvent à l'intérieur soient bien appliquées à la portée 1608d'ossia. 1609 1610Mais alors, quelle différence y a-t-il à modifier le contexte de portée 1611au moyen de @code{\with} ou à modifier les stencils de la clef et de la 1612métrique avec @code{\override} ou @code{\omit} comme ici ? La 1613principale différence est que les changements opérés dans une 1614clause @code{\with} sont réalisés au moment où le contexte est 1615créé et restent par la suite les valeurs @strong{par défaut} aussi 1616longtemps que ce contexte existe, tandis que les commandes 1617@code{\set} ou @code{\override} insérées dans la musique sont 1618dynamiques -- elles provoquent des changements synchronisés avec 1619un point particulier de la musique. Si les changements sont annulés ou 1620désactivés par @code{\unset} ou @code{\revert}, les réglages reprennent 1621leurs valeurs par défaut, c'est-à-dire celles qui ont été fixées dans la 1622clause @code{\with}, ou, en l'absence de celle-ci, les valeurs par 1623défaut normales. 1624 1625Certaines propriétés de contexte ne peuvent être modifiées que dans une 1626clause @code{\with}. Il s'agit des propriétés qu'on ne peut évidemment 1627plus changer après que le contexte a été créé. C'est le cas de 1628@code{alignAboveContext} et de son pendant, @code{alignBelowContext} 1629-- une fois que la portée a été créée, son alignement est décidé et cela 1630n'aurait aucun sens de vouloir le modifier par la suite. 1631 1632Dans une clause @code{\with}, on peut aussi régler les valeurs par 1633défaut des propriétés d'un objet. Il suffit d'utiliser la commande 1634@code{\override} normale, sans s'occuper du nom de contexte 1635puisqu'il ne fait pas de doute qu'il s'agit du contexte en cours de 1636modification par la clause @code{\with}. Il se produirait même une 1637erreur si le contexte était précisé. 1638 1639Remplaçons donc l'exemple ci-dessus par celui-ci : 1640 1641@cindex alignAboveContext, exemple d'utilisation de la propriété 1642@cindex @code{\with}, exemple 1643@cindex Clef, exemple de dérogation 1644@cindex TimeSignature, exemple de dérogation 1645 1646@lilypond[quote,ragged-right,verbatim] 1647\new Staff ="main" { 1648 \relative { 1649 r4 g'8 g c4 c8 d | 1650 e4 r8 1651 << 1652 { f8 c c } 1653 \new Staff \with { 1654 alignAboveContext = "main" 1655 % Don't print clefs in this staff 1656 \override Clef.stencil = ##f 1657 % Don't print time signatures in this staff 1658 \override TimeSignature.stencil = ##f 1659 } 1660 { f8 f c } 1661 >> 1662 r4 | 1663 } 1664} 1665@end lilypond 1666 1667Nous pourrions tout aussi bien utiliser les raccourcis @code{\hide} et 1668@code{\omit} pour activer la propriété @code{transparent} et désactiver 1669le @code{stencil}, ce qui donnerait : 1670 1671@lilypond[quote,ragged-right,verbatim] 1672\new Staff ="main" { 1673 \relative { 1674 r4 g'8 g c4 c8 d | 1675 e4 r8 1676 << 1677 { f8 c c } 1678 \new Staff \with { 1679 alignAboveContext = "main" 1680 % Don't print clefs in this staff 1681 \omit Clef 1682 % Don't print time signatures in this staff 1683 \omit TimeSignature 1684 } 1685 { f8 f c } 1686 >> 1687 r4 | 1688 } 1689} 1690@end lilypond 1691 1692Venons-en finalement au changement de taille des objets. 1693 1694Certains objets sont créés comme des glyphes choisis dans une police de 1695caractères. C'est le cas des têtes de notes, des altérations, des 1696@emph{markup}, des clefs, des métriques, des nuances et des paroles. 1697Pour changer leur taille, on modifie la propriété @code{font-size}, 1698comme nous le verrons rapidement. D'autres objets, comme les liaisons 1699de phrasé ou de prolongation -- en général les objets étendus -- sont 1700dessinés à la demande, si bien qu'aucune @code{font-size} ne leur est 1701associée. Ces objets tirent généralement leur dimension des objets 1702auxquels ils sont rattachés, de sorte qu'on ne doit pas avoir à les 1703redimensionner à la main. D'autres propriétés, comme la hauteur des 1704hampes et des barres de mesure, l'épaisseur des ligatures et d'autres 1705lignes, et l'écartement des lignes de portée, doivent encore être 1706modifiées de façon particulière. 1707 1708Si l'on revient à l'exemple d'ossia, commençons par changer la taille de 1709police. Nous pouvons employer deux méthodes. Soit nous changeons la 1710taille de police de chaque type d'objet avec des commandes comme 1711celle-ci pour les têtes de notes (@code{NoteHead}) : 1712 1713@example 1714\override NoteHead.font-size = #-2 1715@end example 1716 1717soit nous changeons la taille de toutes les polices à la fois grâce à la 1718propriété @code{fontSize}, en utilisant @code{\set} ou en l'insérant 1719dans une clause @code{\with} (mais alors sans le @code{\set}). 1720 1721@example 1722\set fontSize = #-2 1723@end example 1724 1725Chacune de ces méthodes réduira la taille de police de deux points par 1726rapport à sa valeur précédente, sachant que chaque point réduit ou 1727augmente la taille d'environ 12 %. 1728 1729Essayons sur l'exemple d'ossia : 1730 1731@cindex alignAboveContext, exemple d'utilisation de la propriété 1732@cindex @code{\with}, exemple 1733@cindex Clef, exemple de dérogation 1734@cindex TimeSignature, exemple de dérogation 1735@cindex fontSize, exemple d'utilisation de la propriété 1736 1737@lilypond[quote,ragged-right,verbatim] 1738\new Staff ="main" { 1739 \relative { 1740 r4 g'8 g c4 c8 d | 1741 e4 r8 1742 << 1743 { f8 c c } 1744 \new Staff \with { 1745 alignAboveContext = "main" 1746 \omit Clef 1747 \omit TimeSignature 1748 % Reduce all font sizes by ~24% 1749 fontSize = #-2 1750 } 1751 { f8 f c } 1752 >> 1753 r4 | 1754 } 1755} 1756@end lilypond 1757 1758Ce n'est pas encore parfait. Les têtes de notes et les crochets sont 1759plus petits mais, proportionnellement, les hampes sont trop longues et 1760les lignes de la portée trop espacées. Il faut donc les réduire dans 1761les mêmes proportions que les polices de caractères. La prochaine 1762sous-section montrera comment faire. 1763 1764 1765@node Longueur et épaisseur des objets 1766@subsection Longueur et épaisseur des objets 1767@translationof Length and thickness of objects 1768 1769@cindex distance 1770@cindex épaisseur 1771@cindex longueur 1772@cindex magstep 1773@cindex taille, modification 1774@cindex hampe, modification de longueur 1775@cindex écartement des lignes, modification 1776 1777Dans LilyPond, les écartements et longueurs sont généralement mesurés en 1778« intervalles de lignes » (@emph{staff-spaces} en anglais), 1779c'est-à-dire l'écartement qui sépare deux lignes adjacentes dans la 1780portée. Plus rarement, il est question de demi-intervalles de lignes. 1781Les propriétés d'épaisseur (@code{thickness}), quant à elles, sont 1782généralement mesurées en unités d'une propriété interne appelée 1783« épaisseur de ligne » (@code{line-thickness}). Par exemple, les 1784lignes de (de)crescendo présentent par défaut une épaisseur d'une 1785unité de @code{line-thickness}, alors que l'épaisseur d'une hampe 1786est de 1,3. Toutefois, certaines propriétés d'épaisseur sont 1787différentes : par exemple, l'épaisseur des ligature -- 1788@code{beam-thickness} -- se mesure en espaces de portée. 1789 1790Dans ces conditions, comment ajuster les longueurs à la taille des 1791polices de caractères ? La solution consiste à utiliser une 1792fonction spéciale appelée @code{magstep} -- pseudo facteur de zoom --, 1793créée précisément dans ce but. Elle comporte un argument, le changement 1794de taille de police (@code{#-2} dans l'exemple précédent), à partir 1795duquel elle applique un facteur de mise à l'échelle qui réduit, ou 1796augmente, les objets en question. Voici comment elle s'utilise : 1797 1798@cindex alignAboveContext, exemple d'utilisation de la propriété 1799@cindex @code{\with}, exemple 1800@cindex Clef, exemple de dérogation 1801@cindex TimeSignature, exemple de dérogation 1802@cindex fontSize , exemple d'utilisation de la propriété 1803@cindex StaffSymbol, exemple de dérogation 1804@cindex magstep, exemple d'utilisation de la fonction 1805@cindex staff-space, exemple d'utilisation de la propriété 1806@cindex stencil, exemple d'utilisation de la propriété 1807 1808@lilypond[quote,ragged-right,verbatim] 1809\new Staff ="main" { 1810 \relative { 1811 r4 g'8 g c4 c8 d | 1812 e4 r8 1813 << 1814 { f8 c c } 1815 \new Staff \with { 1816 alignAboveContext = "main" 1817 \omit Clef 1818 \omit TimeSignature 1819 fontSize = #-2 1820 % Reduce stem length and line spacing to match 1821 \override StaffSymbol.staff-space = #(magstep -2) 1822 } 1823 { f8 f c } 1824 >> 1825 r4 | 1826 } 1827} 1828@end lilypond 1829 1830@noindent 1831Puisque la longueur des hampes et plusieurs autres propriétés de 1832longueur sont calculées par rapport à la valeur de la propriété 1833@code{staff-space}, elles sont automatiquement mises à l'échelle. Vous 1834remarquerez que cela n'affecte que la dimension verticale de l'ossia -- 1835la dimension horizontale étant déterminée par les objets de la portée 1836principale de façon à rester synchronisée vis-à-vis d'elle, elle n'est 1837pas affectée par tous ces changements de taille. Bien sûr, si l'échelle 1838de toute la portée principale était modifiée, tout le placement 1839horizontal s'en trouverait affecté. Il en sera question plus bas dans 1840cette section. 1841 1842Voilà qui complète la création d'une ossia. Les taille et longueur de 1843tous les objets peuvent être modifiées de manière analogue. 1844 1845Pour de petits changements d'échelle, comme dans l'exemple ci-dessus, il 1846n'est généralement pas utile d'ajuster l'épaisseur des différentes 1847lignes telles que les barres de mesure, les ligatures, les soufflets de 1848crescendo ou decrescendo, les liaisons, etc. Si l'épaisseur d'un objet 1849en particulier doit être ajustée, le mieux est de modifier sa propriété 1850@code{thickness}. Nous avons vu plus haut, dans 1851@ref{Propriétés des objets de rendu}, un exemple de modification de 1852l'épaisseur des liaisons. L'épaisseur de tous les objets tracés 1853(c'est-à-dire ceux qui ne proviennent pas d'une police de caractère) 1854peut être changée de la même manière. 1855 1856 1857@node Positionnement des objets 1858@section Positionnement des objets 1859@translationof Placement of objects 1860 1861 @menu 1862* Comportement automatique:: 1863* Objets inclus dans la portée:: 1864* Objets hors de la portée:: 1865@end menu 1866 1867 1868@node Comportement automatique 1869@subsection Comportement automatique 1870@translationof Automatic behavior 1871 1872@cindex objets de la portée 1873@cindex objets extérieurs à la portée 1874@cindex portée, objets de la 1875@cindex portée, objets extérieurs à la 1876 1877Dans la notation musicale, il y a des objets qui appartiennent à la 1878portée et d'autres qui sont placés à l'extérieur de la portée. On les 1879appelle respectivement les « objets de la portée » (@emph{within-staff 1880objects} en anglais) et les « objets extérieurs à la portée » 1881(@emph{outside-staff objects} en anglais). 1882 1883Les objets de la portée sont ceux qui sont placés sur la portée 1884-- les têtes de notes et les hampes, les altérations, etc. Leur 1885position est généralement déterminée par la musique elle-même -- ils 1886sont placés verticalement sur des lignes spécifiques ou sont liés à 1887d'autres objets placés de cette manière. Normalement, les collisions 1888entre les têtes et queues de notes et les altérations dans des accords 1889proches sont évitées automatiquement. Comme nous le verrons rapidement, 1890il existe des commandes et des possibilités de retouche qui permettent 1891de modifier ce comportement automatique. 1892 1893Parmi les objets extérieurs à la portée, on compte des éléments comme 1894les marques de reprise, les indications de texte ou de nuance. Dans 1895LilyPond, la règle est de placer verticalement ces objets extérieurs à 1896la portée le plus près possible de la portée, tout en évitant la 1897collision avec d'autres objets. LilyPond utilise la propriété 1898@code{outside-staff-priority} pour déterminer l'ordre selon lequel 1899placer ces objets, de la manière suivante : 1900 1901D'abord, LilyPond dresse la liste de tous les objets extérieurs à la 1902portée. Puis ceux-ci sont classés suivant leur 1903@code{outside-staff-priority}. Enfin, ils sont pris un par un, en 1904commençant par les objets avec la @code{outside-staff-priority} la plus 1905basse, et placés de façon à ne pas entrer en collision avec d'autres 1906objets déjà positionnés. Cela signifie que, si deux @emph{grobs} 1907extérieurs à la portée doivent occuper la même place, c'est celui qui a 1908la @code{outside-staff-priority} la plus basse qui est placé le plus 1909près de la portée. Et si deux objets ont la même 1910@code{outside-staff-priority}, le premier rencontré sera placé au plus 1911près de la portée. 1912 1913Dans l'exemple suivant, tous les @emph{markup} ont la même priorité, 1914dans la mesure où rien n'est indiqué explicitement. Vous remarquerez 1915que @code{Text3} est également positionné près de la portée, juste 1916en-dessous de @code{Text2}. 1917 1918@cindex markup, exemple 1919 1920@lilypond[quote,fragment,ragged-right,verbatim] 1921c''2^"Text1" 1922c''2^"Text2" | 1923c''2^"Text3" 1924c''2^"Text4" | 1925@end lilypond 1926 1927Les portées aussi sont positionnées, par défaut, le plus près possible 1928les unes des autres, en ménageant tout de même une certaine séparation. 1929Si des notes se rapprochent nettement d'une portée adjacente, elles ne 1930forceront les portées à s'écarter que s'il y a un risque de 1931chevauchement. 1932 1933@lilypond[quote,ragged-right,verbatim] 1934<< 1935 \new Staff { 1936 \relative { c'4 a, } 1937 } 1938 \new Staff { 1939 \relative { c''''4 a, } 1940 } 1941>> 1942@end lilypond 1943 1944 1945@node Objets inclus dans la portée 1946@subsection Objets inclus dans la portée 1947@translationof Within-staff objects 1948 1949Nous avons vu que les commandes @code{\voiceXXX} jouent sur la 1950direction des liaisons, des doigtés et sur tout autre élément lié à 1951l'orientation des hampes. Ces commandes sont essentielles dans 1952la musique polyphonique pour distinguer des lignes mélodiques 1953entremêlées. Mais il arrive qu'on ait besoin de modifier ce 1954comportement automatique. On peut le faire pour toutes les parties de 1955la musique ou juste pour une note. La propriété qui contrôle ce 1956comportement est la propriété @code{direction} de chaque objet. 1957Expliquons d'abord ce qu'elle fait, puis nous présenterons un certain 1958nombre de commandes déjà prêtes qui évitent, pour les modifications les 1959plus courantes, d'avoir à encoder les retouches. 1960 1961Certains objets comme les traits des liaisons se recourbent tantôt 1962vers le haut, tantôt vers le bas ; d'autres encore, comme les hampes et 1963les crochets, peuvent se décaler vers la gauche ou vers la droite selon 1964qu'ils pointent vers le haut ou vers le bas. Ce comportement est géré 1965automatiquement dès lors que @code{direction} est activé. 1966 1967 1968@menu 1969* La propriété direction:: 1970* Doigtés:: 1971@end menu 1972 1973 1974@node La propriété direction 1975@unnumberedsubsubsec La propriété @code{direction} 1976@translationof The direction property 1977 1978@cindex down 1979@cindex up 1980@cindex center 1981@cindex neutral 1982 1983L'exemple ci-dessous montre dans la première mesure le positionnement 1984par défaut des liaisons -- celles des notes les plus hautes en surplomb 1985des têtes et celles des notes les plus basses au-dessous ; viennent 1986ensuite une mesure avec les liaisons forcées vers le bas, puis une 1987mesure avec les liaisons forcées vers le haut, et pour finir une mesure 1988où elles adoptent de nouveau le comportement par défaut. 1989 1990@cindex Slur, exemple de dérogation 1991@cindex direction, exemple d'utilisation de la propriété 1992 1993@lilypond[quote,fragment,verbatim] 1994a'4( g') c''( a') | 1995\override Slur.direction = #DOWN 1996a'4( g') c''( a') | 1997\override Slur.direction = #UP 1998a'4( g') c''( a') | 1999\revert Slur.direction 2000a'4( g') c''( a') | 2001@end lilypond 2002 2003Nous utilisons ici les directions @code{DOWN} et @code{UP}. Elles 2004correspondent respectivement aux valeurs @code{-1} et @code{+1}, 2005que l'on peut utiliser à la place. La valeur @code{0} peut aussi être 2006utilisée dans certains cas. Elle est interprétée comme un @code{UP} 2007pour les liaisons, et comme un « centré » pour d'autres objets. Il 2008existe une direction, @code{CENTER}, qui correspond à la 2009valeur @code{0}. 2010 2011Quoi qu'il en soit, ces retouches manuelles sont rarement utilisées car 2012il existe des équivalents sous forme de commandes prédéfinies. Voici un 2013tableau des plus courantes. Lorsque ce n'est pas évident, leur 2014signification est précisée. 2015 2016@multitable @columnfractions .2 .2 .25 .35 2017@headitem Bas/Gauche 2018 @tab Haut/Droite 2019 @tab Annulation 2020 @tab Effet 2021@item @code{\arpeggioArrowDown} 2022 @tab @code{\arpeggioArrowUp} 2023 @tab @code{\arpeggioNormal} 2024 @tab Flèche en bas, en haut, ou pas de flèche 2025@item @code{\dotsDown} 2026 @tab @code{\dotsUp} 2027 @tab @code{\dotsNeutral} 2028 @tab Déplacement des points pour éviter les lignes de portée 2029@item @code{\dynamicDown} 2030 @tab @code{\dynamicUp} 2031 @tab @code{\dynamicNeutral} 2032 @tab 2033@item @code{\phrasingSlurDown} 2034 @tab @code{\phrasingSlurUp} 2035 @tab @code{\phrasingSlurNeutral} 2036 @tab Attention : à distinguer des commandes de liaison ci-dessous 2037@item @code{\slurDown} 2038 @tab @code{\slurUp} 2039 @tab @code{\slurNeutral} 2040 @tab 2041@item @code{\stemDown} 2042 @tab @code{\stemUp} 2043 @tab @code{\stemNeutral} 2044 @tab 2045@item @code{\textSpannerDown} 2046 @tab @code{\textSpannerUp} 2047 @tab @code{\textSpannerNeutral} 2048 @tab Le texte saisi en tant qu'extension est au-dessous/au-dessus de 2049 la portée 2050@item @code{\tieDown} 2051 @tab @code{\tieUp} 2052 @tab @code{\tieNeutral} 2053 @tab 2054@item @code{\tupletDown} 2055 @tab @code{\tupletUp} 2056 @tab @code{\tupletNeutral} 2057 @tab Les n-olets sont au-dessous/au-dessus des notes 2058@end multitable 2059 2060Les variantes @code{\xxxNeutral} et @code{\xxxNormal} de ces 2061commandes sont implémentées à l'aide de @code{\revert} ; elles 2062@strong{ne doivent pas} être précédées de @code{\once}. Pour 2063limiter les effets des autres commandes prédéfinies (fonctionnant 2064à base de @code{\override}) à une seule note, il faut les faire 2065précéder d'un @code{\once}, comme pour toute dérogation. 2066 2067Dans le cas où un seul objet de rendu doit déroger à la règle, LilyPond 2068dispose des indicateurs de positionnement @code{^} et @code{_} : 2069 2070@lilypond[quote,fragment,verbatim] 2071a'4( g') c''( a') | 2072a'4^( g') c''_( a') | 2073@end lilypond 2074 2075 2076@node Doigtés 2077@unnumberedsubsubsec Doigtés 2078@translationof Fingering 2079 2080@cindex doigtés, positionnement 2081@cindex doigtés, accords 2082 2083Le placement des doigtés sur des notes simples peut aussi être contrôlé 2084par la propriété @code{direction}, mais le changement de 2085@code{direction} n'a pas d'effet sur les accords. Comme nous le 2086verrons, il existe des commandes qui permettent de contrôler le doigté 2087sur chaque note d'un accord, en plaçant l'indication de doigté 2088au-dessus, en dessous, à gauche ou à droite de chaque note. 2089 2090Tout d'abord, voici l'effet de @code{direction} sur le doigté lié à une 2091note simple. La première mesure montre le comportement par défaut, et 2092les deux suivantes montrent l'effet lorsqu'on indique @code{DOWN} et 2093@code{UP} : 2094 2095@cindex doigtés, exemple de dérogation 2096@cindex direction, exemple d'utilisation de la propriété 2097 2098@lilypond[quote,verbatim] 2099\relative { 2100 c''4-5 a-3 f-1 c'-5 | 2101 \override Fingering.direction = #DOWN 2102 c4-5 a-3 f-1 c'-5 | 2103 \override Fingering.direction = #UP 2104 c4-5 a-3 f-1 c'-5 | 2105} 2106@end lilypond 2107 2108Le fait d'intervenir sur la propriété @code{direction} n'est sûrement 2109pas la façon la plus simple de placer manuellement les doigtés au-dessus 2110ou en dessous des notes ; mieux vaut utiliser @code{_} ou @code{^} 2111devant le chiffre de doigté plutôt que @code{-}. Voici ce que donne 2112l'exemple précédent avec cette méthode : 2113 2114@cindex doigtés, exemple 2115 2116@lilypond[quote,verbatim] 2117\relative { 2118 c''4-5 a-3 f-1 c'-5 | 2119 c4_5 a_3 f_1 c'_5 | 2120 c4^5 a^3 f^1 c'^5 | 2121} 2122@end lilypond 2123 2124La propriété @code{direction} ne fonctionne pas pour les accords alors 2125que les préfixes de direction, @code{_} et @code{^}, fonctionnent. Par 2126défaut, le doigté est placé automatiquement à la fois au-dessus et 2127au-dessous des notes d'un accord, comme ceci : 2128 2129@cindex doigtés, exemple 2130 2131@lilypond[quote,verbatim] 2132\relative { 2133 <c''-5 g-3>4 2134 <c-5 g-3 e-2>4 2135 <c-5 g-3 e-2 c-1>4 2136} 2137@end lilypond 2138 2139@noindent 2140mais il est possible de forcer manuellement vers le haut ou vers le bas 2141le placement de tous ou certains chiffres de doigté, comme ceci : 2142 2143@cindex doigtés, exemple 2144 2145@lilypond[quote,verbatim] 2146\relative { 2147 <c''-5 g-3 e-2 c-1>4 2148 <c^5 g_3 e_2 c_1>4 2149 <c^5 g^3 e^2 c_1>4 2150} 2151@end lilypond 2152 2153On peut aller encore plus loin dans le positionnement des doigtés pour 2154chacune des notes d'un accord grâce à la commande 2155@code{\set fingeringOrientations}. La syntaxe de cette commande est : 2156 2157@example 2158\set fingeringOrientations = #'([up] [left/right] [down]) 2159@end example 2160 2161@noindent 2162On utilise @code{\set} car @code{fingeringOrientations} est une 2163propriété du contexte @code{Voice}, créée et utilisée par le graveur 2164@code{New_fingering_engraver}. 2165 2166On peut attribuer à cette propriété une liste composée de une à trois 2167valeurs. Celles-ci déterminent si l'indication de doigté doit être 2168placée au-dessus (lorsque @code{up} apparaît dans la liste), au-dessous 2169(lorsque @code{down} apparaît), à gauche (lorsque @code{left} apparaît) 2170ou à droite (lorsque @code{right} apparaît). En revanche, si une valeur 2171n'est pas dans la liste, aucun doigté n'ira à cet emplacement. LilyPond 2172garde ces contraintes en mémoire et recherche le meilleur emplacement 2173pour le doigté des notes des accords suivants. Vous remarquerez que 2174@code{left} et @code{right} s'excluent l'un l'autre -- l'indication de 2175doigté ne peut être placée que d'un côté ou de l'autre, pas des deux. 2176 2177@warning{Pour contrôler à l'aide de cette commande le placement du 2178doigté sur une note simple, il faut la saisir comme un accord composé 2179d'une note unique, en l'encadrant de chevrons.} 2180 2181Voici quelques exemples : 2182 2183@cindex doigtés, exemple 2184@cindex @code{\set}, exemple d'utilisation 2185@cindex fingeringOrientations, exemple d'utilisation de la propriété 2186 2187@lilypond[quote,ragged-right,verbatim] 2188\relative { 2189 \set fingeringOrientations = #'(left) 2190 <f'-2>4 2191 <c-1 e-2 g-3 b-5>4 2192 \set fingeringOrientations = #'(left) 2193 <f-2>4 2194 <c-1 e-2 g-3 b-5>4 | 2195 \set fingeringOrientations = #'(up left down) 2196 <f-2>4 2197 <c-1 e-2 g-3 b-5>4 2198 \set fingeringOrientations = #'(up left) 2199 <f-2>4 2200 <c-1 e-2 g-3 b-5>4 | 2201 \set fingeringOrientations = #'(right) 2202 <f-2>4 2203 <c-1 e-2 g-3 b-5>4 2204} 2205@end lilypond 2206 2207@noindent 2208Si les indications de doigtés paraissent un peu serrées, on peut 2209toujours réduire la taille de police (@code{font-size}). La valeur par 2210défaut donnée dans la RPI à la page de l'objet @code{Fingering} étant 2211@code{-5}, essayons @w{@code{-7}} : 2212 2213@lilypond[quote,ragged-right,verbatim] 2214\relative { 2215 \override Fingering.font-size = #-7 2216 \set fingeringOrientations = #'(left) 2217 <f'-2>4 2218 <c-1 e-2 g-3 b-5>4 2219 \set fingeringOrientations = #'(left) 2220 <f-2>4 2221 <c-1 e-2 g-3 b-5>4 | 2222 \set fingeringOrientations = #'(up left down) 2223 <f-2>4 2224 <c-1 e-2 g-3 b-5>4 2225 \set fingeringOrientations = #'(up left) 2226 <f-2>4 2227 <c-1 e-2 g-3 b-5>4 | 2228 \set fingeringOrientations = #'(right) 2229 <f-2>4 2230 <c-1 e-2 g-3 b-5>4 2231} 2232@end lilypond 2233 2234 2235@node Objets hors de la portée 2236@subsection Objets hors de la portée 2237@translationof Outside-staff objects 2238 2239Les objets extérieurs à la portée sont placés automatiquement de façon à 2240éviter les collisions. Il est toutefois possible, grâce à 2241différentes méthodes, de rectifier un positionnement automatique 2242qui se révèlerait ne pas être optimal. 2243 2244@menu 2245* La propriété outside-staff-priority:: 2246* La commande textLengthOn:: 2247* Positionnement des nuances:: 2248* Dimensionnement des objets graphiques:: 2249@end menu 2250 2251 2252@node La propriété outside-staff-priority 2253@unnumberedsubsubsec La propriété @code{outside-staff-priority} 2254@translationof The outside-staff-priority property 2255 2256Les objets avec la plus petite valeur de la propriété 2257@code{outside-staff-priority} sont placés au plus près de la 2258portée, tandis que les autres sont écartés autant qu'il faut pour 2259éviter les collisions. La @code{outside-staff-priority} est 2260définie dans la @code{grob-interface} ; elle est donc une 2261propriété commune à tous les objets de rendu. Par défaut, elle 2262est réglée sur @code{#f} pour tous les objets de la portée, et 2263porte une valeur numérique appropriée à chacun des objets 2264extérieurs à la portée, à mesure qu'ils sont créés. Le tableau 2265suivant montre la valeur numérique par défaut pour quelques-uns 2266des objets extérieurs à la portée les plus courant. 2267 2268@cindex spanners 2269@cindex bandeaux 2270@cindex extenseurs 2271 2272Vous noterez au passage certaines particularités quant au nom des 2273objets. En effet, des objets à extension sont automatiquement créés 2274dans le but de pouvoir contrôler le positionnement vertical des 2275extrémités d'un @emph{grob} qui commencerait et se terminerait à des 2276instants musicaux différents. C'est la raison pour laquelle modifier le 2277@code{outside-staff-priority} du @emph{grob} sous-jacent n'aura aucun 2278effet. C'est par exemple le cas lorsque vous modifiez l'alignement d'un 2279objet @code{Hairpin} à l'aide de @code{outside-staff-priority} ; 2280puisque le soufflet est associé à un objet @code{DynamicLineSpanner}, 2281c'est sur celui-ci que doit porter l'effet de 2282@code{outside-staff-priority}. L'instruction dérogatoire se place au 2283début du bandeau qui constitue une ligne de base susceptible de contenir 2284plusieurs soufflets ou indications de nuance. 2285 2286@multitable @columnfractions .3 .15 .45 2287@headitem Objet de rendu 2288 @tab Priorité 2289 @tab Contrôle la position de 2290@item @code{RehearsalMark} 2291 @tab @code{1500} 2292 @tab Repère 2293@item @code{MetronomeMark} 2294 @tab @code{1000} 2295 @tab Indication métronomique 2296@item @code{SostenutoPedalLineSpanner} 2297 @tab @code{1000} 2298 @tab Indication de pédale 2299@item @code{SustainPedalLineSpanner} 2300 @tab @code{1000} 2301 @tab 2302@item @code{UnaCordaPedalLineSpanner} 2303 @tab @code{1000} 2304 @tab 2305@item @code{MeasureCounter} 2306 @tab @code{750} 2307 @tab Numéro de mesure 2308@item @code{VoltaBracketSpanner} 2309 @tab @code{600} 2310 @tab Bandeau de répétition 2311@item @code{InstrumentSwitch} 2312 @tab @code{500} 2313 @tab Texte de changement d'instrument 2314@item @code{TextScript} 2315 @tab @code{450} 2316 @tab Texte des @emph{markups} (ou étiquettes) 2317@item @code{MultiMeasureRestText} 2318 @tab @code{450} 2319 @tab Texte sur les silences multimesures 2320@item @code{CombineTextScript} 2321 @tab @code{450} 2322 @tab Texte de parties combinées 2323@item @code{OttavaBracket} 2324 @tab @code{400} 2325 @tab Indication d'octaviation 2326@item @code{TextSpanner} 2327 @tab @code{350} 2328 @tab Bandeau ou extension de texte 2329@item @code{DynamicLineSpanner} 2330 @tab @code{250} 2331 @tab Toutes les marques de nuances 2332@item @code{BarNumber} 2333 @tab @code{100} 2334 @tab Numéro de mesure 2335@item @code{TrillSpanner} 2336 @tab @code{50} 2337 @tab Bandeau de trille 2338@item @code{AccidentalSuggestion} 2339 @tab @code{0} 2340 @tab Altération suggérée 2341@end multitable 2342 2343Voici un exemple qui montre le placement par défaut de certains 2344d'entre eux. 2345 2346@cindex extension de texte 2347@cindex indication d'octaviation 2348 2349@funindex \startTextSpan 2350@funindex \stopTextSpan 2351 2352@cindex TextSpanner, exemple de dérogation 2353@cindex bound-details, exemple d'utilisation de la propriété 2354 2355@lilypond[quote,fragment,ragged-right,verbatim] 2356% Set details for later Text Spanner 2357\override TextSpanner.bound-details.left.text 2358 = \markup { \small \bold Slower } 2359% Place dynamics above staff 2360\dynamicUp 2361% Start Ottava Bracket 2362\ottava #1 2363c''4 \startTextSpan 2364% Add Dynamic Text and hairpin 2365c''4\pp\< 2366c''4 2367% Add Text Script 2368c''4^Text | 2369c''4 c'' 2370% Add Dynamic Text and terminate hairpin 2371c''4\ff c'' \stopTextSpan | 2372% Stop Ottava Bracket 2373\ottava #0 2374c'4 c' c' c' | 2375@end lilypond 2376 2377Cet exemple montre comment créer des extensions de texte (@emph{Text 2378Spanners} en anglais) -- texte avec des longues lignes au-dessus d'un 2379passage musical. L'extension s'étend depuis la commande 2380@code{\startTextSpan} jusqu'à la commande @code{\stopTextSpan} et le 2381format de texte est défini par la commande @code{\override TextSpanner}. 2382Pour de plus amples détails, voir 2383@ruser{Indication textuelle avec extension}. 2384 2385Il montre aussi comment créer des marques d'octaviation. 2386 2387@cindex modification du positionnement des numéros de mesure 2388@cindex numéros de mesure, modification du positionnement 2389@cindex modification du positionnement des indications métronomiques 2390@cindex indications métronomiques, modification du positionnement 2391@cindex modification du positionnement des marques de repère 2392@cindex marques de repère, modification du positionnement 2393 2394Si les valeurs de @code{outside-staff-priority} par défaut ne donnent 2395pas les résultats escomptés, il suffit de modifier la priorité 2396de l'un de ces objets. Supposons que vous vouliez placer l'indication 2397d'octaviation sous le bandeau de texte, dans l'exemple précédent. Tout 2398ce que nous devons faire, c'est regarder la priorité de 2399@code{OttavaBracket} dans la Référence des propriétés internes ou dans 2400le tableau plus haut, et la ramener à une valeur plus basse que celle de 2401@code{TextSpanner}, en gardant à l'esprit que @code{OttavaBracket} est 2402créé dans le contexte @code{Staff} : 2403 2404@cindex TextSpanner, exemple de dérogation 2405@cindex bound-details, exemple d'utilisation de la propriété 2406 2407@lilypond[quote,fragment,ragged-right,verbatim] 2408% Set details for later Text Spanner 2409\override TextSpanner.bound-details.left.text 2410 = \markup { \small \bold Slower } 2411% Place dynamics above staff 2412\dynamicUp 2413% Place following Ottava Bracket below Text Spanners 2414\once \override Staff.OttavaBracket.outside-staff-priority = #340 2415% Start Ottava Bracket 2416\ottava #1 2417c''4 \startTextSpan 2418% Add Dynamic Text 2419c''4\pp 2420% Add Dynamic Line Spanner 2421c''4\< 2422% Add Text Script 2423c''4^Text | 2424c''4 c'' 2425% Add Dynamic Text 2426c''4\ff c'' \stopTextSpan | 2427% Stop Ottava Bracket 2428\ottava #0 2429c'4 c' c' c' | 2430@end lilypond 2431 2432N'oublions pas que certains objets, tels les numéros de mesure, 2433indications métronomiques et marques-repères, sont par défaut attachés 2434au contexte @code{Score}. 2435 2436@cindex liaisons et outside-staff-priority 2437@cindex liaisons et articulations 2438@cindex articulations et liaisons 2439 2440Les liaisons sont intrinsèquement des objets membres de la portée 2441(@emph{within-staff objects}) bien qu'elles la surplombent lorsque les 2442notes auxquelles elles se rattachent sont relativement hautes. Ceci 2443peut avoir pour conséquence de remonter d'autant les objets externes 2444(@emph{outside-staff objects}) tels les articulations. La propriété 2445@code{avoid-slur} de l'articulation en question peut se voir déterminée 2446à @code{'inside} dans le but de « ramener » cette articulation à 2447l'intérieur de la liaison. Cette propriété @code{avoid-slur} ne sera 2448toutefois effective que dans la mesure où la 2449@code{outside-staff-priority} est désactivée (valeur @code{#f}). Dans 2450le même esprit, il est possible d'affecter une valeur numérique 2451particulière à la propriété @code{outside-staff-priority} d'une 2452liaison dans le but de regrouper la liaison avec les objets externes. 2453L'exemple suivant illustre ces deux différentes méthodes. 2454 2455@lilypond[quote,verbatim] 2456\relative c'' { 2457 c4( c^\markup { \tiny \sharp } d4.) c8 | 2458 c4( 2459 \once \override TextScript.avoid-slur = #'inside 2460 \once \override TextScript.outside-staff-priority = ##f 2461 c4^\markup { \tiny \sharp } d4.) c8 | 2462 \once \override Slur.outside-staff-priority = #500 2463 c4( c^\markup { \tiny \sharp } d4.) c8 | 2464} 2465@end lilypond 2466 2467Le fait de changer la @code{outside-staff-priority} peut aussi servir à 2468contrôler le positionnement vertical des objets individuels, quoique le 2469résultat ne soit pas toujours formidable. Imaginons que nous voulions 2470placer « Text3 » au-dessus de « Text4 » dans l'exemple de la section 2471@ref{Comportement automatique}, plus haut. Il nous suffit pour cela de 2472regarder dans la Référence des propriétés internes ou dans le tableau 2473plus haut la priorité de @code{TextScript}, et d'augmenter la priorité 2474de « Text3 » jusqu'à une valeur très haute : 2475 2476@cindex TextScript, exemple de dérogation 2477@cindex outside-staff-priority, exemple d'utilisation de la propriété 2478 2479@lilypond[quote,fragment,ragged-right,verbatim] 2480c''2^"Text1" 2481c''2^"Text2" | 2482\once \override TextScript.outside-staff-priority = #500 2483c''2^"Text3" 2484c''2^"Text4" | 2485@end lilypond 2486 2487S'il est vrai que cela place « Text3 » au-dessus de « Text4 », ça le 2488place aussi plus haut que « Text2 » tandis que « Text4 » dégringole. 2489Ce n'est peut-être pas si bien que ça. En fait, ce que nous aimerions 2490faire, c'est placer toutes les annotations à égale distance de la 2491portée. Pour cela, nous avons besoin d'espacer horizontalement les 2492notes pour laisser plus de place au texte. C'est possible grâce à la 2493commande @code{textLengthOn}. 2494 2495 2496@node La commande textLengthOn 2497@unnumberedsubsubsec La commande @code{@bs{}textLengthOn} 2498@translationof The textLengthOn command 2499 2500@cindex notes, répartition selon le texte 2501 2502@funindex \textLengthOn 2503@funindex \textLengthOff 2504 2505Par défaut, l'espacement horizontal d'un texte produit sous forme de 2506@emph{markup} (ou d'étiquette) n'est pas pris en compte, dans la mesure 2507où ce qui est concerné n'entre pas dans la musique. La commande 2508@code{\textLengthOn} inverse ce comportement, faisant en sorte que les 2509notes soient espacées autant qu'il le faut pour s'adapter au texte : 2510 2511@lilypond[quote,fragment,ragged-right,verbatim] 2512\textLengthOn % Cause notes to space out to accommodate text 2513c''2^"Text1" 2514c''2^"Text2" | 2515c''2^"Text3" 2516c''2^"Text4" | 2517@end lilypond 2518 2519La commande qui permet de revenir au comportement par défaut est 2520@code{\textLengthOff}. Alternativement, lorsque l'instruction 2521@code{\textLengthOn} se limite à un seul instant musical, vous 2522pouvez la préfixer d'un @code{\once}.@* 2523LilyPond dispose de commandes équivalentes et dévolues au 2524traitement des repères et indications de tempo : 2525@code{\markLengthOn} et @code{\markLengthOff}. 2526 2527@cindex étiquette de texte et collision 2528@cindex markup et collision 2529 2530Les textes des @emph{markup} éviteront également les notes qui 2531s'échappent au-dessus de la portée. Si ce n'est pas notre souhait, il 2532est possible de supprimer ce déplacement automatique vers le haut en 2533attribuant à la priorité la valeur @code{#f}. Voici un exemple qui 2534montre comment les textes des @emph{markup} interagissent avec ces types 2535de note. 2536 2537@cindex TextScript, exemple de dérogation 2538@cindex outside-staff-priority, exemple d'utilisation de la propriété 2539 2540@lilypond[quote,ragged-right,verbatim] 2541\relative { 2542 % This markup is short enough to fit without collision 2543 c''2^"Tex" c'' | 2544 R1 | 2545 2546 % This is too long to fit, so it is displaced upwards 2547 c,,2^"Text" c'' | 2548 R1 | 2549 2550 % Turn off collision avoidance 2551 \once \override TextScript.outside-staff-priority = ##f 2552 c,,2^"Long Text " c'' | 2553 R1 | 2554 2555 % Turn off collision avoidance 2556 \once \override TextScript.outside-staff-priority = ##f 2557 \textLengthOn % and turn on textLengthOn 2558 c,,2^"Long Text " % Spaces at end are honored 2559 c''2 | 2560} 2561@end lilypond 2562 2563 2564@node Positionnement des nuances 2565@unnumberedsubsubsec Positionnement des nuances 2566@translationof Dynamics placement 2567 2568@cindex modification du positionnement des nuances 2569@cindex nuances, modification du positionnement 2570 2571Les indications de nuance se placent normalement sous la portée, mais on 2572peut les placer au-dessus avec la commande @code{\dynamicUp}. Elles se 2573positionnent verticalement par rapport à la note à laquelle elles sont 2574liées et se décalent vers le bas (ou le haut) en fonction des objets de 2575la portée comme les liaisons de phrasé ou les numéros de mesure. Cela 2576peut donner d'assez bons résultats, comme le montre cet exemple : 2577 2578@lilypond[quote,ragged-right,verbatim] 2579\relative { 2580 \clef "bass" 2581 \key aes \major 2582 \time 9/8 2583 \dynamicUp 2584 bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! | 2585 ees,2.~\)\mf ees4 r8 | 2586} 2587@end lilypond 2588 2589De toute façon, si les notes et les nuances qui leur sont liées sont 2590trop proches, le positionnement automatique évitera les collisions en 2591déplaçant davantage les nuances suivantes, mais le résultat peut ne 2592pas être très satisfaisant, comme le montre cet exemple artificiel : 2593 2594@lilypond[quote,ragged-right,verbatim,fragment] 2595\dynamicUp 2596\relative { a'4\f b\mf a\mp b\p } 2597@end lilypond 2598 2599@noindent 2600Si une telle situation devait survenir dans de la musique « réelle », 2601il serait préférable d'espacer un peu plus les notes, de façon que les 2602indications de nuance puissent toutes se situer à la même distance de la 2603portée. S'il est possible de faire cela pour les textes de 2604@emph{markup} grâce à la commande @code{\textLengthOn}, il n'existe 2605pas d'équivalent pour les indications de nuance. Il nous faut donc 2606chercher à faire cela avec la commande @code{\override}. 2607 2608 2609@node Dimensionnement des objets graphiques 2610@unnumberedsubsubsec Dimensionnement des objets graphiques 2611@translationof Grob sizing 2612 2613@cindex grob, dimensionnement 2614@cindex dimensionnement des grobs 2615 2616Tout d'abord, nous devons apprendre ce qui détermine la dimension des 2617@emph{grobs}. Tous les @emph{grobs} portent en eux un point de référence 2618qui est utilisé pour les positionner par rapport à leur objet parent. Ce 2619point du @emph{grob} est placé à une distance horizontale, 2620@code{X-offset}, et à une distance verticale, @code{Y-offset}, de son 2621parent. L'étendue horizontale de l'objet est fixée par une paire de 2622nombres, @code{X-extent}, qui donnent la position du coin 2623gauche et du coin droit par rapport au point de référence. De 2624même, l'amplitude verticale est fixée par une paire de nombres, 2625@code{Y-extent}. Ce sont des propriétés communes à tous les 2626@emph{grobs} et que gère la @code{grob-interface}. 2627 2628@cindex @code{extra-spacing-width} 2629 2630Par défaut, la largeur des objets extérieurs à la portée est donnée 2631comme étant nulle, si bien qu'ils peuvent se chevaucher 2632horizontalement. Pour remédier à cela, on a ajouté l'infini à 2633l'extension gauche et moins l'infini à l'extension droite, en 2634attribuant à @code{extra-spacing-width} la valeur 2635@code{'(+inf.0 . -inf.0)}. Pour être sûr que les objets ne se 2636chevaucheront pas horizontalement, nous devons donc corriger cette 2637valeur de @code{extra-spacing-width} pour leur attribuer un peu 2638d'espace supplémentaire. L'unité de base est ici la largeur 2639séparant deux lignes de portée ; décaler le bord gauche d'une 2640demie unité vers la gauche et le bord droit d'une demie unité vers 2641la droite devrait suffire : 2642 2643@example 2644\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5) 2645@end example 2646 2647@noindent 2648Voyons si ça marche sur notre exemple précédent : 2649 2650@cindex DynamicText, exemple de dérogation 2651@cindex extra-spacing-width, exemple d'utilisation de la propriété 2652 2653@lilypond[quote,ragged-right,verbatim,fragment] 2654\dynamicUp 2655% Extend width by 1 staff space 2656\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5) 2657\relative { a'4\f b\mf a\mp b\p } 2658@end lilypond 2659 2660@noindent 2661C'est mieux mais nous voulons peut-être aligner les indications de 2662nuance sur une même ligne plutôt que de les voir monter et 2663descendre avec les notes. La propriété qui gère cela est 2664@code{staff-padding} -- voir @ref{Collisions d'objets}. 2665 2666 2667@node Espacement vertical 2668@section Espacement vertical 2669@translationof Vertical spacing 2670 2671En règle générale, LilyPond est plutôt performant en matière 2672d'espacement vertical des objets musicaux. Examinons ce qui se passe 2673avec un chant simple à deux voix accompagnées au piano : 2674 2675@lilypond[quote,fragment,ragged-right] 2676<< 2677 \new ChoirStaff 2678 << 2679 \new Staff { 2680 \new Voice = "music" { 2681 b'2 c' c' c' 2682 } 2683 } 2684 \new Lyrics 2685 \lyricsto "music" { 2686 Here are some lyrics 2687 } 2688 \new Staff { 2689 \clef bass e'2 f e c 2690 } 2691 >> 2692 \new PianoStaff 2693 << 2694 \new Staff { 2695 g''2 c'' c'' a'' 2696 } 2697 \new Staff { 2698 \clef bass e2 f c e 2699 } 2700 >> 2701>> 2702@end lilypond 2703 2704Il n'y a rien à redire quant à l'espacement vertical. Toutefois, 2705partons du principe que nous travaillons avec un éditeur dont les 2706exigences en matière d'espacement vertical sont les suivantes : les 2707paroles doivent être clairement détachées des notes, l'accompagnement de 2708piano séparé du chant et les portées de piano rapprochées l'une de 2709l'autre. Commençons par les paroles. 2710 2711Les paroles résident dans un système ; les commandes dévolues à leur 2712espacement sont donc mentionnées à la section 2713@ruser{Espacement vertical au sein d'un système}. Nous y constatons que 2714les paroles sont des lignes de non-portée (@code{non-staff lines}) ; les 2715commandes qui gèrent leur espacement font donc référence à la propriété 2716@code{nonstaff}. Les décaler de la portée à laquelle elles sont 2717attachées (celle du haut) jouera sur la propriété @code{relatedstaff}, 2718les décaler de la ligne inférieure sur la propriété 2719@code{unrelatedstaff}. Les parties vocales sont membre d'un 2720@code{VerticalAxisGroup} ; ce sont donc les propriétés de ce groupe qui 2721doivent être ajustées. Faisons un premier essai pour voir : 2722 2723@lilypond[quote,fragment,ragged-right,verbatim] 2724<< 2725 \new ChoirStaff 2726 << 2727 \new Staff { 2728 \new Voice = "music" { 2729 b'2 c' c' c' 2730 } 2731 } 2732 \new Lyrics \with { 2733 \override VerticalAxisGroup. 2734 nonstaff-relatedstaff-spacing.padding = #5 2735 \override VerticalAxisGroup. 2736 nonstaff-unrelatedstaff-spacing.padding = #5 2737 } 2738 \lyricsto "music" { 2739 Here are some lyrics 2740 } 2741 \new Staff { 2742 \clef bass e'2 f e c 2743 } 2744 >> 2745 \new PianoStaff 2746 << 2747 \new Staff { 2748 g''2 c'' c'' a'' 2749 } 2750 \new Staff { 2751 \clef bass e2 f c e 2752 } 2753 >> 2754>> 2755@end lilypond 2756 2757L'espacement est maintenant quelque peu exagéré. Lorsque nous 2758affectons 5 à la variable @code{padding}, LilyPond ajoute cinq espaces 2759de portée à la distance séparant deux objets, ce qui est plus que 2760généreux. Nous nous limiterons à 2. 2761 2762Occupons-nous à présent de séparer l'accompagnement du chant. La 2763musique vocale fait l'objet d'un @code{ChoirStaff} ; il nous faut donc 2764augmenter l'espace entre ce groupe et la portée de piano qui le suit. 2765Nous y parviendrons en modifiant la variable @code{basic-distance} de 2766l'élément @code{staffgroup-staff-spacing} du @code{StaffGrouper}. 2767 2768@lilypond[quote,fragment,ragged-right,verbatim] 2769<< 2770 \new ChoirStaff \with { 2771 \override StaffGrouper. 2772 staffgroup-staff-spacing.basic-distance = #15 2773 } 2774 << 2775 \new Staff { 2776 \new Voice = "music" { 2777 b'2 c' c' c' 2778 } 2779 } 2780 \new Lyrics \with { 2781 \override VerticalAxisGroup. 2782 nonstaff-relatedstaff-spacing.padding = #2 2783 \override VerticalAxisGroup. 2784 nonstaff-unrelatedstaff-spacing.padding = #2 2785 } 2786 \lyricsto "music" { 2787 Here are some lyrics 2788 } 2789 \new Staff { 2790 \clef bass e'2 f e c 2791 } 2792 >> 2793 \new PianoStaff 2794 << 2795 \new Staff { 2796 g''2 c'' c'' a'' 2797 } 2798 \new Staff { 2799 \clef bass e2 f c e 2800 } 2801 >> 2802>> 2803@end lilypond 2804 2805Excellent. Ne reste plus qu'à répondre à la dernière exigence : 2806resserrer les portées du piano. Pour y parvenir, nous ajusterons à 2807nouveau les propriétés du @code{StaffGrouper}, ici en jouant à la fois 2808sur la distance de base (@code{basic-distance}) et le décalage 2809(@code{padding}) comme ci-dessous : 2810 2811@lilypond[quote,fragment,ragged-right,verbatim] 2812<< 2813 \new ChoirStaff \with { 2814 \override StaffGrouper. 2815 staffgroup-staff-spacing.basic-distance = #15 2816 } 2817 << 2818 \new Staff { 2819 \new Voice = "music" { 2820 b'2 c' c' c' 2821 } 2822 } 2823 \new Lyrics \with { 2824 \override VerticalAxisGroup. 2825 nonstaff-relatedstaff-spacing.padding = #2 2826 \override VerticalAxisGroup. 2827 nonstaff-unrelatedstaff-spacing.padding = #2 2828 } 2829 \lyricsto "music" { 2830 Here are some lyrics 2831 } 2832 \new Staff { 2833 \clef bass e'2 f e c 2834 } 2835 >> 2836 \new PianoStaff \with { 2837 \override StaffGrouper.staff-staff-spacing = #'( 2838 (basic-distance . 0) 2839 (padding . 0)) 2840 } 2841 << 2842 \new Staff { 2843 g''2 c'' c'' a'' 2844 } 2845 \new Staff { 2846 \clef bass e2 f c e 2847 } 2848 >> 2849>> 2850@end lilypond 2851 2852Les portées sont vraiment rapprochées, mais c'est ce que veut l'éditeur. 2853On pourra toujours les écarter au besoin en jouant sur les éléments 2854@code{padding} ou @code{basic-distance}. 2855 2856Il existe bien des manières de modifier l'espacement vertical. Le point 2857crucial à ne pas oublier est que l'espacement des objets au sein d'un 2858regroupement -- un @code{StaffGroup}, tels @code{GrandStaff} ou 2859@code{PianoStaff} -- dépend des variables d'espacement d'un 2860@code{StaffGrouper} ; l'espacement de portées non regroupées (comme 2861@code{Lyrics} et @code{Staff}) dépend des variables d'un 2862@code{VerticalAxisGroup}. Voir 2863@ruser{Variables d'espacement vertical fluctuant} et 2864@ruser{Espacement vertical au sein d'un système} pour de plus amples 2865détails. 2866 2867 2868@node Collisions d'objets 2869@section Collisions d'objets 2870@translationof Collisions of objects 2871 2872@menu 2873* Déplacement d'objets:: 2874* Correction des collisions d'objets:: 2875* Exemple concret:: 2876@end menu 2877 2878 2879@node Déplacement d'objets 2880@subsection Déplacement d'objets 2881@translationof Moving objects 2882 2883@cindex déplacement d'objets se chevauchant 2884@cindex déplacement d'objets en collision 2885@cindex déplacement de grobs en collision 2886@cindex objets, évitement des collisions 2887@cindex grobs, évitement des collisions 2888 2889Aussi surprenant que cela puisse paraître, LilyPond n'est pas parfait. 2890Certains éléments sur la partition peuvent se chevaucher, ce qui est 2891regrettable mais, le plus souvent, facile à corriger. En général, quand 2892on déplace des objets, c'est pour des raisons de lisibilité ou 2893d'esthétique -- ils rendraient mieux avec un peu plus ou un peu moins 2894d'espace autour d'eux. 2895 2896Il y a trois façons de résoudre les problèmes de chevauchement. Il est 2897préférable de les aborder dans l'ordre suivant : 2898 2899@enumerate 2900@item 2901L'@strong{orientation} d'un objet qui en chevauche un autre peut être 2902changée grâce aux commandes prédéfinies dont la liste a été donnée 2903plus haut à propos des objets de portée (voir 2904@ref{Objets inclus dans la portée}). 2905Les queues de note, les liaisons de phrasé et de prolongation, les 2906crochets, les nuances et les n-olets peuvent facilement être 2907repositionnés de cette manière. En contrepartie, vous n'avez le choix 2908qu'entre deux positions, sans personnalisation possible. 2909 2910@item 2911Les @strong{propriétés d'objet}, auxquelles LilyPond a recours pour 2912positionner les objets, sont modifiables avec @code{\override}. Il y a 2913deux avantages à changer ces propriétés : (a) d'autres objets 2914pourront être déplacés automatiquement si nécessaire pour faire de la 2915place et (b) la même retouche peut s'appliquer à toutes les occurrences 2916du même type d'objet. Ces propriétés sont : 2917 2918@itemize 2919 2920@item 2921@code{direction} 2922 2923Ce point a déjà été traité en détails -- voir 2924@ref{Objets inclus dans la portée}. 2925 2926 2927@item 2928@code{padding}, @code{right-padding}, @code{staff-padding} 2929 2930@cindex décalage (padding) 2931@cindex padding, propriété 2932@cindex right-padding, propriété 2933@cindex staff-padding, propriété 2934 2935Au moment de positionner un objet, la valeur de sa propriété 2936@code{padding} détermine l'espace à laisser libre entre celui-ci et le 2937coin le plus proche de l'objet à côté duquel il est placé. Vous 2938remarquerez que c'est la valeur @code{padding} de l'objet @strong{à 2939placer} qui compte ; la valeur @code{padding} de l'objet déjà placé 2940est ignorée. Les espaces libres déterminés par @code{padding} 2941s'appliquent à tous les objets associés à la 2942@code{side-position-interface}. 2943 2944Le positionnement de groupes d'altérations est contrôlé par 2945@code{right-padding}, et non plus @code{padding}. Cette propriété 2946appartient à l'objet @code{AccidentalPlacement} qui, vous le 2947remarquerez, prend place dans le contexte @strong{Staff}. Dans le 2948processus de composition, les têtes de notes sont disposées en premier, 2949puis les altérations, s'il y en a, sont ajoutées à gauche des têtes de 2950note suivant la propriété @code{right-padding} qui détermine 2951l'espacement par rapport aux têtes de note. C'est pourquoi seule la 2952propriété @code{right-padding} de l'objet @code{AccidentalPlacement} 2953joue sur le positionnement des altérations. 2954 2955La propriété @code{staff-padding} est très proche de la propriété 2956@code{padding} : @code{padding} contrôle l'espace minimum entre un 2957objet qui accepte la @code{side-position-interface} et l'objet le plus 2958proche (généralement une note ou une ligne de portée) ; 2959@code{staff-padding} ne s'applique qu'aux objets qui sont toujours 2960placés au-dehors de la portée -- il contrôle l'espace minimum à insérer 2961entre la portée et l'objet extérieur. Attention : @code{staff-padding} 2962concerne les objets positionnés par rapport à la portée et n'a aucun 2963effet sur les objets qui sont positionnés par rapport à une note ; tout 2964aménagement qui lui serait apporté ne provoquera pas d'erreur, mais sera 2965ignoré. 2966 2967Pour trouver quelle propriété @code{padding} employer pour l'objet que 2968vous cherchez à repositionner, il vous faut consulter les propriétés de 2969l'objet dans la Référence des propriétés internes. Prenez garde que les 2970propriétés @code{padding} ne sont pas forcément traitées dans l'objet en 2971question ; il faut alors regarder les objets qui semblent s'en 2972rapprocher. 2973 2974Toutes les valeurs @code{padding} sont exprimées en espace de portée. 2975Pour la plupart des objets, la valeur par défaut est aux alentours de 29761,0 et parfois moins (cela dépend de chaque objet). Il est possible de 2977la modifier lorsqu'on a besoin d'un espace vide plus grand (ou plus 2978petit). 2979 2980 2981@item 2982@code{self-alignment-X} 2983 2984@cindex self-alignment-X, propriété 2985 2986Cette propriété sert à aligner les objets sur la gauche, sur la droite 2987ou à les centrer par rapport au point de référence des objets parents. 2988Elle peut être utilisée avec tous les objets qui acceptent la 2989@code{self-alignment-interface}. Il s'agit, en général, des objets qui 2990contiennent du texte. Les valeurs admises sont @code{LEFT}, 2991@code{RIGHT} et @code{CENTER}. On peut aussi attribuer à 2992la place une valeur numérique entre @code{-1} et @code{+1}, 2993où @code{-1} signifie alignement sur la gauche, @code{+1} 2994alignement sur la droite, et les nombres intermédiaires déplacent 2995progressivement le texte de la gauche vers la droite. Des valeurs 2996numériques supérieures à @code{1} sont également admises 2997pour déplacer le texte encore plus loin vers la gauche, ou des 2998valeurs inférieures à @code{-1} pour déplacer le texte encore 2999plus loin vers la droite. Un écart de @code{1} en valeur 3000correspond à un déplacement de la moitié de la longueur du 3001texte. 3002 3003 3004@item 3005@code{extra-spacing-width} 3006 3007@cindex extra-spacing-width, propriété 3008 3009Cette propriété est utilisée pour tous les objets qui acceptent la 3010@code{item-interface}. Elle reçoit deux nombres, le premier étant 3011ajouté au bord gauche et le second au bord droit. Des nombres 3012négatifs déplacent le coin vers la gauche, des nombres positifs 3013vers la droite, si bien que pour élargir un objet, le premier nombre 3014doit être négatif et le second positif. Attention : tous les 3015objets n'acceptent pas forcément les deux nombres. Par exemple, l'objet 3016@code{Accidental} ne retient que le premier nombre (coin gauche). 3017 3018 3019@item 3020@code{staff-position} 3021 3022@cindex staff-position, propriété 3023 3024@code{staff-position} est une propriété de la 3025@code{staff-symbol-referencer-interface}, qui s'applique aux objets 3026positionnés par rapport à la portée. Elle indique, en demi-espace de 3027portée, la position verticale des objets par rapport à la ligne médiane 3028de la portée. C'est bien pratique pour résoudre des problèmes de 3029collision entre des objets comme les silences valant mesure entière, 3030les liaisons et les notes de différentes voix. 3031 3032 3033@item 3034@code{horizontal-shift} 3035 3036@cindex horizontal-shift, propriété 3037@cindex notes, empilement 3038@cindex empilement de notes 3039@cindex notes, collisions 3040@cindex collisions de notes 3041@cindex shift, commandes 3042@funindex \shiftOff 3043@funindex \shiftOn 3044@funindex \shiftOnn 3045@funindex \shiftOnnn 3046 3047Au sein d'une même voix, toutes les notes intervenant au même instant 3048musical sont regroupées dans un empilement (une colonne) et est créé un 3049objet @code{NoteColumn} afin de contrôler le positionnement horizontal 3050de ce groupe de notes -- voir « Empilement de notes » dans 3051@ref{Instanciation explicite des voix}. Si, et seulement si deux ou 3052plusieurs empilements au sein d'un même contexte de portée ont une 3053orientation de hampe identique et se produisent au même instant musical, 3054les valeurs de leurs propriétés @code{horizontal-shift} permettront de 3055les ordonner, les empilements de rang supérieur étant progressivement 3056décalés pour éviter les chevauchements des têtes. Cette propriété est 3057déterminée par les commandes @code{\voiceXXX} et peut se voir aménagée 3058par une commande @code{\override} ou, plus habituellemnt, par les 3059commandes @code{\shiftOn}. Notez bien que cette propriété ne fait 3060qu'affecter un rang aux empilements pour leur décalage ; elle ne 3061détermine en rien la magnitude du décalage, qui sera augmentera 3062progressivement et selon un pas proprotionnel à la largeur des têtes de 3063chaque rang. Le pas, généralement de la moitié de la largeur d'une 3064tête, peut aller jusqu'à la pleine largeur de tête en cas de groupes 3065resserrés. 3066 3067@item 3068@code{force-hshift} 3069 3070@cindex force-hshift, propriété 3071 3072La propriété @code{force-hshift} appartient à @code{NoteColumn} (en 3073réalité à la @code{note-column-interface}). Le fait de la modifier 3074permet de déplacer un empilement dans le cas de chevauchement 3075d'empilements. Notez bien qu'elle sera sans effet en l'absence de 3076chevauchement. Elle s'exprime en unité appropriée aux colonnes 3077de notes, à savoir la largeur des têtes de note de la première voix. 3078Son utilisation est réservée à des situations complexes dans lesquelles 3079les commandes habituelles @code{\shiftOn} 3080(voir @ref{Instanciation explicite des voix}) ne suffisent plus à 3081résoudre les conflits. Elle est alors préférable à l'utilisation de la 3082propriété @code{extra-offset}, dans la mesure où on n'a pas besoin 3083d'exprimer la distance en espace de portée et où le fait de déplacer 3084les notes à l'intérieur ou à l'extérieur d'une @code{NoteColumn} affecte 3085d'autres actions comme les fusions de notes. 3086 3087@end itemize 3088 3089 3090@item 3091Pour terminer, quand toutes les autres méthodes ont échoué, il est 3092possible de repositionner verticalement les objets à la main par rapport 3093à la ligne médiane de la portée, ou en les déplaçant à une distance 3094donnée vers une nouvelle position. Les inconvénients sont qu'il faut 3095individuellement, pour chaque objet, trouver les valeurs correctes de 3096repositionnement souvent par tâtonnement et que, puisque le 3097mouvement est opéré après que LilyPond a placé tous les autres 3098objets, c'est à l'utilisateur de résoudre tous les problèmes de 3099collision qui pourraient survenir. Et le pire avec cette méthode est 3100que, le jour où la musique est modifiée, il faut de nouveau rechercher 3101les valeurs de repositionnement. Les propriétés à utiliser pour ce type 3102de repositionnement manuel sont : 3103 3104 3105@table @code 3106@item extra-offset 3107 3108@cindex extra-offset, propriété 3109 3110Cette propriété s'applique à tout objet acceptant la 3111@code{grob-interface}. Elle reçoit une paire de nombres qui indiquent 3112le déplacement supplémentaire dans le sens horizontal et vertical. Des 3113nombres négatifs déplacent l'objet vers la gauche ou vers le bas. 3114L'unité utilisée est l'espace de portée. Le déplacement supplémentaire 3115intervient une fois que la composition des objets est achevée, si bien 3116qu'un objet peut être repositionné à n'importe quel endroit sans 3117perturber quoi que ce soit. 3118 3119@item positions 3120 3121@cindex positions, propriété 3122 3123Cette propriété est très utile pour ajuster manuellement l'inclinaison 3124et la hauteur des barres de ligature, des liaisons et des n-olets. Elle 3125est suivie de deux nombres qui donnent la position des extrémités gauche 3126et droite des barres, liaisons, etc. par rapport à la ligne médiane de 3127la portée. L'unité de référence est l'intervalle de lignes de portée. 3128Attention toutefois au fait que les liaisons et phrasés ne peuvent pas 3129être repositionnés n'importe où. LilyPond commence par dresser la liste 3130des emplacements possibles pour les liaisons et choisit par défaut la 3131liaison qui « semble la meilleure ». Si la propriété @code{positions} 3132a été retouchée, la liaison la plus proche de la position demandée sera 3133retenue dans la liste. 3134@end table 3135 3136@end enumerate 3137 3138Il est possible qu'un objet ne dispose pas de toutes ces propriétés. Il 3139est donc nécessaire de consulter la RPI pour vérifier quelles sont les 3140propriétés disponibles pour l'objet en question. 3141 3142Voici une liste d'objets les plus couramment impliqués dans les 3143collisions, avec le nom de l'objet à consulter dans la RPI afin de 3144trouver les propriétés à retoucher pour obtenir un déplacement. 3145 3146 3147@multitable @columnfractions .5 .5 3148@headitem Type d'objet @tab Nom d'objet 3149@item Articulations @tab @code{Script} 3150@item Barres de ligature @tab @code{Beam} 3151@item Doigté @tab @code{Fingering} 3152@item Liaisons de phrasé @tab @code{Slur} 3153@item Liaisons de prolongation @tab @code{Tie} 3154@item N-olets @tab @code{TupletBracket} 3155@item Nuances (verticalement) @tab @code{DynamicLineSpanner} 3156@item Nuances (horizontalement) @tab @code{DynamicText} 3157@item Reprises / marques de texte @tab @code{RehearsalMark} 3158@item Texte, par ex. @code{^"texte"} @tab @code{TextScript} 3159@end multitable 3160 3161 3162@node Correction des collisions d'objets 3163@subsection Correction des collisions d'objets 3164@translationof Fixing overlapping notation 3165 3166Voyons maintenant comment les propriétés décrites dans la section 3167précédente peuvent nous aider à résoudre les collisions. 3168 3169@menu 3170* La propriété padding:: 3171* La propriété right-padding:: 3172* La propriété staff-padding:: 3173* La propriété self-alignment-X:: 3174* La propriété staff-position:: 3175* La propriété extra-offset:: 3176* La propriété positions:: 3177* La propriété force-hshift:: 3178@end menu 3179 3180 3181@node La propriété padding 3182@unnumberedsubsubsec La propriété @code{padding} 3183@translationof The padding property 3184 3185@cindex décalage (padding) 3186@cindex résolution des chevauchements de notation 3187@cindex chevauchement de notation 3188 3189En jouant sur la propriété @code{padding} (littéralement 3190« rembourrage »), on augmente (ou on diminue) la distance entre 3191des symboles qui sont imprimés au-dessus ou en dessous des notes. 3192 3193@cindex Script, exemple de dérogation 3194@cindex padding, exemple d'utilisation de la propriété 3195 3196@lilypond[quote,fragment,verbatim] 3197c'2\fermata 3198\override Script.padding = #3 3199b2\fermata 3200@end lilypond 3201 3202@cindex MetronomeMark, exemple de dérogation 3203@cindex padding, exemple d'utilisation de la propriété 3204 3205@lilypond[quote,fragment,verbatim] 3206% This will not work, see below: 3207\override MetronomeMark.padding = #3 3208\tempo 4=120 3209c'1 | 3210% This works: 3211\override Score.MetronomeMark.padding = #3 3212\tempo 4=80 3213d'1 | 3214@end lilypond 3215 3216Vous remarquerez dans le second exemple à quel point il est important de 3217préciser le nom du contexte qui contient l'objet. Puisque l'objet 3218@code{MetronomeMark} appartient au contexte @code{Score}, le fait de 3219modifier la propriété dans le contexte @code{Voice} passera inaperçu. 3220Pour plus de détails, voir @ruser{Modification de propriétés}. 3221 3222Si on augmente la propriété @code{padding} d'un objet alors que celui-ci 3223fait partie d'un ensemble d'objets positionnés en fonction de leur 3224@code{outside-staff-priority}, cet objet sera déplacé, ainsi que tous 3225les autres objets du groupe. 3226 3227 3228@node La propriété right-padding 3229@unnumberedsubsubsec La propriété @code{right-padding} 3230@translationof The right-padding property 3231 3232@cindex right-padding, propriété 3233 3234La propriété @code{right-padding} joue sur l'espacement entre une 3235altération et la note sur laquelle elle porte. On ne l'utilise pas 3236souvent, mais l'espacement par défaut peut se révéler inadéquat avec 3237certaines altérations ou certains glyphes utilisés en musique 3238microtonale. Le stencil de l'altération devra alors être construit sous 3239la forme d'un @code{markup} qui contiendra le ou les symboles requis, 3240comme ceci : 3241 3242@cindex Accidental, exemple de dérogation 3243@cindex text, exemple d'utilisation de la propriété 3244@cindex stencil, exemple d'utilisation de la propriété 3245@cindex AccidentalPlacement, exemple de dérogation 3246@cindex right-padding, exemple d'utilisation de la propriété 3247 3248@lilypond[quote,ragged-right,verbatim] 3249sesquisharp = \markup { \sesquisharp } 3250\relative { 3251 c''4 3252 % This prints a sesquisharp but the spacing is too small 3253 \once \override Accidental.stencil = #ly:text-interface::print 3254 \once \override Accidental.text = #sesquisharp 3255 cis4 c 3256 % This improves the spacing 3257 \once \override Score.AccidentalPlacement.right-padding = #0.6 3258 \once \override Accidental.stencil = #ly:text-interface::print 3259 \once \override Accidental.text = #sesquisharp 3260 cis4 | 3261} 3262@end lilypond 3263 3264@noindent 3265Cette méthode utilise, pour le stencil des altérations, une retouche 3266qui ne sera pas reprise par la suite. Le type de stencil est 3267obligatoirement une procédure, qui consiste ici à imprimer le contenu de 3268la propriété @code{text} de @code{Accidental}, déclaré comme étant un 3269signe sesqui-dièse. Celui-ci est ensuite repoussé devant la tête de 3270note par la retouche de @code{right-padding}. 3271 3272 3273@node La propriété staff-padding 3274@unnumberedsubsubsec La propriété @code{staff-padding} 3275@translationof The staff-padding property 3276 3277@cindex alignement d'objets sur une ligne de base 3278@cindex objets, alignement sur une ligne de base 3279 3280@code{staff-padding} sert à aligner des objets tels que des nuances 3281sur une ligne fictive à une distance donnée par rapport à la portée en 3282l'absence d'autre élément de notation qui les repousserait. Ce n'est 3283pas une propriété de @code{DynamicText} mais de 3284@code{DynamicLineSpanner}, car la ligne fictive est destinée à 3285s'appliquer autant à @strong{toutes} les nuances, notamment celles qui 3286sont créées comme des bandeaux en longueur (en anglais @emph{Spanners}). 3287Tel est donc le moyen d'aligner les indications de nuance, comme dans 3288cet exemple repris de la section précédente : 3289 3290@cindex DynamicText, exemple de dérogation 3291@cindex extra-spacing-width, exemple d'utilisation de la propriété 3292@cindex DynamicLineSpanner, exemple de dérogation 3293@cindex staff-padding, exemple d'utilisation de la propriété 3294 3295@lilypond[quote,fragment,ragged-right,verbatim] 3296\override DynamicLineSpanner.staff-padding = #3 3297\relative { a'4\f b\mf a\p b\mp } 3298@end lilypond 3299 3300 3301@node La propriété self-alignment-X 3302@unnumberedsubsubsec La propriété @code{self-alignment-X} 3303@translationof The self-alignment-X property 3304 3305L'exemple suivant montre comment ajuster le positionnement d'une 3306indication de corde relativement à une hampe, en alignant le coin 3307droit sur le point de référence de la note parente : 3308 3309@cindex StringNumber, exemple de dérogation 3310@cindex self-alignment-X, exemple d'utilisation de la propriété 3311 3312@lilypond[quote,fragment,ragged-right,verbatim] 3313\voiceOne 3314<a''\2> 3315\once \override StringNumber.self-alignment-X = #RIGHT 3316<a''\2> 3317@end lilypond 3318 3319 3320@node La propriété staff-position 3321@unnumberedsubsubsec La propriété @code{staff-position} 3322@translationof The staff-position property 3323 3324@cindex collision d'objets à l'intérieur d'une portée 3325 3326Dans une voix, un silence valant une mesure entière peut chevaucher les 3327notes d'une autre voix. Vu que ces silences sont centrés entre les deux 3328barres de mesure, il serait très compliqué de programmer LilyPond pour 3329repérer ces risques de collision dans la mesure où, normalement, toutes 3330les collisions entre notes ou entre notes et silences se produisent sur 3331des notes et silences simultanés. Voici un exemple de collision de ce 3332type : 3333 3334@lilypond[quote,verbatim,ragged-right] 3335<< \relative { c'4 c c c } \\ { R1 } >> 3336@end lilypond 3337 3338Ici, la meilleure solution consiste à déplacer le symbole de pause vers 3339le bas -- puisque cette pause appartient à la voix deux. Par défaut, 3340dans la @code{\voiceTwo} (c'est-à-dire dans la seconde voix d'une 3341construction @code{<<@{ @dots{} @} \\ @{ @dots{} @}>>}), la propriété 3342@code{staff-position} est réglée sur @code{-6} pour les 3343@code{MultiMeasureRest} ; nous avons donc besoin de la déplacer, disons, 3344de quatre demi-intervalles vers le bas, ce qui donne @code{-10}. 3345 3346@cindex MultiMeasureRest, exemple de dérogation 3347@cindex staff-position, exemple d'utilisation de la propriété 3348 3349@lilypond[quote,verbatim,ragged-right] 3350<< 3351 \relative { c'4 c c c } 3352 \\ 3353 \override MultiMeasureRest.staff-position = #-10 3354 { R1 } 3355>> 3356@end lilypond 3357 3358C'est mieux que d'utiliser, par exemple, @code{extra-offset}, 3359car la ligne supplémentaire au-dessus du silence est insérée 3360automatiquement. 3361 3362Voir @ruser{dessin à main levée de liaisons de tenue} 3363pour ce qui différencie des valeurs exactes des valeurs inexactes. 3364 3365 3366@node La propriété extra-offset 3367@unnumberedsubsubsec La propriété @code{extra-offset} 3368@translationof The extra-offset property 3369 3370@cindex positionnement des objets 3371@cindex positionnement des grobs 3372@cindex objets, positionnement 3373@cindex grobs, positionnement 3374 3375La propriété @code{extra-offset} offre la possibilité de contrôler 3376entièrement le placement d'un objet, aussi bien horizontalement que 3377verticalement. 3378 3379Dans l'exemple suivant, la seconde indication de doigté est déplacée 3380légèrement vers la gauche et de 1,8 intervalle de lignes vers le bas : 3381 3382@cindex Fingering, exemple de dérogation 3383@cindex extra-offset, exemple d'utilisation de la propriété 3384 3385@lilypond[quote,fragment,verbatim] 3386f'4-5 3387\once \override Fingering.extra-offset = #'(-0.3 . -1.8) 3388f'4-5 3389@end lilypond 3390 3391 3392@node La propriété positions 3393@unnumberedsubsubsec La propriété @code{positions} 3394@translationof The positions property 3395 3396@cindex contrôle des n-olets, liaisons, phrasés et ligatures 3397@cindex gestion manuelle des n-olets, liaisons, phrasés et ligatures 3398@cindex ligatures de n-olet, gestion manuelle 3399@cindex liaisons, gestion manuelle 3400@cindex phrasés, gestion manuelle 3401@cindex ligatures, gestion manuelle 3402 3403La propriété @code{positions} permet de contrôler manuellement la 3404position et l'inclinaison des n-olets, coulés, liaisons de phrasé et 3405barres de ligature. 3406 3407Voici un exemple où la liaison de phrasé recouvre la liaison 3408d'articulation : 3409 3410@lilypond[quote,verbatim,ragged-right] 3411\relative { a'8 \( ( a'16 ) a \) } 3412@end lilypond 3413 3414@cindex PhrasingSlur, exemple de dérogation 3415@cindex positions, exemple d'utilisation de la propriété 3416 3417@noindent 3418Nous pourrions envisager de remonter quelque peu les extrémités 3419de la liaison de phrasé. Commençons par repositionner l'extrémité 3420gauche à 2,5 espaces de portée au-dessus de la ligne médiane, et 3421la droite à 4,5 ; LilyPond choisira la courbe dont les extrémités 3422seront les plus approchantes de celle déterminées : 3423 3424@lilypond[quote,verbatim,fragment,ragged-right] 3425\once \override PhrasingSlur.positions = #'(2.5 . 4.5) 3426a'8 \( ( a''16 ) a'' \) 3427@end lilypond 3428 3429C'est déjà mieux, mais ne pourrait-on pas maintenant abaisser un 3430peu l'extrémité droite de la liaison d'articulation ? Vous 3431constaterez qu'il n'est pas possible d'y arriver, tout simplement 3432parce qu'il n'y a pas de meilleur candidat ; la propriété 3433@code{positions} n'est alors d'aucune utilité. Les liaisons, 3434aussi bien de tenue que d'articulation ou de phrasé, peuvent se 3435positionner et se dessiner tout en finesse lorsque nécessaire -- 3436voir à ce sujet @ruser{Modification des liaisons}. 3437 3438Voici un autre exemple. Comme nous pouvons le constater, les barres de 3439ligature chevauchent les liaisons de tenue : 3440 3441@lilypond[quote,verbatim,ragged-right] 3442{ 3443 \time 4/2 3444 << 3445 \relative { c'1~ 2. e8 f } 3446 \\ 3447 \relative { 3448 e''8 e e e 3449 e e e e 3450 f2 g 3451 } 3452 >> 3453 << 3454 \relative { c'1~ 2. e8 f } 3455 \\ 3456 \relative { 3457 e''8 e e e 3458 e e e e 3459 f2 g 3460 } 3461 >> 3462} 3463@end lilypond 3464 3465@noindent 3466On peut y remédier en déplaçant manuellement vers le haut les deux 3467extrémités des ligatures de croches, non plus à 1,81 intervalle 3468au-dessous de la ligne médiane mais, disons, à 1 : 3469 3470@cindex Beam, exemple de dérogation 3471@cindex positions, exemple d'utilisation de la propriété 3472 3473@lilypond[quote,verbatim,fragment,ragged-right] 3474{ 3475 \time 4/2 3476 << 3477 \relative { c'1~ 2. e8 f } 3478 \\ 3479 \relative { 3480 \override Beam.positions = #'(-1 . -1) 3481 e''8 e e e 3482 e e e e 3483 f2 g 3484 } 3485 >> 3486 << 3487 \relative { c'1~ 2. e8 f } 3488 \\ 3489 \relative { 3490 e''8 e e e 3491 e e e e 3492 f2 g 3493 \revert Beam.positions 3494 } 3495 >> 3496} 3497@end lilypond 3498 3499@noindent 3500Vous remarquerez que la retouche continue de s'appliquer au second bloc 3501de croches de la deuxième voix mais qu'il ne s'applique à aucune des 3502ligatures de la première voix, même dans la seconde mesure. Dès que la 3503dérogation ne doit plus s'appliquer, il suffit de l'annuler comme 3504indiqué ici. 3505 3506 3507@node La propriété force-hshift 3508@unnumberedsubsubsec La propriété @code{force-hshift} 3509@translationof The force-hshift property 3510 3511Maintenant, nous sommes prêts à appliquer les dernières corrections à 3512l'exemple de Chopin présenté à la fin de @ref{J'entends des Voix}, que 3513nous avions laissé dans cet état : 3514 3515@lilypond[quote,verbatim,fragment,ragged-right] 3516\new Staff \relative { 3517 \key aes \major 3518 << 3519 { c''2 aes4. bes8 } 3520 \\ 3521 { <ees, c>2 des } 3522 \\ 3523 \\ 3524 { aes'2 f4 fes } 3525 >> | 3526 <c ees aes c>1 | 3527} 3528@end lilypond 3529 3530@noindent 3531La note intermédiaire du premier accord, le la bémol à la quatrième 3532voix, doit rester dans le même empilement que la note haute, ce 3533pourquoi nous utilisons un @code{\shiftOff} 3534 3535Quant au second accord, il serait préférable que le fa s'aligne avec le 3536la et que la note la plus basse se positionne un peu plus sur la droite 3537pour éviter que les hampes se chevauchent. Pour cela, nous réglons le 3538@code{force-hshift} au niveau du @code{NoteColumn} du ré bémol de telle 3539sorte qu'il se déplace de la moitié d'un espace de portée vers la 3540droite et le @code{force-hshift} du fa sur zéro. Vous noterez la 3541présence du @code{\once} qui évite la propagation de ces réglages 3542au-delà de cet instant musical particulier -- bien que la présence du 3543@code{\once} et du second @code{\override} de la quatrième voix ne 3544soient pas indispensables dans ce court extrait, ce ne serait pas 3545montrer l'exemple que de les omettre. 3546 3547Et voici le résultat final : 3548 3549@cindex NoteColumn, exemple de dérogation 3550@cindex force-hshift, exemple d'utilisation de la propriété 3551 3552@lilypond[quote,verbatim,fragment,ragged-right] 3553\new Staff \relative { 3554 \key aes \major 3555 << 3556 { c''2 aes4. bes8 } 3557 \\ 3558 { <ees, c>2 \once \override NoteColumn.force-hshift = #0.5 des } 3559 \\ 3560 \\ 3561 { \once \shiftOff aes'2 \once \shiftOff f4 fes } 3562 >> | 3563 <c ees aes c>1 | 3564} 3565@end lilypond 3566 3567 3568@node Exemple concret 3569@subsection Exemple concret 3570@translationof Real music example 3571 3572Pour terminer ce chapitre consacré aux retouches, voici, étape par 3573étape, la mise en forme d'un exemple concret nécessitant un certain 3574nombre de retouches jusqu'à l'obtention du résultat attendu. Cet 3575exemple a été choisi en raison des problèmes inhabituels de notation 3576qu'il soulevait et pour vous apprendre à les résoudre grâce au Manuel de 3577notation. Il n'est pas représentatif d'une opération normale de 3578gravure ; que ces difficultés ne vous découragent donc pas ! Des 3579difficultés comme celles-ci ne sont, heureusement, pas courantes ! 3580 3581Cet exemple est tiré de la Première Ballade de Chopin, Op. 23, mesures 35826 à 9 ; cela correspond à la transition entre le Lento d'ouverture 3583et le Moderato. Voici, pour commencer, ce à quoi nous voulons que la 3584partition ressemble ; pour limiter les complications, nous n'avons 3585pas fait apparaître les indications de nuance, de doigté ni de pédale. 3586 3587 3588@c The following should appear as music without code 3589@c This example should not be indexed 3590@c line-width ensures no break 3591@lilypond[quote,ragged-right,line-width=6\in] 3592rhMusic = \relative { 3593 \new Voice { 3594 r2 c''4.\( g8 | 3595 \once \override Tie.staff-position = #3.5 3596 bes1~ | 3597 \bar "||" 3598 \time 6/4 3599 \mergeDifferentlyHeadedOn 3600 \mergeDifferentlyDottedOn 3601 bes2.\tempo "Moderato" r8 3602 << 3603 { c,8 d fis bes a } 3604 \new Voice { 3605 \voiceTwo 3606 c,8~ 3607 % Reposition the c2 to the right of the merged note 3608 \once \override NoteColumn.force-hshift = #1.0 3609 % Move the c2 out of the main note column 3610 % so the merge will work 3611 \shiftOnn 3612 c2 3613 } 3614 \new Voice { 3615 \voiceThree 3616 s8 3617 % Stem on the d2 must be down to permit merging 3618 \stemDown 3619 % Stem on the d2 should be invisible 3620 \tweak Flag.transparent ##t 3621 d2 3622 } 3623 \new Voice { 3624 \voiceFour 3625 s4 fis4. 3626 } 3627 >> | 3628 \mergeDifferentlyHeadedOff 3629 \mergeDifferentlyDottedOff 3630 g2.\) 3631 } 3632} 3633 3634lhMusic = \relative { 3635 r2 <c' g ees>2( | 3636 <d g, d>1)\arpeggio | 3637 r2. d,,4 r4 r | 3638 r4 3639} 3640 3641\score { 3642 \new PianoStaff << 3643 \new Staff = "RH" << 3644 \key g \minor 3645 \rhMusic 3646 >> 3647 \new Staff = "LH" << 3648 \key g \minor 3649 \clef "bass" 3650 \lhMusic 3651 >> 3652 >> 3653} 3654@end lilypond 3655 3656Nous constatons tout d'abord que, dans la troisième mesure, la main 3657droite compte quatre voix. Ce sont les cinq croches avec une barre, 3658le do avec liaison, le ré blanche qui se fond avec le ré croche, et le 3659fa dièse noire pointée qui se fond lui aussi avec la croche de même 3660hauteur. Tout le reste se réduit à une seule voix. Le plus simple est 3661donc de créer temporairement ces trois voix supplémentaires au moment 3662opportun. Si vous avez oublié comment faire, reportez-vous à 3663@ref{J'entends des Voix} et @ref{Instanciation explicite des voix}. 3664Nous opterons ici pour une déclaration explicite des voix du passage 3665polyphonique, puisque LilyPond est alors plus performant en matière 3666d'évitement des collisions. 3667 3668Commençons par saisir les notes comme appartenant à deux variables, 3669mettons en place l'ossature des portées dans un bloc @code{\Score} et 3670voyons ce que LilyPond propose par défaut : 3671 3672@c line-width ensures no break 3673@lilypond[quote,verbatim,ragged-right,line-width=6\in] 3674rhMusic = \relative { 3675 \new Voice { 3676 r2 c''4. g8 | 3677 bes1~ | 3678 \time 6/4 3679 bes2. r8 3680 % Start polyphonic section of four voices 3681 << 3682 { c,8 d fis bes a } % continuation of main voice 3683 \new Voice { 3684 \voiceTwo 3685 c,8~ 2 3686 } 3687 \new Voice { 3688 \voiceThree 3689 s8 d2 3690 } 3691 \new Voice { 3692 \voiceFour 3693 s4 fis4. 3694 } 3695 >> | 3696 g2. % continuation of main voice 3697 } 3698} 3699 3700lhMusic = \relative { 3701 r2 <c' g ees>2 | 3702 <d g, d>1 | 3703 r2. d,,4 r4 r | 3704 r4 3705} 3706 3707\score { 3708 \new PianoStaff << 3709 \new Staff = "RH" << 3710 \key g \minor 3711 \rhMusic 3712 >> 3713 \new Staff = "LH" << 3714 \key g \minor 3715 \clef "bass" 3716 \lhMusic 3717 >> 3718 >> 3719} 3720@end lilypond 3721 3722Toutes les notes sont correctes mais l'allure générale est loin d'être 3723satisfaisante. La liaison se heurte à l'indication de mesure lors du 3724changement de métrique, la ligature des croches n'est pas bonne dans la 3725troisième mesure, les notes ne sont pas fusionnées et il manque 3726plusieurs éléments de notation. Commençons par le plus simple. Nous 3727pouvons corriger la ligature des croches en la créant manuellement et 3728nous pouvons facilement ajouter les limites droite et gauche de la 3729liaison de phrasé, puisque tout cela a déjà été traité dans le tutoriel. 3730Voici le résultat : 3731 3732@c line-width ensures no break 3733@lilypond[quote,verbatim,ragged-right,line-width=6\in] 3734rhMusic = \relative { 3735 \new Voice { 3736 r2 c''4.\( g8 | 3737 bes1~ | 3738 \time 6/4 3739 bes2. r8 3740 % Start polyphonic section of four voices 3741 << 3742 { c,8 d fis bes a } % continuation of main voice 3743 \new Voice { 3744 \voiceTwo 3745 c,8~ 2 3746 } 3747 \new Voice { 3748 \voiceThree 3749 s8 d2 3750 } 3751 \new Voice { 3752 \voiceFour 3753 s4 fis4. 3754 } 3755 >> | 3756 g2.\) % continuation of main voice 3757 } 3758} 3759 3760lhMusic = \relative { 3761 r2 <c' g ees>2( | 3762 <d g, d>1) | 3763 r2. d,,4 r4 r | 3764 r4 3765} 3766 3767\score { 3768 \new PianoStaff << 3769 \new Staff = "RH" << 3770 \key g \minor 3771 \rhMusic 3772 >> 3773 \new Staff = "LH" << 3774 \key g \minor 3775 \clef "bass" 3776 \lhMusic 3777 >> 3778 >> 3779} 3780@end lilypond 3781 3782La première mesure est maintenant correcte. La seconde contient un 3783arpège et doit se terminer par une double barre. Comment faire, puisque 3784cela n'a pas été traité dans le Manuel d'initiation ? C'est alors 3785qu'il faut nous reporter au Manuel de notation. Quand on cherche 3786« arpège » et « barre de mesure » dans l'index, on voit aisément qu'il 3787faut ajouter @code{\arpeggio} à un accord pour produire un arpège et 3788qu'une double barre est le résultat de la commande @code{\bar "||"}. 3789Rien de plus facile ! Nous devons ensuite corriger la collision entre 3790la liaison et l'indication de mesure. Le mieux est de déplacer la 3791liaison vers le haut. La méthode pour déplacer les objets a déjà été 3792présentée dans @ref{Déplacement d'objets}, et l'on sait que, pour des 3793objets positionnés par rapport à la portée, il nous faut modifier leur 3794propriété @code{staff-position}, exprimée en demi-intervalles de lignes 3795par rapport à la ligne médiane de la portée. Voici donc la retouche à 3796insérer juste devant la première note liée ; elle est censée déplacer la 3797liaison vers le haut de 3,5 demi-intervalles de lignes au-dessus de la 3798ligne médiane : 3799 3800@code{\once \override Tie.staff-position = #3.5} 3801 3802Cela s'adjoint à la deuxième mesure, pour donner : 3803 3804@c line-width ensures no break 3805@lilypond[quote,verbatim,ragged-right,line-width=6\in] 3806rhMusic = \relative { 3807 \new Voice { 3808 r2 c''4.\( g8 | 3809 \once \override Tie.staff-position = #3.5 3810 bes1~ | 3811 \bar "||" 3812 \time 6/4 3813 bes2. r8 3814 % Start polyphonic section of four voices 3815 << 3816 { c,8 d fis bes a } % continuation of main voice 3817 \new Voice { 3818 \voiceTwo 3819 c,8~ 2 3820 } 3821 \new Voice { 3822 \voiceThree 3823 s8 d2 3824 } 3825 \new Voice { 3826 \voiceFour 3827 s4 fis4. 3828 } 3829 >> | 3830 g2.\) % continuation of main voice 3831 } 3832} 3833 3834lhMusic = \relative { 3835 r2 <c' g ees>2( | 3836 <d g, d>1)\arpeggio | 3837 r2. d,,4 r4 r | 3838 r4 3839} 3840 3841\score { 3842 \new PianoStaff << 3843 \new Staff = "RH" << 3844 \key g \minor 3845 \rhMusic 3846 >> 3847 \new Staff = "LH" << 3848 \key g \minor 3849 \clef "bass" 3850 \lhMusic 3851 >> 3852 >> 3853} 3854@end lilypond 3855 3856Venons-en à la troisième mesure et au début de la section Moderato. 3857Dans le Tutoriel, il est indiqué comment insérer une indication de tempo 3858à l'aide de la commande @code{\tempo} ; pas de problème, du coup, pour 3859ajouter « Moderato ». Mais comment faire pour fusionner les notes de 3860différentes voix ? C'est là que le Manuel de notation peut nous venir 3861en aide. Une recherche sur « fusionnement de notes » dans l'index nous 3862renvoie au chapitre @ruser{Résolution des collisions}, et plus 3863précisément aux commandes permettant de fusionner des notes en fonction 3864de leur type et selon qu'elles sont pointées ou non. Dans notre exemple, 3865pour la durée de la polyphonie de la troisième mesure, nous avons besoin 3866de fusionner deux types de notes ; grâce aux informations trouvées dans 3867le Manuel de notation, nous ajoutons 3868 3869@example 3870\mergeDifferentlyHeadedOn 3871\mergeDifferentlyDottedOn 3872@end example 3873 3874@noindent 3875au début de cette section et 3876 3877@example 3878\mergeDifferentlyHeadedOff 3879\mergeDifferentlyDottedOff 3880@end example 3881 3882@noindent 3883à la fin, ce qui donne : 3884 3885@c line-width ensures no break 3886@lilypond[quote,verbatim,ragged-right,line-width=6\in] 3887rhMusic = \relative { 3888 \new Voice { 3889 r2 c''4.\( g8 | 3890 \once \override Tie.staff-position = #3.5 3891 bes1~ | 3892 \bar "||" 3893 \time 6/4 3894 bes2.\tempo "Moderato" r8 3895 \mergeDifferentlyHeadedOn 3896 \mergeDifferentlyDottedOn 3897 % Start polyphonic section of four voices 3898 << 3899 { c,8 d fis bes a } % continuation of main voice 3900 \new Voice { 3901 \voiceTwo 3902 c,8~ 2 3903 } 3904 \new Voice { 3905 \voiceThree 3906 s8 d2 3907 } 3908 \new Voice { 3909 \voiceFour 3910 s4 fis4. 3911 } 3912 >> | 3913 \mergeDifferentlyHeadedOff 3914 \mergeDifferentlyDottedOff 3915 g2.\) % continuation of main voice 3916 } 3917} 3918 3919lhMusic = \relative { 3920 r2 <c' g ees>2( | 3921 <d g, d>1)\arpeggio | 3922 r2. d,,4 r4 r | 3923 r4 3924} 3925 3926\score { 3927 \new PianoStaff << 3928 \new Staff = "RH" << 3929 \key g \minor 3930 \rhMusic 3931 >> 3932 \new Staff = "LH" << 3933 \key g \minor 3934 \clef "bass" 3935 \lhMusic 3936 >> 3937 >> 3938} 3939@end lilypond 3940 3941Ces retouches ont permis de fusionner les deux fa dièse mais pas les 3942deux ré. Pourquoi ? La réponse se trouve dans la même section du 3943Manuel de notation : les notes à fusionner doivent avoir des hampes 3944dans des directions opposées et deux notes ne peuvent pas être 3945fusionnées s'il y a une troisième note dans la même colonne. Ici, les 3946deux ré ont leur hampe orientée vers le haut et il y a une troisième 3947note, do. Nous savons changer l'orientation de la hampe avec 3948@code{\stemDown} et le Manuel de notation nous indique également comment 3949déplacer le do -- en produisant un décalage grâce à l'une des commandes 3950@code{\shift}. Mais laquelle ? Le do appartient à la deuxième 3951voix et n'est pas décalé ; les deux ré appartiennent respectivement 3952à la première et à la troisième voix, et l'un n'est pas décalé tandis 3953que l'autre l'est. Il nous faut donc décaler largement le do avec la 3954commande @code{\shiftOnn} pour éviter une interférence avec les deux ré. 3955Voici ce que donnent ces modifications : 3956 3957@cindex Tie, exemple de dérogation 3958@cindex staff-position, exemple d'utilisation de la propriété 3959 3960@c line-width ensures no break 3961@lilypond[quote,verbatim,ragged-right,line-width=6\in] 3962rhMusic = \relative { 3963 \new Voice { 3964 r2 c''4.\( g8 | 3965 \once \override Tie.staff-position = #3.5 3966 bes1~ | 3967 \bar "||" 3968 \time 6/4 3969 bes2.\tempo "Moderato" r8 3970 \mergeDifferentlyHeadedOn 3971 \mergeDifferentlyDottedOn 3972 % Start polyphonic section of four voices 3973 << 3974 { c,8 d fis bes a } % continuation of main voice 3975 \new Voice { 3976 \voiceTwo 3977 % Move the c2 out of the main note column 3978 % so the merge will work 3979 c,8~ \shiftOnn c2 3980 } 3981 \new Voice { 3982 \voiceThree 3983 % Stem on the d2 must be down to permit merging 3984 s8 \stemDown d2 3985 } 3986 \new Voice { 3987 \voiceFour 3988 s4 fis4. 3989 } 3990 >> | 3991 \mergeDifferentlyHeadedOff 3992 \mergeDifferentlyDottedOff 3993 g2.\) % continuation of main voice 3994 } 3995} 3996 3997lhMusic = \relative { 3998 r2 <c' g ees>2( | 3999 <d g, d>1)\arpeggio | 4000 r2. d,,4 r4 r | 4001 r4 4002} 4003 4004\score { 4005 \new PianoStaff << 4006 \new Staff = "RH" << 4007 \key g \minor 4008 \rhMusic 4009 >> 4010 \new Staff = "LH" << 4011 \key g \minor 4012 \clef "bass" 4013 \lhMusic 4014 >> 4015 >> 4016} 4017@end lilypond 4018 4019Pas loin ! Il ne reste plus que deux problèmes : les ré une 4020fois fusionnés ne devraient plus avoir de hampe vers le bas, et le do 4021serait mieux à la droite des ré. Nous savons remédier à ces deux 4022problèmes grâce aux retouches précédentes : nous allons rendre la 4023hampe transparente et déplacer le do avec la propriété 4024@code{force-hshift}. Et voici le résultat final : 4025 4026@cindex NoteColumn, exemple de dérogation 4027@cindex force-hshift, exemple d'utilisation de la propriété 4028@cindex Stem, exemple de dérogation 4029@cindex transparent, exemple d'utilisation de la propriété 4030 4031@c line-width ensures no break 4032@lilypond[quote,verbatim,ragged-right,line-width=6\in] 4033rhMusic = \relative { 4034 \new Voice { 4035 r2 c''4.\( g8 | 4036 \once \override Tie.staff-position = #3.5 4037 bes1~ | 4038 \bar "||" 4039 \time 6/4 4040 bes2.\tempo "Moderato" r8 4041 \mergeDifferentlyHeadedOn 4042 \mergeDifferentlyDottedOn 4043 % Start polyphonic section of four voices 4044 << 4045 { c,8 d fis bes a } % continuation of main voice 4046 \new Voice { 4047 \voiceTwo 4048 c,8~ 4049 % Reposition the c2 to the right of the merged note 4050 \once \override NoteColumn.force-hshift = #1.0 4051 % Move the c2 out of the main note column 4052 % so the merge will work 4053 \shiftOnn 4054 c2 4055 } 4056 \new Voice { 4057 \voiceThree 4058 s8 4059 % Stem on the d2 must be down to permit merging 4060 \stemDown 4061 % Stem on the d2 should be invisible 4062 \tweak Flag.transparent ##t 4063 d2 4064 } 4065 \new Voice { 4066 \voiceFour 4067 s4 fis4. 4068 } 4069 >> | 4070 \mergeDifferentlyHeadedOff 4071 \mergeDifferentlyDottedOff 4072 g2.\) % continuation of main voice 4073 } 4074} 4075 4076lhMusic = \relative { 4077 r2 <c' g ees>2( | 4078 <d g, d>1)\arpeggio | 4079 r2. d,,4 r4 r | 4080 r4 4081} 4082 4083\score { 4084 \new PianoStaff << 4085 \new Staff = "RH" << 4086 \key g \minor 4087 \rhMusic 4088 >> 4089 \new Staff = "LH" << 4090 \key g \minor 4091 \clef "bass" 4092 \lhMusic 4093 >> 4094 >> 4095} 4096@end lilypond 4097 4098 4099@node Autres retouches 4100@section Autres retouches 4101@translationof Further tweaking 4102 4103@menu 4104* Autres utilisations des retouches:: 4105* Utilisation de variables dans les retouches:: 4106* Feuilles de style:: 4107* Autres sources de documentation:: 4108* Retouches avancées avec Scheme:: 4109@end menu 4110 4111 4112@node Autres utilisations des retouches 4113@subsection Autres utilisations des retouches 4114@translationof Other uses for tweaks 4115 4116@menu 4117* Liaison entre plusieurs voix:: 4118* Rendu MIDI d'un point d'orgue:: 4119@end menu 4120 4121@cindex suppression d'objets 4122@cindex objets, suppression d' 4123 4124 4125@node Liaison entre plusieurs voix 4126@unnumberedsubsubsec Liaison entre plusieurs voix 4127@translationof Tying notes across voices 4128 4129Voici un exemple qui montre comment créer une liaison de prolongation 4130entre des notes appartenant à des voix différentes. En temps normal, 4131seules deux notes appartenant à une même voix peuvent être ainsi liées. 4132La solution consiste à utiliser deux voix, dont l'une avec les notes 4133liées 4134 4135@lilypond[quote] 4136<< { b'8~ 8\noBeam } \\ { b'8[ g'] } >> 4137@end lilypond 4138 4139@noindent 4140et à supprimer la première hampe ascendante et le crochet dans cette 4141voix ; on a alors l'impression que la liaison couvre les deux voix. 4142 4143@cindex Stem, exemple de suppression 4144@cindex Flag, exemple de suppression 4145@cindex @code{\omit}, exemple d'utilisation 4146 4147@funindex \omit 4148 4149@lilypond[quote,fragment,verbatim] 4150<< 4151 { 4152 \once \omit Stem 4153 \once \omit Flag 4154 b'8~ 8\noBeam 4155 } 4156\\ 4157 { b'[ g8] } 4158>> 4159@end lilypond 4160 4161@morerefs 4162Manuel d'initiation : 4163@ref{Le préfixe once}, 4164@ref{La propriété stencil}. 4165 4166 4167@node Rendu MIDI d'un point d'orgue 4168@unnumberedsubsubsec Rendu MIDI d'un point d'orgue 4169@translationof Simulating a fermata in MIDI 4170 4171@cindex stencil, utilisation de la propriété 4172@cindex point d'orgue, rendu en MIDI 4173 4174En ce qui concerne les objets extérieurs à la portée, quand on veut les 4175faire disparaître de la partition imprimée, il est généralement 4176préférable de modifier leur propriété @code{stencil} plutôt que leur 4177propriété @code{transparent}. Le fait d'attribuer à la propriété 4178@code{stencil} d'un objet la valeur @code{#f} supprimera entièrement 4179celui-ci de la partition. Il ne risquera donc pas de gêner le placement 4180d'autres objets. 4181 4182Par exemple, si nous voulons changer le réglage de métronome pour 4183simuler un point d'orgue dans le fichier MIDI, nous ne voulons surtout 4184pas que cette indication métronomique apparaisse sur la partition ni 4185qu'elle influence l'espacement entre les deux systèmes ou la position 4186des annotations voisines sur la portée. Le fait d'attribuer à la 4187propriété @code{stencil} la valeur @code{#f} est donc la bonne solution. 4188Nous montrons ci-dessous le résultat des deux méthodes : 4189 4190@cindex MetronomeMark, exemple de dérogation 4191@cindex transparent, exemple d'utilisation de la propriété 4192 4193@lilypond[quote,verbatim,ragged-right] 4194\score { 4195 \relative { 4196 % Visible tempo marking 4197 \tempo 4=120 4198 a'4 a a 4199 \once \hide Score.MetronomeMark 4200 % Invisible tempo marking to lengthen fermata in MIDI 4201 \tempo 4=80 4202 a4\fermata | 4203 % New tempo for next section 4204 \tempo 4=100 4205 a4 a a a | 4206 } 4207 \layout { } 4208 \midi { } 4209} 4210@end lilypond 4211 4212@cindex MetronomeMark, exemple de dérogation 4213@cindex stencil, exemple d'utilisation de la propriété 4214 4215@lilypond[quote,verbatim,ragged-right] 4216\score { 4217 \relative { 4218 % Visible tempo marking 4219 \tempo 4=120 4220 a'4 a a 4221 \once \omit Score.MetronomeMark 4222 % Invisible tempo marking to lengthen fermata in MIDI 4223 \tempo 4=80 4224 a4\fermata | 4225 % New tempo for next section 4226 \tempo 4=100 4227 a4 a a a | 4228 } 4229 \layout { } 4230 \midi { } 4231} 4232@end lilypond 4233 4234@noindent 4235Les deux méthodes permettent d'enlever l'indication métronomique qui 4236allonge le point d'orgue de la partition, et toutes deux modifient le 4237rythme MIDI comme souhaité mais, dans la première, l'indication 4238métronomique transparente repousse vers le haut l'indication de tempo, 4239contrairement à la seconde (avec le stencil désactivé) qui la laisse à 4240sa place. 4241 4242@morerefs 4243Glossaire musicologique : 4244@rglosnamed{system,système}. 4245 4246 4247@node Utilisation de variables dans les retouches 4248@subsection Utilisation de variables dans les retouches 4249@translationof Using variables for layout adjustments 4250 4251@cindex variables, utilisation dans les retouches 4252@cindex utilisation de variables dans les retouches 4253@cindex retouches et utilisation de variables 4254 4255Les commandes de retouche sont souvent longues et pénibles à 4256taper, et ne tolèrent pas la moindre erreur. Lorsqu'on a besoin de 4257faire plusieurs fois les mêmes retouches, il est préférable de 4258définir des variables qui les contiennent. 4259 4260Imaginons que nous voulions accentuer certains mots dans des paroles en 4261les mettant en italique. Au lieu des commandes @code{\italic} et 4262@code{\bold}, qui ne fonctionnent dans les paroles que si elles sont 4263enchâssées dans un @code{\markup} -- ce qui les rend pénibles à saisir 4264-- pouvons-nous employer les commandes @code{\override} et 4265@code{\revert} ? 4266 4267@example 4268\override Lyrics.LyricText.font-shape = #'italic 4269\override Lyrics.LyricText.font-series = #'bold 4270 4271\revert Lyrics.LyricText.font-shape 4272\revert Lyrics.LyricText.font-series 4273@end example 4274 4275Là encore, ce serait extrêmement pénible à saisir, surtout s'il y avait 4276beaucoup de mots à retoucher de cette façon. Plutôt que cette 4277solution, nous déclarons ces commandes comme étant deux variables, 4278et les utilisons comme ci-après -- quoique on choisirait sans doute pour 4279les variables des noms plus courts pour simplifier la frappe. Par 4280ailleurs, le fait de recourir à une variable ne nous expose plus à 4281l'oubli des espaces entourant les points lorsqu'explicités au beau 4282milieu d'un bloc @code{\lyricmode} ! 4283 4284@cindex LyricText, exemple de dérogation 4285@cindex font-shape, exemple d'utilisation de la propriété 4286@cindex font-series, exemple d'utilisation de la propriété 4287 4288@lilypond[quote,verbatim] 4289emphasize = { 4290 \override Lyrics.LyricText.font-shape = #'italic 4291 \override Lyrics.LyricText.font-series = #'bold 4292} 4293 4294normal = { 4295 \revert Lyrics.LyricText.font-shape 4296 \revert Lyrics.LyricText.font-series 4297} 4298 4299global = { \key c \major \time 4/4 \partial 4 } 4300 4301SopranoMusic = \relative { c'4 | e4. e8 g4 g | a4 a g } 4302AltoMusic = \relative { c'4 | c4. c8 e4 e | f4 f e } 4303TenorMusic = \relative { e4 | g4. g8 c4. b8 | a8 b c d e4 } 4304BassMusic = \relative { c4 | c4. c8 c4 c | f8 g a b c4 } 4305 4306VerseOne = \lyricmode { 4307 E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save, 4308} 4309 4310VerseTwo = \lyricmode { 4311 O | \emphasize Christ, \normal whose voice the | wa -- ters heard, 4312} 4313 4314VerseThree = \lyricmode { 4315 O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood 4316} 4317 4318VerseFour = \lyricmode { 4319 O | \emphasize Tri -- ni -- ty \normal of | love and pow'r 4320} 4321 4322\score { 4323 \new ChoirStaff << 4324 \new Staff << 4325 \clef "treble" 4326 \new Voice = "Soprano" { \voiceOne \global \SopranoMusic } 4327 \new Voice = "Alto" { \voiceTwo \AltoMusic } 4328 \new Lyrics \lyricsto "Soprano" { \VerseOne } 4329 \new Lyrics \lyricsto "Soprano" { \VerseTwo } 4330 \new Lyrics \lyricsto "Soprano" { \VerseThree } 4331 \new Lyrics \lyricsto "Soprano" { \VerseFour } 4332 >> 4333 \new Staff << 4334 \clef "bass" 4335 \new Voice = "Tenor" { \voiceOne \TenorMusic } 4336 \new Voice = "Bass" { \voiceTwo \BassMusic } 4337 >> 4338 >> 4339} 4340@end lilypond 4341 4342 4343@node Feuilles de style 4344@subsection Feuilles de style 4345@translationof Style sheets 4346 4347La sortie que produit LilyPond peut être largement modifiée -- voir 4348@ref{Retouche de partition} pour plus de détails. Mais que faire si 4349vous avez beaucoup de fichiers auxquels vous souhaitez appliquer vos 4350retouches ? Ou si vous souhaitez simplement séparer les retouches 4351de la musique elle-même ? Rien de plus facile. 4352 4353Prenons un exemple. Ne vous inquiétez pas si vous ne comprenez pas 4354les parties avec tous les @code{#()}. Celles-ci sont expliquées dans 4355@ref{Retouches avancées avec Scheme}. 4356 4357@lilypond[quote,verbatim,ragged-right] 4358mpdolce = 4359 \tweak self-alignment-X #-0.6 4360 #(make-dynamic-script 4361 #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #}) 4362 4363inst = 4364#(define-music-function 4365 (string) 4366 (string?) 4367 #{ <>^\markup \bold \box #string #}) 4368 4369\relative { 4370 \tempo 4=50 4371 a'4.\mpdolce d8 cis4--\glissando a | 4372 b4 bes a2 | 4373 \inst "Clarinet" 4374 cis4.\< d8 e4 fis | 4375 g8(\! fis)-. e( d)-. cis2 | 4376} 4377@end lilypond 4378 4379On peut faire quelque chose pour les définitions de @code{mpdolce} 4380et @code{inst}. Elles produisent le résultat que nous désirons, 4381mais nous pourrions aussi vouloir les utiliser dans une autre pièce. 4382Il suffirait de les copier et coller au début de chaque 4383fichier, mais c'est fastidieux. De plus, cela laisse les définitions 4384dans nos fichiers de musique, et je trouve personnellement tous ces 4385@code{#()} assez laids. Stockons-les dans un autre fichier : 4386 4387@example 4388%%% enregistrez ceci dans un fichier nommé "definitions.ily" 4389mpdolce = 4390 \tweak self-alignment-X #-0.6 4391 #(make-dynamic-script 4392 #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@}) 4393 4394inst = 4395#(define-music-function 4396 (string) 4397 (string?) 4398 #@{ <>^\markup \bold \box #string #@}) 4399@end example 4400 4401Nous rappellerons ce fichier par une simple commande @code{\include} au 4402début de notre fichier de musique. Lui attribuer l'extension 4403@code{.ily} nous permet de distinguer aisément qu'il s'agit d'un fichier 4404voué à être inclus dans un fichier maître ; il n'est pas destiné à 4405être compilé isolément.@* 4406Maintenant, modifions notre musique (enregistrez ce fichier 4407sous @file{musique.ly}). 4408 4409@c We have to do this awkward example/lilypond-non-verbatim 4410@c because we can't do the \include stuff in the manual. 4411 4412@example 4413\include "definitions.ily" 4414 4415\relative @{ 4416 \tempo 4=50 4417 a'4.\mpdolce d8 cis4--\glissando a | 4418 b4 bes a2 | 4419 \inst "Clarinet" 4420 cis4.\< d8 e4 fis | 4421 g8(\! fis)-. e( d)-. cis2 | 4422@} 4423@end example 4424 4425@lilypond[quote,ragged-right] 4426mpdolce = 4427 \tweak self-alignment-X #-0.6 4428 #(make-dynamic-script 4429 #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #}) 4430 4431inst = 4432#(define-music-function 4433 (string) 4434 (string?) 4435 #{ <>^\markup \bold \box #string #}) 4436 4437\relative { 4438 \tempo 4=50 4439 a'4.\mpdolce d8 cis4--\glissando a | 4440 b4 bes a2 | 4441 \inst "Clarinet" 4442 cis4.\< d8 e4 fis | 4443 g8(\! fis)-. e( d)-. cis2 | 4444} 4445@end lilypond 4446 4447C'est mieux, mais effectuons encore quelques retouches. Le glissando 4448est peu visible, c'est pourquoi nous allons l'épaissir et le 4449rapprocher des têtes de note. Déplaçons l'indication métronomique 4450au-dessus de la clef, au lieu de la laisser au-dessus de la première 4451note. Et pour finir, mon professeur de composition déteste les 4452chiffrages de mesure en « C », nous allons donc le transformer en 4453« 4/4 ». 4454 4455Cependant, ne changez pas le fichier @file{musique.ly}. Remplacez le 4456fichier @file{definitions.ily} par ceci : 4457 4458@example 4459%%% definitions.ily 4460mpdolce = 4461 \tweak self-alignment-X #-0.6 4462 #(make-dynamic-script 4463 #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@}) 4464 4465inst = 4466#(define-music-function 4467 (string) 4468 (string?) 4469 #@{ <>^\markup \bold \box #string #@}) 4470 4471\layout@{ 4472 \context @{ 4473 \Score 4474 \override MetronomeMark.extra-offset = #'(-5 . 0) 4475 \override MetronomeMark.padding = #'3 4476 @} 4477 \context @{ 4478 \Staff 4479 \override TimeSignature.style = #'numbered 4480 @} 4481 \context @{ 4482 \Voice 4483 \override Glissando.thickness = #3 4484 \override Glissando.gap = #0.1 4485 @} 4486@} 4487@end example 4488 4489@lilypond[quote,ragged-right] 4490mpdolce = 4491 \tweak self-alignment-X #-0.6 4492 #(make-dynamic-script 4493 #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #}) 4494 4495inst = 4496#(define-music-function 4497 (string) 4498 (string?) 4499 #{ <>^\markup \bold \box #string #}) 4500 4501\layout{ 4502 \context { 4503 \Score 4504 \override MetronomeMark.extra-offset = #'(-5 . 0) 4505 \override MetronomeMark.padding = #'3 4506 } 4507 \context { 4508 \Staff 4509 \override TimeSignature.style = #'numbered 4510 } 4511 \context { 4512 \Voice 4513 \override Glissando.thickness = #3 4514 \override Glissando.gap = #0.1 4515 } 4516} 4517 4518\relative { 4519 \tempo 4=50 4520 a'4.\mpdolce d8 cis4--\glissando a | 4521 b4 bes a2 | 4522 \inst "Clarinet" 4523 cis4.\< d8 e4 fis | 4524 g8(\! fis)-. e( d)-. cis2 | 4525} 4526@end lilypond 4527 4528C'est encore mieux ! Mais supposons maintenant que je veuille 4529publier cette pièce. Mon professeur de composition n'aime pas les 4530chiffrages de mesure en « C », mais moi je les aime bien. Copions 4531l'actuel @file{definitions.ily} dans le fichier 4532@file{publication-web.ily}, et modifions ce dernier. Puisque la musique 4533est destinée à produire un fichier PDF affiché sur écran, nous allons 4534aussi augmenter la taille globale de police. 4535 4536@example 4537%%% web-publish.ily 4538mpdolce = 4539 \tweak self-alignment-X #-0.6 4540 #(make-dynamic-script 4541 #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@}) 4542 4543inst = 4544#(define-music-function 4545 (string) 4546 (string?) 4547 #@{ <>^\markup \bold \box #string #@}) 4548 4549#(set-global-staff-size 23) 4550 4551\layout@{ 4552 \context @{ 4553 \Score 4554 \override MetronomeMark.extra-offset = #'(-5 . 0) 4555 \override MetronomeMark.padding = #'3 4556 @} 4557 \context @{ 4558 \Staff 4559 @} 4560 \context @{ 4561 \Voice 4562 \override Glissando.thickness = #3 4563 \override Glissando.gap = #0.1 4564 @} 4565@} 4566@end example 4567 4568@lilypond[quote,ragged-right] 4569mpdolce = 4570 \tweak self-alignment-X #-0.6 4571 #(make-dynamic-script 4572 #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #}) 4573 4574inst = 4575#(define-music-function 4576 (string) 4577 (string?) 4578 #{ <>^\markup \bold \box #string #}) 4579 4580#(set-global-staff-size 23) 4581 4582\layout{ 4583 \context { \Score 4584 \override MetronomeMark.extra-offset = #'(-5 . 0) 4585 \override MetronomeMark.padding = #'3 4586 } 4587 \context { \Voice 4588 \override Glissando.thickness = #3 4589 \override Glissando.gap = #0.1 4590 } 4591} 4592 4593\relative { 4594 \tempo 4=50 4595 a'4.\mpdolce d8 cis4--\glissando a | 4596 b4 bes a2 | 4597 \inst "Clarinet" 4598 cis4.\< d8 e4 fis | 4599 g8(\! fis)-. e( d)-. cis2 | 4600} 4601@end lilypond 4602 4603Il ne nous reste plus qu'à remplacer 4604@code{\include "definitions.ily"} par 4605@code{\include "publication-web.ily"} dans notre fichier de 4606musique. 4607 4608Il est possible, bien sûr, de rendre cela encore plus pratique. Nous 4609pourrions créer un fichier @file{definitions.ily} qui ne contiendrait 4610que les définitions de @code{mpdolce} et de @code{inst}, un fichier 4611@file{publication-web.ily} qui ne contiendrait que la section 4612@code{layout} décrite ci-dessus et un fichier @file{universite.ily} qui 4613ne contiendrait que les retouches pour produire le résultat que mon 4614professeur préfère. Le début du fichier @file{musique.ly} ressemblerait 4615alors à 4616 4617@example 4618\include "definitions.ily" 4619 4620%%% Décommentez seulement une de ces deux lignes ! 4621\include "publication-web.ily" 4622%\include "universite.ily" 4623@end example 4624 4625Cette approche peut être utile même si vous ne produisez qu'un seul 4626jeu de partitions. J'utilise personnellement une demi-douzaine de 4627fichiers de « feuille de style » pour mes projets. Je commence 4628chaque fichier de musique par @code{\include "../global.ily"} qui 4629contient : 4630 4631@example 4632%%% global.ily 4633\version @w{"@version{}"} 4634 4635#(ly:set-option 'point-and-click #f) 4636 4637\include "../init/init-defs.ly" 4638\include "../init/init-mise-en-page.ly" 4639\include "../init/init-en-tetes.ly" 4640\include "../init/init-papier.ly" 4641@end example 4642 4643 4644@node Autres sources de documentation 4645@subsection Autres sources de documentation 4646@translationof Other sources of information 4647 4648La référence des propriétés internes contient beaucoup d'informations 4649sur LilyPond. Cependant vous pouvez en découvrir encore plus en 4650consultant les fichiers internes de LilyPond. Pour cela, il vous faut 4651d'abord connaître le répertoire @emph{ad hoc} sur votre système. 4652L'emplacement du répertoire dépend (a) du fait que, pour vous procurer 4653LilyPond, vous avez téléchargé un paquet précompilé sur lilypond.org ou 4654vous l'avez installé grâce à votre gestionnaire de paquetages 4655(c'est-à-dire distribué avec GNU/Linux ou installé avec fink ou cygwin), ou 4656encore vous l'avez compilé directement à partir des sources ; et 4657(b) du système d'exploitation sur lequel il tourne. 4658 4659 4660@subsubsubheading Téléchargé depuis lilypond.org 4661 4662@itemize @bullet 4663@item GNU/Linux 4664 4665@example 4666@file{@var{INSTALLDIR}/lilypond/usr/@/share/lilypond/current/} 4667@end example 4668 4669@item MacOS X 4670 4671@example 4672@file{@var{INSTALLDIR}/LilyPond.app/Contents/@/Resources/share/lilypond/current/} 4673@end example 4674 4675Pour accéder à ce dossier, deux possibilités : soit, dans un 4676Terminal, taper @code{cd} suivi du chemin complet ci-dessus ; soit 4677Control-cliquer (ou clic droit) sur l'application LilyPond 4678et sélectionner « Afficher le contenu du paquet ». 4679 4680@item Windows 4681 4682Dans l'Explorateur Windows, voir 4683@example 4684@file{@var{INSTALLDIR}/LilyPond/usr/@/share/lilypond/current/} 4685@end example 4686 4687@end itemize 4688 4689 4690@subsubsubheading Installé par un gestionnaire de paquetages ou compilé d'après les sources 4691 4692@code{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, où 4693@var{PREFIX} est déterminé par votre gestionnaire de paquetages ou par 4694le script @code{configure}, et @var{X.Y.Z} représente le numéro de 4695version de LilyPond. 4696 4697@smallspace 4698 4699Dans ce répertoire, deux sous-répertoires sont particulièrement 4700intéressants : 4701 4702@itemize 4703@item @code{ly/} -- contient les fichiers en format LilyPond 4704@item @code{scm/} -- contient les fichiers en format Scheme 4705@end itemize 4706 4707Commençons par examiner quelques fichiers contenus dans @file{ly/}. 4708Nous ouvrons @file{ly/property-init.ly} dans un éditeur de texte -- 4709celui que vous avez l'habitude d'utiliser pour les fichiers @file{.ly} 4710fera très bien l'affaire. Ce fichier contient les définitions de toutes 4711les commandes standard prédéfinies de LilyPond, comme @code{\tieUp} et 4712@code{\slurDotted}. Vous pouvez constater que ce n'est rien d'autre 4713que des définitions de variables composées d'un ou plusieurs groupes 4714de commandes @code{\override}. Par exemple, @code{\tieDotted} 4715est défini comme : 4716 4717@example 4718tieDotted = @{ 4719 \override Tie.dash-period = #0.75 4720 \override Tie.dash-fraction = #0.1 4721@} 4722@end example 4723 4724Si vous n'aimez pas les valeurs par défaut, les commandes prédéfinies 4725peuvent être facilement redéfinies, comme n'importe quelle autre 4726variable, en tête de votre fichier d'entrée. 4727 4728Voici les fichiers les plus utiles dans le répertoire @file{ly/} : 4729 4730@multitable @columnfractions .4 .6 4731@headitem Nom de fichier 4732 @tab Contenu 4733@item @file{ly/engraver-init.ly} 4734 @tab Définition des contextes de graveurs 4735@item @file{ly/paper-defaults-init.ly} 4736 @tab Réglages papier par défaut 4737@item @file{ly/performer-init.ly} 4738 @tab Définition des contextes d'interprétation 4739@item @file{ly/property-init.ly} 4740 @tab Définition de toutes les commandes prédéfinies courantes 4741@item @file{ly/spanner-init.ly} 4742 @tab Définition des commandes prédéfinies pour les bandeaux 4743@end multitable 4744 4745Les autres réglages (comme les définitions de commandes @emph{markup}) 4746sont conservés comme fichiers @file{.scm} (Scheme). Le langage de 4747programmation Scheme offre une interface programmable dans le 4748processus interne de LilyPond. De plus amples explications sur ces 4749fichiers dépasseraient le cadre de ce manuel dans la mesure où elles 4750requièrent la connaissance du langage Scheme. Les utilisateurs qui 4751souhaiteraient comprendre le fonctionnement de ces fichiers de 4752configuration doivent être avertis que des connaissances techniques 4753substantielles et beaucoup de temps sont nécessaires (voir le 4754@rextend{Tutoriel Scheme}). 4755 4756Si c'est votre cas, les fichiers Scheme les plus utiles à connaître 4757sont : 4758 4759@multitable @columnfractions .4 .6 4760@headitem Nom de fichier 4761 @tab Contenu 4762@item @file{scm/auto-beam.scm} 4763 @tab Règles par défaut des ligatures subalternes 4764@item @file{scm/define-grobs.scm} 4765 @tab Réglages par défaut des propriétés de @emph{grobs} 4766@item @file{scm/define-markup-commands.scm} 4767 @tab Spécification de toutes les commandes de @emph{markup} 4768@item @file{scm/midi.scm} 4769 @tab Réglages par défaut pour les sorties MIDI 4770@item @file{scm/output-lib.scm} 4771 @tab Réglages affectant l'apparence des frets, couleurs, altérations, 4772 barres de mesure, etc. 4773@item @file{scm/parser-clef.scm} 4774 @tab Définition des clefs prises en charge 4775@item @file{scm/script.scm} 4776 @tab Réglages par défaut des articulations 4777@end multitable 4778 4779 4780@node Retouches avancées avec Scheme 4781@subsection Retouches avancées avec Scheme 4782@translationof Advanced tweaks with Scheme 4783 4784Nous avons vu à quel point le résultat obtenu avec LilyPond peut 4785être largement personnalisé à l'aide de commandes comme 4786@code{\override} et @code{\tweak}. Et pourtant l'utilisation de 4787Scheme ouvre des possibilités encore plus grandes. 4788Le code écrit dans le langage de programmation Scheme peut être 4789intégré directement dans le processus interne de LilyPond. Bien sûr, 4790il faut pour cela connaître un minimum de programmation en langage 4791Scheme. Pour des explications complètes là-dessus, consultez le 4792@rextend{Tutoriel Scheme}. 4793 4794En guise d'illustration -- et ce n'est qu'une possibilité parmi tant 4795d'autres -- nous allons attribuer à une propriété non pas une valeur 4796préétablie mais une procédure Scheme qui sera lancée à chaque 4797utilisation de la propriété par LilyPond. De cette façon, nous obtenons 4798un réglage dynamique de la propriété par le simple fait d'invoquer la 4799procédure. Dans cet exemple, nous colorons les têtes de notes en 4800fonction de leur position sur la portée. 4801 4802@cindex x11-color, exemple d'utilisation de la fonction 4803@cindex NoteHead, exemple de dérogation 4804@cindex color, détermination de la propriété par une procédure Scheme 4805 4806@lilypond[quote,verbatim,ragged-right] 4807#(define (color-notehead grob) 4808 "Color the notehead according to its position on the staff." 4809 (let ((mod-position (modulo (ly:grob-property grob 'staff-position) 4810 7))) 4811 (case mod-position 4812 ;; Return rainbow colors 4813 ((1) (x11-color 'red )) ; for C 4814 ((2) (x11-color 'orange )) ; for D 4815 ((3) (x11-color 'yellow )) ; for E 4816 ((4) (x11-color 'green )) ; for F 4817 ((5) (x11-color 'blue )) ; for G 4818 ((6) (x11-color 'purple )) ; for A 4819 ((0) (x11-color 'violet )) ; for B 4820 ))) 4821 4822\relative { 4823 % Arrange to obtain color from color-notehead procedure 4824 \override NoteHead.color = #color-notehead 4825 a2 b | c2 d | e2 f | g2 a | 4826} 4827@end lilypond 4828 4829Vous trouverez dans @rextend{Fonctions de rappel} d'autres exemples 4830d'utilisation de ces interfaces programmables. 4831