[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

5.5 Retouches avancées

@translationof Advanced tweaks

Nous allons voir, au fil des paragraphes qui suivent, différentes approches permettant de fignoler l’apparence d’une partition.

Voir aussi

Manuel d’initiation : (learning)Autres sources de documentation section ‘Autres sources de documentation’ dans Manuel d’initiation, (learning)Retouche de partition section ‘Retouche de partition’ dans Manuel d’initiation.

Manuel de notation : En quoi consiste la référence des propriétés internes, Modification de propriétés.

Manuel d’extension : (extending)Interfaces pour programmeurs section ‘Interfaces pour programmeurs’ dans Extension de LilyPond.

Fichiers d’initialisation : ‘scm/define-grobs.scm’.

Morceaux choisis : (snippets)Tweaks and overrides section ‘Retouches’ dans Morceaux choisis.

Référence des propriétés internes : (internals)All layout objects section ‘All layout objects’ dans Référence des propriétés internes.


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

5.5.1 Alignement des objets

@translationof Aligning objects

Les objets graphiques disposant des interfaces self-alignment-interface ou side-position-interface peuvent s’aligner par rapport à un objet précédemment positionné, ce de différentes manières. Ces objets sont référencés aux rubriques (internals)self-alignment-interface section ‘self-alignment-interface’ dans Référence des propriétés internes et (internals)side-position-interface section ‘side-position-interface’ dans Référence des propriétés internes.

Tous les objets graphiques ont un point de référence, une étendue horizontale et une étendue verticale. L’étendue horizontale est représentée par une paire de nombres indiquant l’écart entre le point de référence et les bords gauche et droit – l’écart à gauche étant négatif. L’étendue verticale est représentée par une paire de nombres indiquant l’écart entre le point de référence et les bords inférieur et supérieur – l’écart vers le bas étant négatif.

La position d’un objet sur la portée est donnée par la valeur des propriétés X-offset et Y-offset. La valeur de X-offset indique l’écart en abscisse (coordonnée X) par rapport au point de référence de l’objet parent ; la valeur de Y-offset indique l’écart par rapport à la ligne médiane de la portée. Les valeurs de X-offset et Y-offset peuvent être fournies arbitrairement, ou bien être calculé par des procédures spécifiques qui détermineront l’alignement par rapport à l’objet parent.

Note : Nombre d’objets sont affectés par des considérations spécifiques en matière de positionnement ; jouer sur les valeurs de X-offset ou Y-offset se révélera inefficace en pareil cas, même si l’objet dispose de la self-alignment-interface. Fixer arbitrairement les propriétés X-offset ou Y-offset annihilera alors les effets de la propriété self-alignment correspondante.

Par exemple, une altération peut se repositionner verticalement grâce à son Y-offset ; toute modification de son X-offset restera par contre sans effet.

Les indications de repère s’alignent sur des objets de rupture – tels les barres de mesure, clefs, métriques et armures. Certaines propriétés spécifiques – dépendant de la break-aligned-interface – permettent de gérer le positionnement des indications de repère sur ces objets.

Voir aussi

Manuel de notation : Utilisation de break-aligned-interface.

Manuel d’extension : (extending)Fonctions de rappel section ‘Fonctions de rappel’ dans Extension de LilyPond.


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

Détermination directe de X-offset et Y-offset

@translationof Setting X-offset and Y-offset directly

Vous pouvez fournir, pour de nombreux objets, des valeurs numériques aux propriétés X-offset et Y-offset. Voici par exemple une note avec indication du doigté tout d’abord avec un positionnement par défaut, puis repositionnement par modification successive du X-offset et du Y-offset.

 
a'-3
a'
-\tweak X-offset #0
-\tweak Y-offset #0
-3
a'
-\tweak X-offset #-1
-\tweak Y-offset #1
-3

[image of music]


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

Utilisation de side-position-interface

@translationof Using the side-position-interface

Un objet disposant de la side-position-interface peut se voir accolé à son voisin de telle sorte que les bords des deux objets se touchent. Un tel objet peut se positionner au-dessus, en dessous, à droite ou à gauche de son parent. Ce parent ne saurait être stipulé ; il est déterminé par l’ordre d’apparition des éléments dans le flux des saisies. La plupart de ces objets ont pour parent la tête de note qui leur est associée.

Les valeurs des propriétés side-axis et direction détermineront l’endroit où viendra se positionner l’objet, selon les préceptes suivants :

PropriétéPropriétéPositionnement
side-axisdirection
0-1gauche
01droite
1-1en dessous
11au-dessus

Pour un side-axis à 0, le X-offset devrait engager la procédure ly:side-position-interface::x-aligned-side. Celle-ci renverra la valeur adéquate de X-offset permettant d’accoler l’objet sur la droite ou sur la gauche de son parent, selon la valeur de direction.

Pour un side-axis à 1, le Y-offset devrait engager la procédure ly:side-position-interface::y-aligned-side. Celle-ci renverra la valeur adéquate de Y-offset permettant d’accoler l’objet au-dessus ou en dessous de son parent, selon la valeur de direction.


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

Utilisation de self-alignment-interface

@translationof Using the self-alignment-interface

Réalignement d’objets horizontalement

L’alignement horizontal d’un objet disposant de la self-alignment-interface dépend de la valeur de sa propriété self-alignment-X, si tant est que la propriété X-offset de cet objet engage la procédure ly:self-alignment-interface::x-aligned-on-self. La propriété self-alignment-X peut contenir un nombre réel, l’unité de base étant la moitié de l’étendue horizontale de l’objet. Une valeur négative décalera l’objet vers la droite, une valeur positive vers la gauche. La valeur 0 permet de centrer l’objet sur le point de référence de son parent. Une valeur de -1 alignera le bord gauche de l’objet sur le point de référence de son parent, et une valeur de 1 alignera le bord droit de l’objet sur le point de référence de son parent. Les valeurs symboliques LEFT, CENTER et RIGHT correspondent respectivement à -1, 0 et 1.

En règle générale, la valeur de self-alignment-X se modifie à l’aide d’une commande \override. Le recours à la commande \tweak permet de traiter séparément plusieurs annotations affectées à une même note :

 
a'
-\tweak self-alignment-X #-1
^"left-aligned"
-\tweak self-alignment-X #0
^"center-aligned"
-\tweak self-alignment-X #RIGHT
^"right-aligned"
-\tweak self-alignment-X #-2.5
^"aligned further to the right"

[image of music]

Réalignement d’objets verticalement

L’alignement vertical suit le même principe : la propriété Y-offset doit alors engager la procédure ly:self-alignment-interface::y-aligned-on-self. Toutefois, il arrive bien souvent que d’autres mécanismes interviennent dans l’alignement vertical. La valeur de Y-offset n’étant que l’une des variables qui seront prises en compte, l’ajustement pour certains objets peut se révéler fastidieux. L’unité de base est relativement réduite, puisqu’elle est de la moitié de l’étendue verticale de l’objet ; le nombre à fournir en argument pourrait donc être relativement élevé. Une valeur de -1 alignera le bord inférieur de l’objet sur le point de référence de son parent, et une valeur de 1 alignera le bord supérieur de l’objet sur le point de référence de son parent. La valeur 0 permet de centrer l’objet sur le point de référence de son parent. Les valeurs symboliques DOWN, CENTER et UP correspondent respectivement à -1, 0 et 1.

Réalignement d’objets sur les deux axes

Définir à la fois X-offset et Y-offset permet de réaligner un objet sur les deux axes.

Dans l’exemple ci-dessous, nous ajustons l’indication de doigté de telle sorte qu’elle se place au plus près de la tête de note.

 
a'
-\tweak self-alignment-X #0.5  % move horizontally left
-\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
-\tweak self-alignment-Y #-1  % move vertically up
-3  % third finger

[image of music]


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

Utilisation de break-aligned-interface

@translationof Using the break-alignable-interface

Indications de repère et numéros de mesure peuvent s’aligner sur des objets de notation autres qu’une barre de mesure. Parmi ces objets, nous citerons ambitus, breathing-sign, clef, custos, staff-bar, left-edge, key-cancellation, key-signature, et time-signature.

Chaque objet possède son propre point de référence par défaut, sur lequel viendront s’aligner les indications de repère :

 
% The rehearsal mark will be aligned to the right edge of the Clef
\override Score.RehearsalMark.break-align-symbols = #'(clef)
\key a \major
\clef treble
\mark "↓"
e'1
% The rehearsal mark will be aligned to the left edge of the Time Signature
\override Score.RehearsalMark.break-align-symbols = #'(time-signature)
\key a \major
\clef treble
\time 3/4
\mark "↓"
e'2.
% The rehearsal mark will be centered above the Breath Mark
\override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
\key a \major
\clef treble
\time 4/4
e'1
\breathe
\mark "↓"

[image of music]

Les différents objets sur lesquels l’alignement pourrait intervenir seront regroupés dans une liste. Si l’un des objets est invisible à l’endroit voulu, en raison d’un réglage de break-visibility ou bien par forçage de la visibilité des armures et clefs, le repère ou le numéro de mesure viendra s’aligner sur le premier élément de cette liste qui soit visible. Dans le cas où aucun objet de la liste n’est visible, l’alignement se fera sur la barre de mesure ou, dans le cas où la barre de mesure est invisible, à l’endroit même où la barre prendrait place.

 
% The rehearsal mark will be aligned to the right edge of the Key Signature
\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef treble
\mark "↓"
e'1
% The rehearsal mark will be aligned to the right edge of the Clef
\set Staff.explicitKeySignatureVisibility = #all-invisible
\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef bass
\mark "↓"
gis,1
% The rehearsal mark will be centered above the Bar Line
\set Staff.explicitKeySignatureVisibility = #all-invisible
\set Staff.explicitClefVisibility = #all-invisible
\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef treble
\mark "↓"
e'1

[image of music]

L’alignement d’un repère sur un objet de notation peut se modifier, comme l’illustre l’exemple suivant. Toutefois, si la partition comporte plusieurs portées, ce réglage devra apparaître dans chacune des portées.

 
% The RehearsalMark will be aligned with the right edge of the Key Signature
\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\key a \major
\clef treble
\time 4/4
\mark "↓"
e'1
% The RehearsalMark will be centered above the Key Signature
\once \override Score.KeySignature.break-align-anchor-alignment = #CENTER
\mark "↓"
\key a \major
e'1
% The RehearsalMark will be aligned with the left edge of the Key Signature
\once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
\key a \major
\mark "↓"
e'1

[image of music]

Le bord gauche d’un repère peut se décaler arbitrairement sur la gauche ou sur la droite. La valeur est exprimée en espaces de portée.

 
% The RehearsalMark will be aligned with the left edge of the Key Signature
% and then shifted right by 3.5 staff-spaces
\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\once \override Score.KeySignature.break-align-anchor = #3.5
\key a \major
\mark "↓"
e'1
% The RehearsalMark will be aligned with the left edge of the Key Signature
% and then shifted left by 2 staff-spaces
\once \override Score.KeySignature.break-align-anchor = #-2
\key a \major
\mark "↓"
e'1

[image of music]


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

5.5.2 Regroupement vertical d’objets graphiques

@translationof Vertical grouping of grobs

Les objets VerticalAlignment et VerticalAxisGroup travaillent de concert. Comme leur nom anglais l’indiquent, VerticalAxisGroup regroupe différents objets tels que les portées (Staff), les paroles (Lyrics) et ainsi de suite ; puis VerticalAlignment synchronise verticalement ces différents groupes. En général, il n’y a qu’un seul VerticalAlignment pour l’ensemble de la partition, mais chaque contexte Staff, Lyrics, etc. possède son propre VerticalAxisGroup.


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

5.5.3 Modification des stencils

@translationof Modifying stencils

Tout objet de rendu dispose d’une propriété stencil attachée à la grob-interface. En règle générale, cette propriété référence par défaut une fonction spécifique à l’objet et taillée sur mesure pour fournir le symbole qui va le représenter dans l’output. Par exemple, le réglage standard de la propriété stencil de l’objet MultiMeasureRest est ly:multi-measure-rest::print.

Le symbole standard d’un objet quel qu’il soit peut être remplacé à partir du moment où la propriété stencil référence une procédure différente et écrite à cet effet. Ceci requiert une bonne maîtrise du fonctionnement interne de LilyPond, mais est grandement facilité dans bien des cas et permet d’obtenir le résultat escompté.

En effet, rien ne nous interdit, à partir de la propriété stencil, d’appeler la procédure qui génère du texte, ly:text-interface::print en l’occurrence, et d’adjoindre à l’objet une propriété text qui contiendra, sous forme de markup, le symbole à dessein. Grâce à l’extrême flexibilité des markups, vous pourrez parvenir à bien des choses – voir à ce sujet Éléments graphiques dans du texte formaté.

C’est la technique employée ici, où l’une des têtes de note est remplacée par une croix inscrite dans un cercle :

 
XinO = {
  \once \override NoteHead.stencil = #ly:text-interface::print
  \once \override NoteHead.text = \markup {
    \combine
      \halign #-0.7 \draw-circle #0.85 #0.2 ##f
      \musicglyph "noteheads.s2cross"
  }
}
\relative {
  a' a \XinO a a
}

[image of music]

Tous les glyphes Feta de la fonte Emmentaler sont accessibles à l’aide de la commande de markup \musicglyph – voir La fonte Emmentaler.

L’insertion de fichier ‘EPS’ ou d’instructions Postscript sont accessibles par les commandes de markup \epsfile et \postscript respectivement – voir l’annexe (notation)Graphic section ‘Graphisme’ dans Manuel de notation.

Voir aussi

Manuel de notation : Commandes pour markup, Éléments graphiques dans du texte formaté, (notation)Graphic section ‘Graphisme’ dans Manuel de notation, La fonte Emmentaler, Mise en forme du texte.


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

5.5.4 Modification de l’allure des éléments

@translationof Modifying shapes


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

Modification des liaisons

@translationof Modifying ties and slurs

Les liaisons, qu’elles soient de prolongation (Tie), d’articulation (Slur), de phrasé (PhrasingSlur), de laisser-vibrer (LaissezVibrerTie) ou de reprise (RepeatTie), sont dessinées sous la forme de courbes de Bézier de degré trois. Lorsque l’aspect de la liaison automatiquement calculé n’est pas satisfaisant, il peut être modifié manuellement de deux manières différentes :

  1. en spécifiant l’ajustement qui doit être apporté aux points de contrôle de la courbe calculée automatiquement, ou
  2. en fournissant explicitement les quatre points de contrôle qui permettront de définir cette courbe.

Ces deux méthodes sont expliquées ci-dessous. La première convient mieux dans le cas d’une légère adaptation de la courbe ; la seconde sera plus efficace lorsqu’il s’agira de créer une courbe sur une seule et unique note.

Courbes de Bézier cubiques

Quatre points définissent une courbe de Bézier cubique. Les premier et quatrième points sont les points de départ et d’arrivée de la courbe ; les deux autres points de contrôle – P1 et P2 – en détermineront l’allure. La courbe se trace en partant du point P0, en se dirigeant vers P1 et en arrivant au point P3 selon la direction P2-P3. La courbe est à l’intérieur de l’enveloppe convexe des points de contrôle. Tout déplacement (translation, rotation, échelonnement) des points de contrôle sera répercuté sur le dessin de la courbe.

Spécification de l’ajustement des points de contrôle

Voici par exemple une liaison de prolongation dont l’allure n’est pas des plus heureuses, même en optant pour un \tieDown.

 
<<
  { e'1~ 1 }
\\
  \relative { r4 <g' c,> <g c,> <g c,> }
>>

[image of music]

L’ajustement des points de contrôle de cette liaison de tenue à l’aide de \shape permet d’éviter les collisions.

L’instruction \shape obéit à la syntaxe

 
[-]\shape déplacements élément

Ceci aura pour effet de repositionner les points de contrôle de élément des différents montants fournis par déplacements. L’argument déplacements est constitué d’une liste de paires de nombres ou bien d’une liste de telles listes. Chacun des membres de l’une des paires indique l’ajustement de la coordonnée d’un point de contrôle. Lorsque élément est textuel, il en résulte une dérogation particulière appliquée au type d’objet considéré, alors que dans le cas d’une expression musicale sera appliqué un affinage approprié.

En d’autres termes, la fonction \shape se comporte soit comme un \once \override, soit comme un \tweak selon que l’argument élément est un nom d’objet – tel « Slur » – ou une expression musicale tel un « ( ». L’argument déplacements spécifie les ajustements à apporter aux quatre points de contrôle, sous la forme d’une liste de paires (dx . dy) dont les valeurs sont exprimées en espace de portée ; on utilisera une liste de listes de paires dans le cas où la courbe comporte plusieurs segments.

La fonction sera précédée d’un tiret si et seulement si elle doit s’appliquer sous forme de \tweak.

Pour l’exemple qui nous occupe, l’adaptation sous forme dérogatoire – recours à \once\override – de la fonction \shape, nous pouvons remonter la liaison d’un demi espace de portée :

 
<<
  {
    \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
    e'1~ 1
  }
\\
  \relative { r4 <g' c,> <g c,> <g c,> }
>>

[image of music]

La liaison est maintenant mieux positionnée ; mais sa partie centrale pourrait être un peu plus relevée, en procédant comme ci-dessous, cette fois en utilisant la formulation d’affinage – la forme \tweak :

 
<<
  {
    e'1-\shape #'((0 . 0.5) (0 . 1) (0 . 1) (0 . 0.5)) ~ e'
  }
\\
  \relative { r4 <g' c,> <g c,> <g c,> }
>>

[image of music]

L’adaptation du positionnement horizontal des points de contrôle se réalise de la même manière, ce qui permet de gérer le galbe de deux courbes débutant au même instant musical :

 
\relative {
  c''8(\( a) a'4 e c\)
  \shape #'((0.7 . -0.4) (0.5 . -0.4) (0.3 . -0.3) (0 . -0.2)) Slur
  \shape #'((0 . 0) (0 . 0.5) (0 . 0.5) (0 . 0)) PhrasingSlur
  c8(\( a) a'4 e c\)
}

[image of music]

La fonction \shape permet aussi d’adapter les points de contrôle d’une courbe qui se prolonge après un saut de ligne. Chaque portion de la courbe peut se voir appliquer sa propre liste d’ajustements. Lorsque l’un des segments ne nécessite pas de retouche, il suffit de lui fournir une liste vide. Dans l’exemple suivant, le saut de ligne laisse à croire qu’il y a non pas une seule mais deux liaisons :

 
\relative {
  c'4( f g c
  \break
  d,4 c' f, c)
}

[image of music]

Regalber les deux moitiés de la liaison rend plus évident le fait qu’elle s’étend par delà le saut de ligne :

 
% () may be used as a shorthand for ((0 . 0) (0 . 0) (0 . 0) (0 . 0))
% if any of the segments does not need to be changed
\relative c' {
  \shape #'(
             (( 0 . 0) (0 . 0) (0 . 0) (0 . 1))
             ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
           ) Slur
  c4( f g c
  \break
  d,4 c' f, c)
}

[image of music]

La présence d’une courbe en esse requiert obligatoirement d’ajuster manuellement les points de contrôle – LilyPond n’optera jamais automatiquement pour un tel galbe.

 
\relative c'' {
  c8( e b-> f d' a e-> g)
  \shape #'((0 . -1) (5.5 . -0.5) (-5.5 . -10.5) (0 . -5.5)) PhrasingSlur
  c8\( e b-> f d' a e-> g\)
}

[image of music]

Déclaration explicite des points de contrôle

Les coordonnées des points de contrôle sont données en unités d’espace de portée. L’abscisse est relative au point de référence de la note de départ de la liaison ; l’ordonnée est relative à la ligne médiane de la portée. Les différentes coordonnées sont entrées sous la forme d’une liste de quatre paires de nombres décimaux (ou nombres réels). L’une des manières de procéder consiste à tout d’abord estimer les coordonnées des deux extrémités puis, par tâtonnement, déterminer les deux points intermédiaires. Gardez à l’esprit que ces valeurs pourront devoir être revues si la musique ou sa mise en forme sont modifées.

L’une des situation où spécifier explicitement les points de contrôle se révèle être tout à fait appropriée est lorsqu’ils se réfèrent à une seule et unique note. L’exemple suivant illustre l’un des moyens d’indiquer une liaison qui se prolonge sur les alternatives d’une répétition.

 
\relative {
  c''1
  \repeat volta 3 { c4 d( e f }
  \alternative {
    { g2) d }
    {
      g2
      % create a slur and move it to a new position
      % the <> is just an empty chord to carry the slur termination
      -\tweak control-points #'((-2 . 3.8) (-1 . 3.9) (0 . 4) (1 . 3.4)) ( <> )
      f,
    }
    {
      e'2
      % create a slur and move it to a new position
      -\tweak control-points #'((-2 . 3) (-1 . 3.1) (0 . 3.2) (1 . 2.4)) ( <> )
      f,
    }
  }
}

[image of music]

Problèmes connus et avertissements

Lorsque plusieurs liaisons, quelle qu’en soit la nature, commencent au même moment, jouer sur la propriété control-points est impossible, et la commande \tweak inefficace. Vous pouvez néanmoins influer sur la propriété tie-configuration de l’objet TieColumn pour déterminer la ligne de départ et l’orientation.

Voir aussi

Référence des propriétés internes : (internals)TieColumn section ‘TieColumn’ dans Référence des propriétés internes.


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

5.5.5 Modification de bandeaux avec rupture

@translationof Modifying broken spanners


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

Utilisation de \alterBroken

@translationof Using alterBroken

Lorsqu’un bandeau ou l’extension d’un objet rencontre un saut de ligne ou une rupture, chacun de ses tronçons hérite des attributs de l’objet originel. Par voie de conséquence, la modification d’une extension avec rupture produira les mêmes effets sur chacun de ses segments. Dans l’exemple ci-dessous, la modification apportée à thickness s’applique aussi bien avant qu’après le saut de ligne.

 
\relative c'' {
  r2
  \once\override Slur.thickness = 10
  c8( d e f
  \break
  g8 f e d) r2
}

[image of music]

La commande \alterBroken permet de modifier indépendamment l’apparence de chacune des parties d’un bandeau. Selon le cas, cette commande génèrera soit un \override, soit un \tweak qui s’appliquera à la propriété du bandeau.

La commande \alterBroken répond à la syntaxe :

 
[-]\alterBroken propriété valeurs élément

L’argument valeurs est constitué d’une liste de valeurs, une pour chaque tronçon. Lorsque élément est un nom d’objet graphique, tels Slur ou Staff.PianoPedalBracket, il en résulte un \override du type de grob spécifié. Lorsque élément est une expression musicale comme « ( » ou « [ », en résulte cette même expression musicale à laquelle s’applique un \tweak.

Le tiret introduisant la commande \alterBroken est impératif dans le cadre d’un \tweak ; il est superflu pour un \override.

Dans sa variante \override, la commande \alterBroken peut se préfixer d’un \once ou d’un \temporary qui seront annulés par un \revert suivi de la propriété – voir (extending)Fonctions de substitution intermédiaires section ‘Fonctions de substitution intermédiaires’ dans Extension de LilyPond.

Le code ci-dessous applique un \override indépendant à chacun des segments du phrasé de l’exemple précédent :

 
\relative c'' {
  r2
  \alterBroken thickness #'(10 1) Slur
  c8( d e f
  \break
  g8 f e d) r2
}

[image of music]

La commande \alterBroken peut s’utiliser avec tout objet étendu, y compris Tie, PhrasingSlur, Beam et TextSpanner. Par exemple, un éditeur préparant une édition critique pourrait faire ressortir l’absence d’une partie de liaison de phrasé dans l’une des sources, en optant pour un tracé pointillé du seul segment ajouté. L’exemple ci-dessous illustre la manière de procéder, ici avec la variante \tweak de la commande :

 
% The empty list is conveniently used below, because it is the
% default setting of dash-definition, resulting in a solid curve.
\relative {
  c''2-\alterBroken dash-definition #'(() ((0 1.0 0.4 0.75))) \(e
  \break
  g2 e\)
}

[image of music]

Il est important de considérer que \alterBroken affectera à chaque portion d’un bandeau interrompu la valeur correspondante de valeurs. Si d’aventure il y a moins de valeurs que de tronçons, toute portion additionnelle se verra assigner une liste vide. Ceci peut conduire à des résultats inattendus dans le cas où la propriété de rendu ne bascule pas sur une liste vide par défaut. En pareil cas, chaque segment devrait se voir assigner une valeur appropriée.

Problèmes connus et avertissements

Les sauts de ligne peuvent intervenir à différents endroits pour répondre à des modifications de mise en forme. Les réglages adoptés par \alterBroken peuvent devenir inadaptés si le bandeau n’est plus rompu ou est découpé en plus de segments que prévu. L’introduction explicite d’un \break peut alors pallier ces situations.

La commande \alterBroken est inopérante sur les propriétés d’un bandeau qui sont traitées avant la procédure de saut de ligne, comme direction.

Voir aussi

Manuel d’extension : (extending)Retouches complexes section ‘Retouches complexes’ dans Extension de LilyPond.


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

5.5.6 Conteneurs requalifiants

@translationof Unpure-pure containers

Les conteneurs requalifiants permettent de faciliter le calcul des espacements en cas de modification du Y-axis – plus particulièrement les composantes Y-offset et Y-extent – à l’aide d’une fonction scheme en lieu et place de valeurs.

L’envergure verticale (Y-extent) de certains objets dépend de la propriété stencil ; jouer sur leur stencil requiert alors une intervention supplémentaire au niveau du Y-extent à l’aide d’un conteneur transitoire. Lorsqu’une fonction affecte un Y-offset ou un Y-extent, cela déclenche la détermination des sauts de ligne de manière anticipée dans la séquence des traitements. Il en résulte que cette opération n’est en fait pas exécutée ; elle renvoie habituellement 0 ou '(0 . 0), ce qui peut engendrer des collisions. Une fonction « pure » évitera d’avorter la construction des propriétés ou objets, qui de ce fait verront leurs arguments liés à la verticalité (Y-axis) correctement évalués.

Il existe actuellement une trentaine de fonctions que l’on peut qualifier de « pures ». Le recours à un conteneur transitoire permet de requalifier une fonction de telle sorte qu’elle soit reconnue comme « pure » et soit donc évaluée avant détermination des sauts de ligne – l’espacement horizontal sera de fait ajusté en temps et en heure. La fonction « impure » sera ensuite évaluée après le positionnement des sauts de ligne.

Note : Il n’est pas toujours facile d’avoir l’assurance qu’une fonction soit qualifiée de « pure » ; aussi nous vous recommandons d’éviter d’utiliser les objets Beam ou VerticalAlignment lorsque vous désirez en créer une.

Un conteneur requalifiant se construit selon la syntaxe

(ly:make-unpure-pure-container f0 f1)

où f0 est une fonction prenant n arguments (n_>=_1), le premier devant être l’objet en question ; il s’agit de la fonction dont le résultat sera réutilisé. f1 est la fonction qui sera qualifiée de « pure ». Elle prend n_+_2 arguments, le premier devant être lui aussi l’objet en question, et les second et troisième étant respectivement les « point de départ » (start) et « point d’arrivée » (end).

start et end sont dans tous les cas des valeurs fictives qui trouveront leur utilité dans le cas d’objets de type Spanner, tels les soufflets (Hairpin) ou barres de ligature (Beam), en retournant les différentes estimations de hauteur basées sur leurs début et fin d’extension.

Viennent ensuite les autres arguments de la fonction initiale f0 – autrement dit aucun si n_=_1.

Les résultats de la deuxième fonction (f1) permettent une approximation des valeurs qui seront ensuite utilisées par la fonction initiale aux fins d’ajustement lors des phases ultérieures d’espacement.

 
#(define (square-line-circle-space grob)
(let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
      (notename (ly:pitch-notename pitch)))
 (if (= 0 (modulo notename 2))
     (make-circle-stencil 0.5 0.0 #t)
     (make-filled-box-stencil '(0 . 1.0)
                              '(-0.5 . 0.5)))))

squareLineCircleSpace = {
  \override NoteHead.stencil = #square-line-circle-space
}

smartSquareLineCircleSpace = {
  \squareLineCircleSpace
  \override NoteHead.Y-extent =
   #(ly:make-unpure-pure-container
      ly:grob::stencil-height
      (lambda (grob start end) (ly:grob::stencil-height grob)))
}

\new Voice \with { \remove "Stem_engraver" }
\relative c'' {
  \squareLineCircleSpace
  cis4 ces disis d
  \smartSquareLineCircleSpace
  cis4 ces disis d
}

[image of music]

La première mesure de l’exemple ci-dessus ne fait pas appel à un conteneur requalifiant ; le moteur d’espacement n’a donc aucune connaissance de la largeur des têtes de note et ne peut empêcher qu’elles chevauchent les altérations. Dans la deuxième mesure, par contre, le recours à un conteneur requalifiant informe le moteur d’espacement de la largeur des têtes de note ; les collisions sont alors évitées du fait de l’espace réservé à chacune des têtes.

Lorsqu’il s’agit de calculs simples, les fonctions, tant pour la partie « pure » que pour la partie « impure », peuvent être identiques au détail près du nombre d’arguments utilisés ou du domaine d’intervention. Ce cas de figure étant relativement répandu, ly:make-unpure-pure-container construira d’elle même cette deuxième lorsqu’il ne sera fait appel qu’à une seule fonction en argument.

Note : Le fait de qualifier une fonction de « pure » alors qu’elle ne l’est pas peut générer des résultats imprévisibles.


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]

Ce document a été généré le le 13 juillet 2020 par gub en utilisant texi2html 1.82.

Autres langues : English, català, deutsch, español, italiano, 日本語.
À propos de la sélection automatique de la langue.