[ << Contexts and engravers ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Top ] | [ > ] |
Tweaks and overrides
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < Tweaks and overrides ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Ajout d’une indication d’octave pour une seule voix
Lorsque plusieurs voix cohabitent sur une même portée, déterminer
l’octaviation d’une voix affecte la position des notes de toutes les
voix, jusqu’à la fin du crochet d’octaviation. Si l’octaviation ne doit
s’appliquer qu’à une seule voix, le Ottava_spanner_engraver
devrait être déplacé dans le contexte Voice
.
\layout { \context { \Staff \remove Ottava_spanner_engraver } \context { \Voice \consists Ottava_spanner_engraver } } { \clef bass << { <g d'>1~ q2 <c' e'> } \\ { r2. \ottava -1 <b,,, b,,>4 ~ | q2 \ottava 0 <c e>2 } >> }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Ajout de liens à des objets
La fonction add-link
, telle que définie ci-dessous, permet
d’ajouter un lien au stencil d’un objet graphique. Elle s’emploie
au sein d’un \override
ou d’un \tweak
.
À noter que le fonctionnemment du point-and-click
est perturbé
sur les objets ainsi liés.
Cette fonction n’est opérationnelle que pour une sortie PDF.
La coloration des objets liés s’obtient par une commande séparée.
#(define (add-link url-strg) (lambda (grob) (let* ((stil (ly:grob-property grob 'stencil))) (if (ly:stencil? stil) (let* ((x-ext (ly:stencil-extent stil X)) (y-ext (ly:stencil-extent stil Y)) (url-expr `(url-link ,url-strg ,x-ext ,y-ext)) (new-stil (ly:stencil-add (ly:make-stencil url-expr x-ext y-ext) stil))) (ly:grob-set-property! grob 'stencil new-stil)))))) %%%% test %% For easier maintenance of this snippet the URL is formatted to use the %% actually used LilyPond version. %% Of course a literal URL would work as well. #(define major.minor-version (string-join (take (string-split (lilypond-version) #\.) 2) ".")) urlI = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/writing-pitches" major.minor-version) urlII = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/rhythms" major.minor-version) urlIII = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/note-heads" major.minor-version) urlIV = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/beams" major.minor-version) urlV = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/note-head-styles" major.minor-version) urlVI = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/writing-pitches" major.minor-version) \relative c' { \key cis \minor \once \override Staff.Clef.color = #green \once \override Staff.Clef.after-line-breaking = #(add-link urlI) \once \override Staff.TimeSignature.color = #green \once \override Staff.TimeSignature.after-line-breaking = #(add-link urlII) \once \override NoteHead.color = #green \once \override NoteHead.after-line-breaking = #(add-link urlIII) cis'1 \once \override Beam.color = #green \once \override Beam.after-line-breaking = #(add-link urlIV) cis8 dis e fis gis2 <gis, \tweak Accidental.color #green \tweak Accidental.after-line-breaking #(add-link urlVI) \tweak color #green \tweak after-line-breaking #(add-link urlV) \tweak style #'harmonic bis dis fis >1 <cis, cis' e> }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Ajout de markups à une tablature
Par défaut, les markups n’apparaissent pas dans une tablature.
Il suffit, pour les voir apparaître, d’une simple commande
\revert TabStaff.TextScript.stencil
.
%% http://lsr.di.unimi.it/LSR/Item?id=919 % by P.P.Schneider on June 2014 high = { r4 r8 <g c'> q r8 r4 } low = { c4 r4 c8 r8 g,8 b, } pulse = { s8^"1" s^"&" s^"2" s^"&" s^"3" s^"&" s^"4" s^"&" } \score { \new TabStaff { \repeat unfold 2 << \high \\ \low \\ \pulse >> } \layout { \context { \TabStaff \clef moderntab \revert TextScript.stencil \override TextScript.font-series = #'bold \override TextScript.font-size = #-2 \override TextScript.color = #red } \context { \Score proportionalNotationDuration = #(ly:make-moment 1/8) } } }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Ajout de marques temporelles à un long glissando
Lorsqu’un glissando s’étend dans la durée, on trouve parfois des indications temporelles, matérialisées par des hampes sans tête de note. De telles hampes permettent aussi d’indiquer des éléments intermédiaires.
L’alignement des hampes avec la ligne de glissando peut requérir quelques aménagements.
glissandoSkipOn = { \override NoteColumn.glissando-skip = ##t \hide NoteHead \override NoteHead.no-ledgers = ##t } glissandoSkipOff = { \revert NoteColumn.glissando-skip \undo \hide NoteHead \revert NoteHead.no-ledgers } \relative c'' { r8 f8\glissando \glissandoSkipOn f4 g a a8\noBeam \glissandoSkipOff a8 r8 f8\glissando \glissandoSkipOn g4 a8 \glissandoSkipOff a8 | r4 f\glissando \< \glissandoSkipOn a4\f \> \glissandoSkipOff b8\! r | }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Ajustement de l’espacement des notes d’ornement
La propriété spacing-increment
de Score.GraceSpacing
permet d’ajuster l’espacement d’un groupe de notes d’ornement.
graceNotes = { \grace { c4 c8 c16 c32 } c8 } \relative c'' { c8 \graceNotes \override Score.GraceSpacing.spacing-increment = #2.0 \graceNotes \revert Score.GraceSpacing.spacing-increment \graceNotes }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Ajustement de l’espacement vertical des paroles
Cet extrait illustre la manière de réduire l’espace entre la ligne de paroles et la portée.
% Default layout: << \new Staff \new Voice = melody \relative c' { c4 d e f g4 f e d c1 } \new Lyrics \lyricsto melody { aa aa aa aa aa aa aa aa aa } \new Staff { \new Voice = melody \relative c' { c4 d e f g4 f e d c1 } } % Reducing the minimum space below the staff and above the lyrics: \new Lyrics \with { \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #'((basic-distance . 1)) } \lyricsto melody { aa aa aa aa aa aa aa aa aa } >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Modification de la hauteur de hampes ligaturées
La hauteur de hampe des notes ligaturées est gérée par la sous-propriété
beamed-lengths
des details
de l’objet Stem
.
Lorsqu’elle ne comporte qu’une seule valeur, cette hauteur s’appliquera
à toutes les hampes. En présence de plusieurs arguments, le premier
affectera les croches, le second les doubles croches, et ainsi de suite.
Le dernier argument s’appliquera aussi aux notes de plus courte durée.
Les arguments peuvent être des valeurs décimales.
\relative c'' { \override Stem.details.beamed-lengths = #'(2) a8[ a] a16[ a] a32[ a] \override Stem.details.beamed-lengths = #'(8 10 12) a8[ a] a16[ a] a32[ a] r8 \override Stem.details.beamed-lengths = #'(8) a8[ a] \override Stem.details.beamed-lengths = #'(8.5) a8[ a] \revert Stem.details.beamed-lengths a8[ a] a16[ a] a32[ a] r16 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Numérotation des mesures et alternatives
Deux méthodes alternatives vous permettent de gérer la numérotation des mesures en cas de reprises.
\relative c'{ \set Score.alternativeNumberingStyle = #'numbers \repeat volta 3 { c4 d e f | } \alternative { { c4 d e f | c2 d \break } { f4 g a b | f4 g a b | f2 a | \break } { c4 d e f | c2 d } } c1 \break \set Score.alternativeNumberingStyle = #'numbers-with-letters \repeat volta 3 { c,4 d e f | } \alternative { { c4 d e f | c2 d \break } { f4 g a b | f4 g a b | f2 a | \break } { c4 d e f | c2 d } } c1 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Crochets d’analyse au-dessus de la portée
Les crochets d’analyse viennent par défaut se positionner au-dessous de la portée. L’exemple suivant vous indique comment les faire apparaître en surplomb de la portée.
\layout { \context { \Voice \consists "Horizontal_bracket_engraver" } } \relative c'' { \once \override HorizontalBracket.direction = #UP c2\startGroup d2\stopGroup }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Crochet d’analyse avec texte
Un markup textuel peut venir s’ajouter aux crochets d’analyse
grâce à la propriété text
de l’objet graphique
HorizontalBracketText
. Plusieurs crochets présents en un même
moment requièrent d’utiliser la commande \tweak
.
Le texte ajouté sera répété, entre parenthèse, après un saut de ligne.
\paper { tagline = ##f } \layout { \context { \Voice \consists "Horizontal_bracket_engraver" \override HorizontalBracket.direction = #UP } } { \once\override HorizontalBracketText.text = "a" c''\startGroup d''\stopGroup \once\override HorizontalBracketText.text = "a'" e''\startGroup d''\stopGroup | c''-\tweak HorizontalBracketText.text \markup \bold \huge "b" \startGroup -\tweak HorizontalBracketText.text "a" \startGroup d''\stopGroup e''-\tweak HorizontalBracketText.text "a'" \startGroup d''\stopGroup\stopGroup | c''-\tweak HorizontalBracketText.text foo \startGroup d'' e'' f'' | \break g'' a'' b'' c'''\stopGroup }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Liaison asymétrique
Une liaison peut adopter une courbe asymétrique afin de s’adapter au mieux à la ligne mélodique.
slurNotes = { d,8( a' d f a f' d, a) } \relative c' { \stemDown \slurUp \slurNotes \once \override Slur.eccentricity = #3.0 \slurNotes }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Césure en forme de « voie de chemin de fer » avec point d’orgue
Une césure peut parfois s’indiquer par une double respiration surmontée d’un point d’orgue. Le code ci-dessous permet d’obtenir la combinaison répondant à cette esthétique.
\relative c'' { c2. % construct the symbol \override BreathingSign.text = \markup { \override #'(direction . 1) \override #'(baseline-skip . 1.8) \dir-column { \translate #'(0.155 . 0) \center-align \musicglyph "scripts.caesura.curved" \center-align \musicglyph "scripts.ufermata" } } \breathe c4 % set the breathe mark back to normal \revert BreathingSign.text c2. \breathe c4 \bar "|." }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Modification de la taille d’une note particulière d’un accord
La commande \tweak
permet de modifier la propriété
font-size
d’une note particulière d’un accord.
Il s’agit de placer, à l’intérieur même de l’accord (dans la
construction < >
) et avant la note considérée, l’instruction
\tweak
suivie de font-size
et de définir la taille voulue
– comme #-2
pour une petite tête.
\relative c' { <\tweak font-size #+2 c e g c \tweak font-size #-2 e>1 ^\markup { A tiny e }_\markup { A big c } }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Modification de l’épaisseur et de l’écartement des ligatures
L’épaisseur des ligatures se gère au niveau de la propriété
Beam.beam-thickness
. L’ajustement de l’espace entre les ligatures
est géré par la propriété Beam.length-fraction
.
\relative f' { \time 1/8 \override Beam.beam-thickness = #0.4 \override Beam.length-fraction = #0.8 c32 c c c \revert Beam.beam-thickness % 0.48 is default thickness \revert Beam.length-fraction % 1.0 is default spacing c32 c c c \override Beam.beam-thickness = #0.6 \override Beam.length-fraction = #1.3 c32 c c c }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Modifier l’apparence d’un silence multimesure
Dans le cas où ce silence dure moins de dix mesures, LilyPond imprime sur
la portée des « silences d’église » – Kirchenpause en
allemand – et qui sont une simple suite de rectangles. La propriété
expand-limit
permet d’obtenir un silence unique :
\relative c'' { \compressMMRests { R1*2 | R1*5 | R1*9 \override MultiMeasureRest.expand-limit = #3 R1*2 | R1*5 | R1*9 } }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Modification des propriétés d’objets particuliers
La commande \applyOutput
permet de personnaliser n’importe quel
objet de rendu. Elle requiert une fonction Scheme à trois arguments.
#(define (mc-squared grob grob-origin context) (let ((sp (ly:grob-property grob 'staff-position))) (ly:grob-set-property! grob 'stencil (grob-interpret-markup grob #{ \markup \lower #0.5 #(case sp ((-5) "m") ((-3) "c ") ((-2) #{ \markup \teeny \bold 2 #}) (else "bla")) #})))) \relative c' { <d f g b>2 \applyOutput Voice.NoteHead #mc-squared <d f g b>2 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Modification du texte et de l’extension de nuances textuelles
Le texte par défaut des crescendos et decrescendos se change en
modifiant les propriétés de contexte crescendoText
et
decrescendoText
.
L’aspect de la ligne d’extension est fonction de la propriété
'style
du DynamicTextSpanner
. Sa valeur par défaut est
'dashed-line
, mais d’autres valeurs sont disponibles, comme
'line
, 'dotted-line
et 'none
.
\relative c'' { \set crescendoText = \markup { \italic { cresc. poco } } \set crescendoSpanner = #'text \override DynamicTextSpanner.style = #'dotted-line a2\< a a2 a a2 a a2 a\mf }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Changement des fontes textuelles par défaut
Les familles de fontes par défaut pour le texte peuvent être changées à
l’aide de la fonction make-pango-font-tree
.
%{ You may have to install additional fonts. Red Hat Fedora dejavu-fonts-all Debian GNU/Linux, Ubuntu fonts-dejavu-core fonts-dejavu-extra %} \paper { % change for other default global staff size. myStaffSize = #20 %{ run lilypond -dshow-available-fonts to show all fonts available in the process log. %} #(define fonts (make-pango-font-tree "DejaVu Serif" "DejaVu Sans" "DejaVu Sans Mono" (/ myStaffSize 20))) } { g'''4^\markup { DejaVu Serif: \bold bold \italic italic \italic \bold { bold italic } } g4_\markup { \override #'(font-family . sans) { DejaVu Sans: \bold bold \italic italic \italic \bold { bold italic } } } g''2^\markup { \override #'(font-family . typewriter) { DejaVu Sans Mono: \bold bold \italic italic \italic \bold { bold italic } } } }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Modification de la taille d’une portée
Bien que le meilleur moyen de définir la taille des portées consiste à
utiliser #(set-global-staff-size xx)
, une portée en particulier
peut se redimensionner en affectant d’un coefficient ses propriétés
staff-space
et fontSize
.
<< \new Staff { \relative c'' { \dynamicDown c8\ff c c c c c c c } } \new Staff \with { fontSize = #-3 \override StaffSymbol.staff-space = #(magstep -3) } { \clef bass c8 c c c c\f c c c } >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Changement de tempo sans indication sur la partition
Vous pouvez indiquer un changement de tempo pour le fichier MIDI sans pour autant l’imprimer. Il suffit alors de le rendre invisible aux musiciens.
\score { \new Staff \relative c' { \tempo 4 = 160 c4 e g b c4 b d c \set Score.tempoHideNote = ##t \tempo 4 = 96 d,4 fis a cis d4 cis e d } \layout { } \midi { } }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Modification du texte des indications de pédale
Staff.pedalSustainStrings
permet de définir le texte affiché pour
les instructions de pédale. Les seuls caractères autorisés sont les
glyphes particuliers de pédale, comme vous pouvez le constater ici.
sustainNotes = { c4\sustainOn d e\sustainOff\sustainOn f\sustainOff } \relative c' { \sustainNotes \set Staff.pedalSustainStrings = #'("P" "P-" "-") \sustainNotes \set Staff.pedalSustainStrings = #'("d" "de" "e") \sustainNotes \set Staff.pedalSustainStrings = #'("M" "M-" "-") \sustainNotes \set Staff.pedalSustainStrings = #'("Ped" "*Ped" "*") \sustainNotes }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Contrôle de la visibilité des extensions d’objet après saut de ligne
La visibilité des extensions qui se terminent sur la première note après
un saut de ligne est contrôlée par un appel de after-line-breaking
à la fonction ly:spanner::kill-zero-spanned-time
.
Pour des objets tels qu’un glissando ou un soufflet, le comportement par défaut est de ne pas être reportés après un saut de ligne. L’extension sera donc reprise dès lors que l’appel aura été désactivé.
Il en va inversement pour les extensions qui, par défaut pour les textes notamment, sont reportées après un saut de ligne ; il faudra alors activer l’appel pour empêcher leur report.
\paper { ragged-right = ##t } \relative c'' { \override Hairpin.to-barline = ##f \override Glissando.breakable = ##t % show hairpin \override Hairpin.after-line-breaking = ##t % hide text span \override TextSpanner.after-line-breaking = #ly:spanner::kill-zero-spanned-time e2\<\startTextSpan % show glissando \override Glissando.after-line-breaking = ##t f2\glissando \break f,1\!\stopTextSpan }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Contrôle de l’ordre vertical des articulations et ornements
Les symboles s’ordonnent verticalement suivant la propriété
script-priority
. Plus sa valeur numérique est faible, plus le
symbole sera proche de la note. Dans l’exemple suivant, l’objet
TextScript
– le dièse – a d’abord la propriété la plus basse et
se voit donc placé au plus près de la note ; ensuite, c’est l’objet
Script
– le mordant – qui a la propriété la plus basse, et se
place alors sous le dièse. Lorsque deux objets ont la même priorité,
c’est l’ordre dans lequel ils sont indiqués qui détermine lequel sera
placé en premier.
\relative c''' { \once \override TextScript.script-priority = #-100 a2^\prall^\markup { \sharp } \once \override Script.script-priority = #-100 a2^\prall^\markup { \sharp } }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Contrôle de l’impression des crochets de n-olet
Selon la tradition, les crochets indicateurs de n-olet sont toujours imprimés, sauf dans le cas où ils seraient de la même longueur qu’une ligature.
LilyPond permet, au travers de la propriété bracket-visibility
,
de contôler précisément leur affichage : déterminée à #t
, ils
seront toujours imprimés ; #f
permet de ne jamais les imprimer –
donc omettre l’objet TupletBracket
–, et #'if-no-beam
les
imprimera en l’absence de ligature (comportement par défaut).
music = \relative c'' { \tuplet 3/2 { c16[ d e } f8] \tuplet 3/2 { c8 d e } \tuplet 3/2 { c4 d e } } \new Voice { \relative c' { \override Score.TextMark.non-musical = ##f \textMark "default" \music \override TupletBracket.bracket-visibility = #'if-no-beam \textMark \markup \typewriter "'if-no-beam" \music \override TupletBracket.bracket-visibility = ##t \textMark \markup \typewriter "#t" \music \override TupletBracket.bracket-visibility = ##f \textMark \markup \typewriter "#f" \music \omit TupletBracket \textMark \markup \typewriter "omit" \music } }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Création d’un groupetto retardé
Obtenir un groupetto retardé et dans lequel la note la plus basse
est altérée requiert quelques surcharges. La propriété
outside-staff-priority
doit être désactivée (#f
) pour
éviter qu’elle prenne le pas sur la propriété avoid-slur
.
L’ajustement du positionnement horizontal s’effectue en jouant sur la
fraction 2/3
.
\relative c'' { \after 2*2/3 \turn c2( d4) r | \after 4 \turn c4.( d8) \after 4 { \once \set suggestAccidentals = ##t \once \override AccidentalSuggestion.outside-staff-priority = ##f \once \override AccidentalSuggestion.avoid-slur = #'inside \once \override AccidentalSuggestion.font-size = -3 \once \override AccidentalSuggestion.script-priority = -1 \once \hideNotes cis8\turn \noBeam } d4.( e8) }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Création d’armures personnalisées
LilyPond accepte les armures personnalisées. Dans cet exemple, il s’agit d’une tonalité de ré mineur à laquelle on rajoute des bémols.
\new Staff \with { \override StaffSymbol.line-count = #8 \override KeySignature.flat-positions = #'((-7 . 6)) \override KeyCancellation.flat-positions = #'((-7 . 6)) % presumably sharps are also printed in both octaves \override KeySignature.sharp-positions = #'((-6 . 7)) \override KeyCancellation.sharp-positions = #'((-6 . 7)) \override Clef.stencil = # (lambda (grob)(grob-interpret-markup grob #{ \markup\combine \musicglyph "clefs.C" \translate #'(-3 . -2) \musicglyph "clefs.F" #})) clefPosition = #3 middleCPosition = #3 middleCClefPosition = #3 } { \key d\minor f bes, f bes, }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Création de doigtés sur deux caractères
Il est tout à fait possible de noter un doigté supérieur à 5.
\relative c' { c1-10 c1-50 c1-36 c1-29 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Création d’extensions de texte
Les commandes \startTextSpan
et \stopTextSpan
permettent
d’ajouter une ligne de prolongation aux indications textuelles, à
l’instar des indications de pédale ou d’octaviation. Jouer sur les
propriétés de l’objet TextSpanner
permet d’en modifier le rendu.
\paper { ragged-right = ##f } \relative c'' { \override TextSpanner.bound-details.left.text = #"bla" \override TextSpanner.bound-details.right.text = #"blu" a4 \startTextSpan b4 c a4 \stopTextSpan \override TextSpanner.style = #'line \once \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER a4 \startTextSpan b4 c a4 \stopTextSpan \override TextSpanner.style = #'dashed-line \override TextSpanner.bound-details.left.text = \markup { \draw-line #'(0 . 1) } \override TextSpanner.bound-details.right.text = \markup { \draw-line #'(0 . -2) } \once \override TextSpanner.bound-details.right.padding = #-2 a4 \startTextSpan b4 c a4 \stopTextSpan \set Staff.middleCPosition = #-13 \override TextSpanner.dash-period = #10 \override TextSpanner.dash-fraction = #0.5 \override TextSpanner.thickness = #10 a4 \startTextSpan b4 c a4 \stopTextSpan }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Accord distribué et problème de hampe – solution
Il est parfois préférable d’utiliser les hampes de la portée supérieure
pour créer des accords distribués, afin d’éviter tout risque de
collision au niveau des ligatures automatiques. Dans l’exemple suivant,
le fait de partir des hampes de la portée inférieure aurait rendu
nécessaire l’adaptation du détecteur de collision des ligatures, par une
clause \override Staff.Beam.collision-voice-only = ##t
, afin
qu’il ne tienne pas compte des collisions entre portées.
\new PianoStaff << \new Staff = up \relative c' { << { r4 \override Stem.cross-staff = ##t \override Stem.length = #19 % this is in half-spaces, % so it makes stems 9.5 staffspaces long \override Stem.Y-offset = #-6 % stems are normally lengthened % upwards, so here we must lower the stem by the amount % equal to the lengthening - in this case (19 - 7) / 2 % (7 is default stem length) e e e } { s4 \change Staff = "bottom" \override NoteColumn.ignore-collision = ##t c, c c } >> } \new Staff = bottom \relative c' { \clef bass \voiceOne g8 a g a g a g a } >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Hampes interportées
L’exemple ci-dessous illustre l’utilisation du Span_stem_engraver
et de la commande \crossStaff
afin de connecter des hampes entre
les portées.
Nul n’est besoin de spécifier la taille des hampes ; le graveur calcule automatiquement la distance relative des têtes de note avec les portées.
\layout { \context { \PianoStaff \consists "Span_stem_engraver" } } { \new PianoStaff << \new Staff { <b d'>4 r d'16\> e'8. g8 r\! e'8 f' g'4 e'2 } \new Staff { \clef bass \voiceOne \autoBeamOff \crossStaff { <e g>4 e, g16 a8. c8} d \autoBeamOn g8 f g4 c2 } >> }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Guidons
Les guidons peuvent adopter différents styles.
\layout { ragged-right = ##t } \new Staff \with { \consists "Custos_engraver" } \relative c' { \override Staff.Custos.neutral-position = #4 \override Staff.Custos.style = #'hufnagel c1^"hufnagel" \break <d a' f'>1 \override Staff.Custos.style = #'medicaea c1^"medicaea" \break <d a' f'>1 \override Staff.Custos.style = #'vaticana c1^"vaticana" \break <d a' f'>1 \override Staff.Custos.style = #'mensural c1^"mensural" \break <d a' f'>1 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Personnalisation de diagrammes de fret
Les propriétés d’un diagramme de fret sont définies par les
fret-diagram-details
. En matière de diagramme de fret, les
adaptations s’appliquent à l’objet FretBoards.FretBoard
. Un
FretBoards
est comparable à un Voice
: il s’agit d’un
contexte du plus bas niveau, et il n’est donc pas primordial de
l’instancier de manière explicite pour adapter ses propriétés.
\include "predefined-guitar-fretboards.ly" \storePredefinedDiagram #default-fret-table \chordmode { c' } #guitar-tuning #"x;1-1-(;3-2;3-3;3-4;1-1-);" % shorthand oo = #(define-music-function (grob-path value) (list? scheme?) #{ \once \override $grob-path = #value #}) << \new ChordNames { \chordmode { c1 | c | c | d } } \new FretBoards { % Set global properties of fret diagram \override FretBoards.FretBoard.size = #'1.2 \override FretBoard.fret-diagram-details.finger-code = #'in-dot \override FretBoard.fret-diagram-details.dot-color = #'white \chordmode { c \oo FretBoard.size #'1.0 \oo FretBoard.fret-diagram-details.barre-type #'straight \oo FretBoard.fret-diagram-details.dot-color #'black \oo FretBoard.fret-diagram-details.finger-code #'below-string c' \oo FretBoard.fret-diagram-details.barre-type #'none \oo FretBoard.fret-diagram-details.number-type #'arabic \oo FretBoard.fret-diagram-details.orientation #'landscape \oo FretBoard.fret-diagram-details.mute-string #"M" \oo FretBoard.fret-diagram-details.label-dir #LEFT \oo FretBoard.fret-diagram-details.dot-color #'black c' \oo FretBoard.fret-diagram-details.finger-code #'below-string \oo FretBoard.fret-diagram-details.dot-radius #0.35 \oo FretBoard.fret-diagram-details.dot-position #0.5 \oo FretBoard.fret-diagram-details.fret-count #3 d } } \new Voice { c'1 | c' | c' | d' } >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Personnalisation des diagrammes de fret
Les propriétés d’un diagramme de fret sont modifiables grâce au
fret-diagram-details
. Lorsqu’ils sont générés sous forme
de \markup
, rien n’empêche de modifier les diagrammes en jouant
sur les réglages de l’objet Voice.TextScript
ou bien directement
sur le markup.
<< \chords { c1 | c | c | d } \new Voice = "mel" { \textLengthOn % Set global properties of fret diagram \override TextScript.size = #'1.2 \override TextScript.fret-diagram-details.finger-code = #'in-dot \override TextScript.fret-diagram-details.dot-color = #'white %% C major for guitar, no barre, using defaults % terse style c'1^\markup { \fret-diagram-terse "x;3-3;2-2;o;1-1;o;" } %% C major for guitar, barred on third fret % verbose style % size 1.0 % roman fret label, finger labels below string, straight barre c'1^\markup { % standard size \override #'(size . 1.0) { \override #'(fret-diagram-details . ( (number-type . roman-lower) (finger-code . in-dot) (barre-type . straight))) { \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 5 1 3)) } } } %% C major for guitar, barred on third fret % verbose style % landscape orientation, arabic numbers, M for mute string % no barre, fret label down or left, small mute label font c'1^\markup { \override #'(fret-diagram-details . ( (finger-code . below-string) (number-type . arabic) (label-dir . -1) (mute-string . "M") (orientation . landscape) (barre-type . none) (xo-font-magnification . 0.4) (xo-padding . 0.3))) { \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 5 1 3)) } } %% simple D chord % terse style % larger dots, centered dots, fewer frets % label below string d'1^\markup { \override #'(fret-diagram-details . ( (finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (fret-count . 3))) { \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" } } } >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Indicateur de regroupement et portée unique
Lorsque, dans des regroupements de type ChoirStaff
ou
StaffGroup
, une seule portée est active, aucune indication n’est
donnée en début de ligne. Affecter à la propriété collapse-height
un nombre de lignes inférieur à celui de la portée permet de modifier ce
comportement par défaut.
Notez bien que dans le cas des PianoStaff
et GrandStaff
,
pour lesquels le délimiteur de système est une accolade et non un
crochet, il ne s’agit pas de la même propriété – voir le deuxième
système de l’exemple.
\score { \new StaffGroup << % Must be lower than the actual number of staff lines \override StaffGroup.SystemStartBracket.collapse-height = #4 \override Score.SystemStartBar.collapse-height = #4 \new Staff { c'1 } >> } \score { \new PianoStaff << \override PianoStaff.SystemStartBrace.collapse-height = #4 \override Score.SystemStartBar.collapse-height = #4 \new Staff { c'1 } >> }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Affichage de la généalogie d’un objet
Lorsque l’on manipule des rappels d’objet (grob callbacks), il peut être intéressant d’en maîtriser les ascendants. La plupart des objets graphiques ont des parents, lesquels auront une influence sur le positionnement de l’objet en question. Ainsi, les parents des côtés X et Y influenceront respectivement les positions horizontale et verticale de l’objet. De plus, chacun des parents peut avoir ses propres parents.
Certains aspects de la lignée d’un objet peuvent toutefois porter à confusion :
- Les types de parents d’un grob peuvent dépendre du contexte.
- Dans le cas de certains grobs, les parents X et Y peuvent être le même.
- Un « ascendant » particulier peut dépendre d’un grob de différentes manières.
- Le concept de « générations » est trompeur.
Par exemple, l’objet System
peut, vis à vis d’un objet
VerticalAlignment
, être à la fois parent (par son côté Y) et
grand parent (par deux fois du côté X).
La macro ci-dessous affiche à l’écran une représentation textuelle de l’ascendance d’un grob.
Elle se lance ainsi :
{ \once \override NoteHead.before-line-breaking = #display-ancestry c }
et génère la sortie suivante :
NoteHead X,Y: NoteColumn X: PaperColumn X,Y: System Y: VerticalAxisGroup X: NonMusicalPaperColumn X,Y: System Y: VerticalAlignment X: NonMusicalPaperColumn X,Y: System Y: System
%% http://lsr.di.unimi.it/LSR/Item?id=622 %% see also http://www.lilypond.org/doc/v2.18/Documentation/snippets/tweaks-and-overrides#tweaks-and-overrides-displaying-grob-ancestry %% Remark: %% grob::name is in the source since 2.19.x could be deleted during next LSR-upgrade #(define (grob::name grob) (assq-ref (ly:grob-property grob 'meta) 'name)) #(define (get-ancestry grob) (if (not (null? (ly:grob-parent grob X))) (list (grob::name grob) (get-ancestry (ly:grob-parent grob X)) (get-ancestry (ly:grob-parent grob Y))) (grob::name grob))) #(define (format-ancestry lst padding) (string-append (symbol->string (car lst)) "\n" (let ((X-ancestry (if (list? (cadr lst)) (format-ancestry (cadr lst) (+ padding 3)) (symbol->string (cadr lst)))) (Y-ancestry (if (list? (caddr lst)) (format-ancestry (caddr lst) (+ padding 3)) (symbol->string (caddr lst))))) (if (equal? X-ancestry Y-ancestry) (string-append (format #f "~&") (make-string padding #\space) "X,Y: " (if (list? (cadr lst)) (format-ancestry (cadr lst) (+ padding 5)) (symbol->string (cadr lst)))) (string-append (format #f "~&") (make-string padding #\space) "X: " X-ancestry "\n" (make-string padding #\space) "Y: " Y-ancestry (format #f "~&")))) (format #f "~&"))) #(define (display-ancestry grob) (format (current-error-port) "~3&~a~2%~a~&" (make-string 36 #\-) (if (ly:grob? grob) (format-ancestry (get-ancestry grob) 0) (format #f "~a is not a grob" grob)))) \relative c' { \once \override NoteHead.before-line-breaking = #display-ancestry f4 \once \override Accidental.before-line-breaking = #display-ancestry \once \override Arpeggio.before-line-breaking = #display-ancestry <f as c>4\arpeggio }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Harmoniques pointées
Les notes harmoniques artificielles, obtenues grâce à \harmonic
,
ne sont pas pointées. Ce comportement peut être modifié en activant la
propriété de contexte harmonicDots
.
\relative c''' { \time 3/4 \key f \major \set harmonicDots = ##t <bes f'\harmonic>2. ~ <bes f'\harmonic>4. <a e'\harmonic>8( <gis dis'\harmonic> <g d'\harmonic>) <fis cis'\harmonic>2. <bes f'\harmonic>2. }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Encadrement d’objets
La fonction print
peut se modifier pour obtenir l’encadrement de
n’importe quel objet.
\relative c'' { \override TextScript.stencil = #(make-stencil-boxer 0.1 0.3 ly:text-interface::print) c'4^"foo" \override Stem.stencil = #(make-stencil-boxer 0.05 0.25 ly:stem::print) \override Score.RehearsalMark.stencil = #(make-stencil-boxer 0.15 0.3 ly:text-interface::print) b8 \revert Stem.stencil \revert Flag.stencil c4. c4 \mark \default c1 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Encercler divers objets
La commande de markup \circle
permet de dessiner un
cercle autour de différents objets comme des indications de doigté.
D’autres objets nécessitent de faire appel à des techniques spécifiques.
Cet exemple illustre deux manières de procéder : pour les repères, et
pour les numéros de mesure.
\relative c' { c1 \set Score.rehearsalMarkFormatter = #(lambda (mark context) (make-circle-markup (format-mark-numbers mark context))) \mark \default c2 d^\markup { \override #'(thickness . 3) { \circle \finger 2 } } \override Score.BarNumber.break-visibility = #all-visible \override Score.BarNumber.stencil = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Personnalisation des extenseurs de nuance postfix
Il s’agit de fonctions postfix pour personnaliser l’extension des
crescendos textuels. L’extension devrait débuter sur la première note
de la mesure. Il faut utiliser -\mycresc
– comme une
articulation – sous peine que le départ de l’extension n’apparaisse
qu’à la note suivante.
% Two functions for (de)crescendo spanners where you can explicitly % give the spanner text. mycresc = #(define-music-function (mymarkup) (markup?) (make-music 'CrescendoEvent 'span-direction START 'span-type 'text 'span-text mymarkup)) mydecresc = #(define-music-function (mymarkup) (markup?) (make-music 'DecrescendoEvent 'span-direction START 'span-type 'text 'span-text mymarkup)) \relative c' { c4-\mycresc "custom cresc" c4 c4 c4 | c4 c4 c4 c4 | c4-\mydecresc "custom decresc" c4 c4 c4 | c4 c4\! c4 c4 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Extensions de nuance postfix
Les lignes d’extension des commandes \cresc
, \dim
et
\decresc
peuvent désormais être personnalisées facilement sous
forme d’opérateurs postfix. Soufflets et (de)crescendos peuvent
cohabiter. \<
et \>
produiront par défaut des soufflets,
alors que \cresc
, etc. produiront une indication textuelle avec
extension.
% Some sample text dynamic spanners, to be used as postfix operators crpoco = #(make-music 'CrescendoEvent 'span-direction START 'span-type 'text 'span-text "cresc. poco a poco") \relative c' { c4\cresc d4 e4 f4 | g4 a4\! b4\crpoco c4 | c4 d4 e4 f4 | g4 a4\! b4\< c4 | g4\dim a4 b4\decresc c4\! }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Allongement d’une marque de trille (TrillSpanner
)
La propriété minimum-length
d’une extension de trille – objet
TrillSpanner
– n’est effective qu’après un appel explicite à la
procédure set-spacing-rods
.
Pour ce faire, la propriété set-spacing-rods
doit être définie à
ly:spanner::set-spacing-rods
.
\relative c' { \key c\minor \time 2/4 c16( as') c,-. des-. \once\override TrillSpanner.minimum-length = #15 \once\override TrillSpanner.springs-and-rods = #ly:spanner::set-spacing-rods \afterGrace es4 \startTrillSpan { d16[( \stopTrillSpan es)] } c( c' g es c g' es d \hideNotes c8) }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Rappel du glissando à l’occasion d’une alternative
Un glissando qui se prolonge sur plusieurs sections \alternative
peut se rappeler à l’aide d’une note d’ornement supplémentaire et
masquée, à laquelle sera attaché le départ du glissando, ce dans chaque
bloc \alternative
. Cette note d’ornement devrait avoir la même
hauteur que la note où commençait le glissando originel. Ceci est géré
par une fonction musicale qui prendra en argument la hauteur de la note
d’ornement.
Dans le cadre d’une musique polyphonique, il ne faudra pas oublier d’ajouter une note d’ornement dans toutes les autres voix afin de préserver la synchronisation.
repeatGliss = #(define-music-function (grace) (ly:pitch?) #{ % the next two lines ensure the glissando is long enough % to be visible \once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods \once \override Glissando.minimum-length = #3.5 \once \hideNotes \grace $grace \glissando #}) \score { \relative c'' { \repeat volta 3 { c4 d e f\glissando } \alternative { { g2 d } { \repeatGliss f g2 e } { \repeatGliss f e2 d } } } } music = \relative c' { \voiceOne \repeat volta 2 { g a b c\glissando } \alternative { { d1 } { \repeatGliss c \once \omit StringNumber e1\2 } } } \score { \new StaffGroup << \new Staff << \new Voice { \clef "G_8" \music } >> \new TabStaff << \new TabVoice { \clef "moderntab" \music } >> >> }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Affinage des indications de pédale
Les crochets d’indication de pédale peuvent se modifier de différentes manières.
\paper { ragged-right = ##f } \relative c'' { c2\sostenutoOn c c2\sostenutoOff c \once \override Staff.PianoPedalBracket.shorten-pair = #'(-7 . -2) c2\sostenutoOn c c2\sostenutoOff c \once \override Staff.PianoPedalBracket.edge-height = #'(0 . 3) c2\sostenutoOn c c2\sostenutoOff c }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Liaison de prolongation aplatie
La fonction ici présentée prend en argument le Tie.stencil
par
défaut et en recalcule le résultat d’après les étendues de cette valeur
par défaut.
Des ajustements plus poussés sont possibles, en apportant des
dérogations à Tie.details.height-limit
ou à l’aide de la fonction
\shape
. La définition personnalisée peut aussi se modifier à la
volée.
%% http://lsr.di.unimi.it/LSR/Item?id=1031 #(define ((flared-tie coords) grob) (define (pair-to-list pair) (list (car pair) (cdr pair))) (define (normalize-coords goods x y dir) (map (lambda (coord) ;(coord-scale coord (cons x (* y dir))) (cons (* x (car coord)) (* y dir (cdr coord)))) goods)) (define (my-c-p-s points thick) (make-connected-path-stencil points thick 1.0 1.0 #f #f)) ;; outer let to trigger suicide (let ((sten (ly:tie::print grob))) (if (grob::is-live? grob) (let* ((layout (ly:grob-layout grob)) (line-thickness (ly:output-def-lookup layout 'line-thickness)) (thickness (ly:grob-property grob 'thickness 0.1)) (used-thick (* line-thickness thickness)) (dir (ly:grob-property grob 'direction)) (xex (ly:stencil-extent sten X)) (yex (ly:stencil-extent sten Y)) (lenx (interval-length xex)) (leny (interval-length yex)) (xtrans (car xex)) (ytrans (if (> dir 0)(car yex) (cdr yex))) (uplist (map pair-to-list (normalize-coords coords lenx (* leny 2) dir)))) (ly:stencil-translate (my-c-p-s uplist used-thick) (cons xtrans ytrans))) '()))) #(define flare-tie (flared-tie '((0 . 0)(0.1 . 0.2) (0.9 . 0.2) (1.0 . 0.0)))) \layout { \context { \Voice \override Tie.stencil = #flare-tie } } \paper { ragged-right = ##f } \relative c' { a4~a \override Tie.height-limit = 4 a'4~a a'4~a <a,, c e a c e a c e>~ q \break a'4~a \once \override Tie.details.height-limit = 14 a4~a \break a4~a \once \override Tie.details.height-limit = 0.5 a4~a \break a4~a \shape #'((0 . 0) (0 . 0.4) (0 . 0.4) (0 . 0)) Tie a4~a \break a4~a \once \override Tie.stencil = #(flared-tie '((0 . 0)(0.1 . 0.4) (0.9 . 0.4) (1.0 . 0.0))) a4~a a4~a \once \override Tie.stencil = #(flared-tie '((0 . 0)(0.06 . 0.1) (0.94 . 0.1) (1.0 . 0.0))) a4~a }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Impression forcée d’un bécarre avant une accidentelle
L’exemple suivant indique comment forcer l’impression d’un bécarre avant un changement d’altération.
\relative c' { \key es \major bes c des \tweak Accidental.restore-first ##t eis }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Décalage horizontal forcé
Quand LilyPond est dépassé, la propriété force-hshift
de l’objet
NoteColumn
et des silences à hauteur déterminée peuvent s’avérer
utiles pour dicter au programme les choix de placement. On travaille ici
en espace de portée.
\relative c' << { <d g>2 <d g> } \\ { <b f'>2 \once \override NoteColumn.force-hshift = #1.7 <b f'>2 } >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Construction et développement de diagrammes de fret
Voici différentes manières d’obtenir et de personnaliser des diagrammes de fret :
<< \chords { a2 a \repeat unfold 3 { c c c d d } } \new Voice = "mel" { \textLengthOn % Set global properties of fret diagram \override TextScript.size = #1.2 \override TextScript.fret-diagram-details.finger-code = #'below-string \override TextScript.fret-diagram-details.dot-color = #'black %% A chord for ukulele a'2^\markup { \override #'(fret-diagram-details . ( (string-count . 4) (dot-color . white) (finger-code . in-dot))) { \fret-diagram "4-2-2;3-1-1;2-o;1-o;" } } %% A chord for ukulele, with formatting defined in definition string % 1.2 * size, 4 strings, 4 frets, fingerings below string % dot radius .35 of fret spacing, dot position 0.55 of fret spacing a'2^\markup { \override #'(fret-diagram-details . ( (dot-color . white) (open-string . "o"))) { \fret-diagram "s:1.2;w:4;h:3;f:2;d:0.35;p:0.55;4-2-2;3-1-1;2-o;1-o;" } } %% These chords will be in normal orientation %% C major for guitar, barred on third fret % verbose style % roman fret label, finger labels below string, straight barre c'2^\markup { % 110% of default size \override #'(size . 1.1) { \override #'(fret-diagram-details . ( (number-type . roman-lower) (finger-code . below-string) (barre-type . straight))) { \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 5 1 3)) } } } %% C major for guitar, barred on third fret %% Double barre used to test barre function % verbose style c'2^\markup { % 110% of default size \override #'(size . 1.1) { \override #'(fret-diagram-details . ( (number-type . arabic) (dot-label-font-mag . 0.9) (finger-code . in-dot) (fret-label-font-mag . 0.6) (fret-label-vertical-offset . 0) (label-dir . -1) (mute-string . "M") (xo-font-magnification . 0.4) (xo-padding . 0.3))) { \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 4 2 5) (barre 5 1 3)) } } } %% C major for guitar, with capo on third fret % verbose style c'2^\markup { % 110% of default size \override #'(size . 1.1) { \override #'(fret-diagram-details . ( (number-type . roman-upper) (dot-label-font-mag . 0.9) (finger-code . none) (fret-label-vertical-offset . 0.5) (xo-font-magnification . 0.4) (xo-padding . 0.3))) { \fret-diagram-verbose #'((mute 6) (capo 3) (open 5) (place-fret 4 5 1) (place-fret 3 5 2) (place-fret 2 5 3) (open 1)) } } } %% simple D chord d'2^\markup { \override #'(fret-diagram-details . ( (finger-code . below-string) (dot-radius . 0.35) (string-thickness-factor . 0.3) (dot-position . 0.5) (fret-count . 3))) { \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" } } %% simple D chord, large top fret thickness d'2^\markup { \override #'(fret-diagram-details . ( (finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (top-fret-thickness . 7) (fret-count . 3))) { \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" } } % These chords will be in landscape orientation \override TextScript.fret-diagram-details.orientation = #'landscape %% C major for guitar, barred on third fret % verbose style % roman fret label, finger labels below string, straight barre c'2^\markup { % 110% of default size \override #'(size . 1.1) { \override #'(fret-diagram-details . ( (number-type . roman-lower) (finger-code . below-string) (barre-type . straight))) { \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 5 1 3)) } } } %% C major for guitar, barred on third fret %% Double barre used to test barre function % verbose style c'2^\markup { % 110% of default size \override #'(size . 1.1) { \override #'(fret-diagram-details . ( (number-type . arabic) (dot-label-font-mag . 0.9) (finger-code . in-dot) (fret-label-font-mag . 0.6) (fret-label-vertical-offset . 0) (label-dir . -1) (mute-string . "M") (xo-font-magnification . 0.4) (xo-padding . 0.3))) { \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 4 2 5) (barre 5 1 3)) } } } %% C major for guitar, with capo on third fret % verbose style c'2^\markup { % 110% of default size \override #'(size . 1.1) { \override #'(fret-diagram-details . ( (number-type . roman-upper) (dot-label-font-mag . 0.9) (finger-code . none) (fret-label-vertical-offset . 0.5) (xo-font-magnification . 0.4) (xo-padding . 0.3))) { \fret-diagram-verbose #'((mute 6) (capo 3) (open 5) (place-fret 4 5 1) (place-fret 3 5 2) (place-fret 2 5 3) (open 1)) } } } %% simple D chord d'2^\markup { \override #'(fret-diagram-details . ( (finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (fret-count . 3))) { \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" } } %% simple D chord, large top fret thickness d'2^\markup { \override #'(fret-diagram-details . ( (finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (top-fret-thickness . 7) (fret-count . 3))) { \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" } } % These chords will be in opposing-landscape orientation \override TextScript.fret-diagram-details.orientation = #'opposing-landscape %% C major for guitar, barred on third fret % verbose style % roman fret label, finger labels below string, straight barre c'2^\markup { % 110% of default size \override #'(size . 1.1) { \override #'(fret-diagram-details . ( (number-type . roman-lower) (finger-code . below-string) (barre-type . straight))) { \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 5 1 3)) } } } %% C major for guitar, barred on third fret %% Double barre used to test barre function % verbose style c'2^\markup { % 110% of default size \override #'(size . 1.1) { \override #'(fret-diagram-details . ( (number-type . arabic) (dot-label-font-mag . 0.9) (finger-code . in-dot) (fret-label-font-mag . 0.6) (fret-label-vertical-offset . 0) (label-dir . -1) (mute-string . "M") (xo-font-magnification . 0.4) (xo-padding . 0.3))) { \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 4 2 5) (barre 5 1 3)) } } } %% C major for guitar, with capo on third fret % verbose style c'2^\markup { % 110% of default size \override #'(size . 1.1) { \override #'(fret-diagram-details . ( (number-type . roman-upper) (dot-label-font-mag . 0.9) (finger-code . none) (fret-label-vertical-offset . 0.5) (xo-font-magnification . 0.4) (xo-padding . 0.3))) { \fret-diagram-verbose #'((mute 6) (capo 3) (open 5) (place-fret 4 5 1) (place-fret 3 5 2) (place-fret 2 5 3) (open 1)) } } } %% simple D chord d'2^\markup { \override #'(fret-diagram-details . ( (finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (fret-count . 3))) { \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" } } %% simple D chord, large top fret thickness d'2^\markup { \override #'(fret-diagram-details . ( (finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (top-fret-thickness . 7) (fret-count . 3))) { \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" } } } >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Génération de crochets personnalisés
Une fonction Scheme personnalisée permet de redéfinir la propriété
stencil
de l’objet Flag
, de sorte à modifier le glyphe
utilisé pour les crochets de croche.
#(define-public (weight-flag grob) (let* ((stem-grob (ly:grob-parent grob X)) (log (- (ly:grob-property stem-grob 'duration-log) 2)) (is-up? (eqv? (ly:grob-property stem-grob 'direction) UP)) (yext (if is-up? (cons (* log -0.8) 0) (cons 0 (* log 0.8)))) (flag-stencil (make-filled-box-stencil '(-0.4 . 0.4) yext)) (stroke-style (ly:grob-property grob 'stroke-style)) (stroke-stencil (if (equal? stroke-style "grace") (make-line-stencil 0.2 -0.9 -0.4 0.9 -0.4) empty-stencil))) (ly:stencil-add flag-stencil stroke-stencil))) % Create a flag stencil by looking up the glyph from the font #(define (inverted-flag grob) (let* ((stem-grob (ly:grob-parent grob X)) (dir (if (eqv? (ly:grob-property stem-grob 'direction) UP) "d" "u")) (flag (retrieve-glyph-flag "" dir "" grob)) (line-thickness (ly:staff-symbol-line-thickness grob)) (stem-thickness (ly:grob-property stem-grob 'thickness)) (stem-width (* line-thickness stem-thickness)) (stroke-style (ly:grob-property grob 'stroke-style)) (stencil (if (null? stroke-style) flag (add-stroke-glyph flag stem-grob dir stroke-style ""))) (rotated-flag (ly:stencil-rotate-absolute stencil 180 0 0))) (ly:stencil-translate rotated-flag (cons (- (/ stem-width 2)) 0)))) snippetexamplenotes = { \autoBeamOff c'8 d'16 c'32 d'64 \acciaccatura {c'8} d'64 } { \time 1/4 \textMark "Normal flags" \snippetexamplenotes \textMark "Custom flag: inverted" \override Flag.stencil = #inverted-flag \snippetexamplenotes \textMark "Custom flag: weight" \override Flag.stencil = #weight-flag \snippetexamplenotes \textMark "Revert to normal" \revert Flag.stencil \snippetexamplenotes }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Glissando par dessus un objet graphique
Un glissando peut sauter un objet NoteColumn
.
\relative c' { a2 \glissando \once \override NoteColumn.glissando-skip = ##t f''4 d, }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Stylisation des lignes de soufflet
Les lignes d’un soufflet peuvent adopter tous les styles permis par la
line-interface
: discontinu, pointillé, continu, ondulé ou en
zigzag.
\relative c' { c2\< c\! \override Hairpin.style = #'dashed-line c2\< c\! \override Hairpin.style = #'dotted-line c2\< c\! \override Hairpin.style = #'line c2\< c\! \override Hairpin.style = #'trill c2\< c\! \override Hairpin.style = #'zigzag c2\< c\! \revert Hairpin.style c2\< c\! }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Alignement de nuances personnalisées comme « sempre pp », « più f » ou « subito p »
Certaines indications de nuance requièrent un complément textuel, comme « sempre pp ». Dans la mesure où les nuances sont habituellement centrées sous la note, le pp se trouvera repoussé loin après la note à laquelle il s’applique.
Différentes approches permettent de correctement aligner horizontalement ce « sempre pp » :
-
Un simple
\once \override DynamicText.X-offset = #-9.2
avant la note considérée de telle sorte que la nuance soit décalée manuellement à la bonne place. Inconvénient : il faut le faire manuellement à chaque fois qu’intervient ce markup. -
L’intégration d’un rembourrage (
#:hspace 7.1
) à la définition de cette nuance personnalisée afin qu’une fois centrée par LilyPond elle soit correctement alignée. Inconvénient : le rembourrage occupera exactement cet espace et ne permettra à aucun autre markup ou nuance d’apparaître à cet endroit. -
L’application d’un décalage au script de nuance
\once \override … X-offset = …
. Inconvénient : là aussi il faut le faire à chaque fois. -
L’attribution arbitraire d’une dimension à 0 du texte additionnel à
l’aide d’un
#:with-dimensions '(0 . 0) '(0 . 0)
. Inconvénient : LilyPond considère que « sempre » n’occupe pas d’espace, et donc pourra mettre à cet endroit d’autres éléments, ce qui pourrait générer des collisions qui ne seront pas détectées par les routines ad hoc. D’autre part, il semble persister un espacement, ce qui laisse l’impression d’un alignement différent en l’absence de texte additionnel. - L’ajout, explicite, du décalage directement dans la fonction Scheme du script de nuance.
-
La définition d’un alignement explicite au sein du script de nuance.
Ceci ne sera suivi d’effet, par défaut, qu’en jouant sur
X-offset
. Inconvénient : il faut définirDynamicText.X-offset
, ce qui s’appliquera à toutes les nuances textuelles. Par ailleurs, l’alignement sera réalisé sur le bord droit du texte additionnel, non sur le milieu de pp.
\paper { ragged-right = ##f indent = 2.5\cm } % Solution 1: Using a simple markup with a particular halign value % Drawback: It's a markup, not a dynamic command, so \dynamicDown % etc. will have no effect semppMarkup = \markup { \halign #1.4 \italic "sempre" \dynamic "pp" } % Solution 2: Using a dynamic script & shifting with % \once \override ...X-offset = .. % Drawback: \once \override needed for every invocation semppK = #(make-dynamic-script (markup #:line (#:normal-text #:italic "sempre" #:dynamic "pp"))) % Solution 3: Padding the dynamic script so the center-alignment % puts it at the correct position % Drawback: the padding really reserves the space, nothing else can be there semppT = #(make-dynamic-script (markup #:line (#:normal-text #:italic "sempre" #:dynamic "pp" #:hspace 7.1))) % Solution 4: Dynamic, setting the dimensions of the additional text to 0 % Drawback: To lilypond "sempre" has no extent, so it might put % other stuff there => collisions % Drawback: Also, there seems to be some spacing, so it's not exactly the % same alignment as without the additional text semppM = #(make-dynamic-script (markup #:line (#:with-dimensions '(0 . 0) '(0 . 0) #:right-align #:normal-text #:italic "sempre" #:dynamic "pp"))) % Solution 5: Dynamic with explicit shifting inside the scheme function semppG = #(make-dynamic-script (markup #:hspace 0 #:translate '(-18.85 . 0) #:line (#:normal-text #:italic "sempre" #:dynamic "pp"))) % Solution 6: Dynamic with explicit alignment. This has only effect % if one sets X-offset! % Drawback: One needs to set DynamicText.X-offset! % Drawback: Aligned at the right edge of the additional text, % not at the center of pp semppMII = #(make-dynamic-script (markup #:line (#:right-align #:normal-text #:italic "sempre" #:dynamic "pp"))) \new StaffGroup << \new Staff = "s" \with { instrumentName = \markup \column { Normal } } << \relative c'' { \key es \major c4\pp c\p c c | c\ff c c\pp c } >> \new Staff = "sMarkup" \with { instrumentName = \markup \column { Normal markup } } << \relative c'' { \key es \major c4-\semppMarkup c\p c c | c\ff c c-\semppMarkup c } >> \new Staff = "sK" \with { instrumentName = \markup \column { Explicit shifting } } << \relative c'' { \key es \major \once \override DynamicText.X-offset = #-9.2 c4\semppK c\p c c c4\ff c \once \override DynamicText.X-offset = #-9.2 c4\semppK c } >> \new Staff = "sT" \with { instrumentName = \markup \column { Right padding } } << \relative c'' { \key es \major c4\semppT c\p c c | c\ff c c\semppT c } >> \new Staff = "sM" \with { instrumentName = \markup \column { Set dimension "to zero" } } << \relative c'' { \key es \major c4\semppM c\p c c | c\ff c c\semppM c } >> \new Staff = "sG" \with { instrumentName = \markup \column { Shift inside dynamics} } << \relative c'' { \key es \major c4\semppG c\p c c | c\ff c c\semppG c } >> \new Staff = "sMII" \with { instrumentName = \markup \column { Alignment inside dynamics } } << \relative c'' { \key es \major % Setting to ##f (false) gives the same result \override DynamicText.X-offset = #0 c4\semppMII c\p c c | c\ff c c\semppMII c } >> >> \layout { \override Staff.InstrumentName.self-alignment-X = #LEFT }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Repositionnement d’un diagramme de fret
Différents moyens permettent de repositionner un diagramme de fret pour éviter des collisions ou le placer entre deux notes :
-
La modification des valeurs de
padding
ou deextra-offset
comme pour le second diagramme ; - L’adjonction d’une voix invisible dans laquelle les diagrammes sont attachés à des notes invisibles comme pour le troisième diagramme.
Lorsque le diagramme doit correspondre à une position rythmique dans la mesure, comme au troisième temps de la deuxième mesure, la seconde méthode est plus appropriée puisque le diagramme sera aligné sur le temps.
harmonies = \chordmode { a8:13 % THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME \once \override ChordNames.ChordName.extra-offset = #'(10 . 0) b8:13 s2. % THIS LINE IS THE SECOND METHOD s4 s4 b4:13 } \score { << \new ChordNames \harmonies \new Staff {a8^\markup { \fret-diagram "6-x;5-0;4-2;3-0;2-0;1-2;" } % THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM \once \override TextScript.extra-offset = #'(10 . 0) b4.~^\markup { \fret-diagram "6-x;5-2;4-4;3-2;2-2;1-4;" } b4. a8\break % HERE IS THE SECOND METHOD << { a8 b4.~ b4. a8} { s4 s4 s4^\markup { \fret-diagram "6-x;5-2;4-4;3-2;2-2;1-4;" } } >> } >> }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Insertion d’une césure
Une surcharge de la propriété text
de l’objet
BreathingSign
permet de créer une marque de césure.
LilyPond dispose également d’une variante courbée.
\relative c'' { \override BreathingSign.text = \markup { \musicglyph "scripts.caesura.straight" } c8 e4. \breathe g8. e16 c4 \override BreathingSign.text = \markup { \musicglyph "scripts.caesura.curved" } g8 e'4. \breathe g8. e16 c4 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Conservation de la taille lors d’un changement de clef
Lorsqu’un changement de clef intervient, le nouveau signe s’imprime dans
une taille inférieure. On peut y déroger avec full-size-change
.
\relative c' { \clef "treble" c1 \clef "bass" c1 \clef "treble" c1 \override Staff.Clef.full-size-change = ##t \clef "bass" c1 \clef "treble" c1 \revert Staff.Clef.full-size-change \clef "bass" c1 \clef "treble" c1 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Terminaison de ligne en flèche
Les extensions de texte, tout comme les indications sous forme de ligne tel un glissando, peuvent se voir pourvues d’une extrémité en flèche.
\relative c'' { \override TextSpanner.bound-padding = #1.0 \override TextSpanner.style = #'line \override TextSpanner.bound-details.right.arrow = ##t \override TextSpanner.bound-details.left.text = #"fof" \override TextSpanner.bound-details.right.text = #"gag" \override TextSpanner.bound-details.right.padding = #0.6 \override TextSpanner.bound-details.right.stencil-align-dir-y = #CENTER \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER \override Glissando.bound-details.right.arrow = ##t \override Glissando.arrow-length = #0.5 \override Glissando.arrow-width = #0.25 a8\startTextSpan gis a4 b\glissando b, g'4 c\stopTextSpan c2 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Recours à la propriété transparent
pour rendre des objets invisibles
Une modification de la propriété transparent
permet d’imprimer un
objet « à l’encre sympathique » : l’objet n’est pas affiché bien que tous
ses attributs soient préservés. L’objet en question occupe donc sa
place, est pris en compte lors de collisions, et peut se voir attaché
liaisons ou ligatures.
Cet exemple illustre la manière de connecter deux voix par une liaison de prolongation. Les liaisons de prolongation ne peuvent normalement intervenir que dans la même voix. Dès lors que la liaison est entamée dans une autre voix et que la première hampe ascendante est rendue transparente dans cette même voix, la liaison semble passer d’une voix à l’autre.
\relative { \time 2/4 << { \once \hide Stem \once \override Stem.length = #8 b'8 ~ 8\noBeam \once \hide Stem \once \override Stem.length = #8 g8 ~ 8\noBeam } \\ { b8 g g e } >> }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Saut de ligne et glissando
L’affectation de la valeur #t
à la propriété breakable
,
combinée à after-line-breaking
, permet la rupture d’une
indication de glissando lors d’un saut de ligne.
glissandoSkipOn = { \override NoteColumn.glissando-skip = ##t \hide NoteHead \override NoteHead.no-ledgers = ##t } \relative c'' { \override Glissando.breakable = ##t \override Glissando.after-line-breaking = ##t f1\glissando | \break a4 r2. | f1\glissando \once \glissandoSkipOn \break a2 a4 r4 | }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Contrôle manuel du positionnement des ligatures
Le positionnement et la pente des ligatures peuvent être contrôlés
manuellement à l’aide d’une adaptation de la propriété positions
de l’objet Beam
.
\relative c' { \time 2/4 % from upper staff-line (position 2) to center (position 0) \override Beam.positions = #'(2 . 0) c8 c % from center to one above center (position 1) \override Beam.positions = #'(0 . 1) c8 c }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Centrage des numéros de mesure
Il est d’usage, dans les partitions de musique de film, de trouver les
numéros de mesure centrés sur leur mesure. Ceci s’obtient en activant la
propriété de contexte centerBarNumbers
. Lorsque cette propriété
est utilisée, le type de grob (objet graphique) BarNumber
est remplacé par CenteredBarNumber
.
L’exemple ci-dessous illustre plusieurs réglages : les numéros de mesure sont à la fois centrés, encadrés, et disposés sous les portées.
\layout { \context { \Score centerBarNumbers = ##t barNumberVisibility = #all-bar-numbers-visible \override CenteredBarNumber.stencil = #(make-stencil-boxer 0.1 0.25 ly:text-interface::print) \override CenteredBarNumberLineSpanner.direction = #DOWN } } \new StaffGroup << \new Staff \relative c' { d4-. f8( e d4) bes'-> | d,-. f8( e d4) cis'-> | g-. f8( d e4) g-> | a,1-> | } \new Staff \relative c { \clef bass d4 f8 e d2~ | 4 f8 e d2~ | 4 4 2 | a1 | } >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Présentation à l’ancienne (barres de mesure entre les portées)
En musique mensurale, les barres de mesure ne traversent pas les
portées. Pour obtenir ce résultat il faudra définir
measureBarType
à "-span|"
et utiliser un regroupement de
portées permettant l’extension des barres entre les portées, tel un
StaffGroup
.
\layout { \context { \Staff measureBarType = "-span|" } } music = \fixed c'' { c1 d2 \section e2 f1 \fine } \new StaffGroup << \new Staff \music \new Staff \music >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Modification de la pente de l’extension d’octaviation
Il est possible d’adapter la pente d’une indication d’octaviation.
\relative c'' { \override Staff.OttavaBracket.stencil = #ly:line-spanner::print \override Staff.OttavaBracket.bound-details = #`((left . ((Y . 0) (attach-dir . ,LEFT) (padding . 0) (stencil-align-dir-y . ,CENTER))) (right . ((Y . 5.0) ; Change the number here (padding . 0) (attach-dir . ,RIGHT) (text . ,(make-draw-dashed-line-markup (cons 0 -1.2)))))) \override Staff.OttavaBracket.left-bound-info = #ly:horizontal-line-spanner::calc-left-bound-info-and-text \override Staff.OttavaBracket.right-bound-info = #ly:horizontal-line-spanner::calc-right-bound-info \ottava #1 c1 c'''1 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Déplacement des notes pointées dans une polyphonie
Une note pointée appartenant à la voix supérieure d’une portée
polyphonique sera par défaut décalée vers la droite afin d’éviter les
collisions avec les autres voix. Ce comportement peut être outrepassé à
l’aide de la propriété prefer-dotted-right
de
NoteCollision
.
\new Staff \relative c' << { f2. f4 \override Staff.NoteCollision.prefer-dotted-right = ##f f2. f4 \override Staff.NoteCollision.prefer-dotted-right = ##t f2. f4 } \\ { e4 e e e e e e e e e e e } >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Déplacement vertical des liaisons d’articulation
Le positionnement vertical d’une liaison se contrôle par la propriété
positions
de l’objet Slur
. Cette propriété dispose de deux
paramètres : le premier affecte l’extrémité gauche de la liaison, le
second son extrémité droite. La valeur des paramètres n’aura aucune
influence sur le galbe de la liaison. LilyPond ne s’en servira que pour
adapter le positionnement de la courbe. Des valeurs positives décalent
la liaison vers le haut et s’utilisent pour des hampes descendantes. Des
valeurs négatives entraînent un décalage vers le bas.
\relative c' { \stemDown e4( a) \override Slur.positions = #'(1 . 1) e4( a) \override Slur.positions = #'(2 . 2) e4( a) \override Slur.positions = #'(3 . 3) e4( a) \override Slur.positions = #'(4 . 4) e4( a) \override Slur.positions = #'(5 . 5) e4( a) \override Slur.positions = #'(0 . 5) e4( a) \override Slur.positions = #'(5 . 0) e4( a) \stemUp \override Slur.positions = #'(-5 . -5) e4( a) \stemDown \revert Slur.positions e4( a) }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Imbrications de regroupements de portées
La propriété systemStartDelimiterHierarchy
permet de créer des
regroupements imbriqués complexes. La commande
\set StaffGroup.systemStartDelimiterHierarchy
prend en
argument la liste alphabétique des sous-groupes à hiérarchiser. Chaque
sous-groupe peut être affublé d’un délimiteur particulier. Chacun des
regroupements intermédiaires doit être borné par des parenthèses. Bien
que des éléments de la liste puissent être omis, le premier délimiteur
embrassera toujours l’intégralité des portées. Vous disposez des quatre
délimiteurs SystemStartBar
, SystemStartBracket
,
SystemStartBrace
et SystemStartSquare
.
\new StaffGroup \relative c'' << \override StaffGroup.SystemStartSquare.collapse-height = #4 \set StaffGroup.systemStartDelimiterHierarchy = #'(SystemStartSquare (SystemStartBrace (SystemStartBracket a (SystemStartSquare b) ) c ) d) \new Staff { c1 } \new Staff { c1 } \new Staff { c1 } \new Staff { c1 } \new Staff { c1 } >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Personnalisation de certains types d’articulation
On peut parfois vouloir modifier un seul type d’articulation. Bien que
ce soit tout à fait faisable avec un \tweak
, cela devient vite
fastidieux d’affiner chaque occurrence d’un même signe dans toute une
partition. Le code ci-dessous illustre la manière de modifier des
articulations grâce à une liste de réglages personnalisés. Ceci peut
servir à créer des feuilles de style.
La fonction \customScripts
ici proposée peut se placer, depuis
la version 2.16.2, dans un bloc \layout
.
% Code by David Nalesnik and Thomas Morley #(define (custom-script-tweaks ls) (lambda (grob) (let* ((type (ly:event-property (ly:grob-property grob 'cause) 'articulation-type)) (tweaks (assoc-ref ls type))) (if tweaks (for-each (lambda (x) (ly:grob-set-property! grob (car x) (cdr x))) tweaks))))) customScripts = #(define-music-function (settings) (list?) #{ \override Script.before-line-breaking = #(custom-script-tweaks settings) #}) revertCustomScripts = \revert Script.before-line-breaking %%%%%%%%%%%%% % Example: %%%%%%%%%%%%% % Predefine a list of desired tweaks. #(define my-settings-1 '( (staccato . ((color . (1 0 0)) (padding . 0.5))) (accent . ((font-size . 0) (color . (1 0 0)))) (tenuto . ((rotation . (45 0 0)) (padding . 2) (font-size . 10))) (staccatissimo . ((padding . 1) (color . (1 0 0)))) (segno . ((font-size . 0) (color . (1 0 0)))) )) #(define my-settings-2 '( (staccato . ((color . (0 1 0)))) (accent . ((font-size . 4) (color . (0 1 0)) (padding . 1.5))) (tenuto . ((font-size . 10))) (staccatissimo . ((padding . 2) (color . (0 1 0)))) (coda . ((color . (0 1 0)) (padding . 1))) )) one = \relative c'' { f1-- \customScripts #my-settings-1 f-. f-! f-> f-- f-!\segno \revertCustomScripts f-> f-. } two = \relative c' { f1-- \customScripts #my-settings-2 f-. f-! f-> f---> f-! f-> f-.\coda } \new Staff << \new Voice { \voiceOne \one } \new Voice { \voiceTwo \two } >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Overriding articulations of distinct type
Sometimes you may want to affect a single articulation type. Although
it is always possible to use \tweak
, it might become tedious to
do so for every single sign of a whole score. The following shows how
to tweak articulations with a list of custom settings. One use case
might be to create a style sheet.
With 2.16.2 it is possible to put the proposed function,
\customScripts
, into a \layout
block.
% Code by David Nalesnik and Thomas Morley #(define (custom-script-tweaks ls) (lambda (grob) (let* ((type (ly:prob-property (ly:grob-property grob 'cause) 'articulation-type)) (tweaks (assoc-ref ls type))) (if tweaks (for-each (lambda (x) (ly:grob-set-property! grob (car x) (cdr x))) tweaks))))) customScripts = #(define-music-function (settings)(list?) #{ \override Script.before-line-breaking = #(custom-script-tweaks settings) #}) revertCustomScripts = { \revert Script.before-line-breaking } %%%%%%%%%%%%% % Example: %%%%%%%%%%%%% % Predefine a list of desired tweaks. #(define my-settings-1 '( ("staccato" . ((color . (1 0 0))(padding . 0.5))) ("accent" . ((font-size . 0)(color . (1 0 0)))) ("tenuto" . ((rotation . (45 0 0)) (padding . 2)(font-size . 10))) ("staccatissimo" . ((padding . 1) (color . (1 0 0)))) ("segno" . ((font-size . 0)(color . (1 0 0)))) )) #(define my-settings-2 '( ("staccato" . ((color . (0 1 0)))) ("accent" . ((font-size . 4)(color . (0 1 0))(padding . 1.5))) ("tenuto" . ((font-size . 10))) ("staccatissimo" . ((padding . 2) (color . (0 1 0)))) ("coda" . ((color . (0 1 0)) (padding . 1))) )) one = \relative c'' { f1-- \customScripts #my-settings-1 f-. f-! f-> f-- f-!\segno \revertCustomScripts f-> f-. } two = \relative c' { f1-- \customScripts #my-settings-2 f-. f-! f-> f---> f-! f-> f-.\coda } \new Staff << \new Voice { \voiceOne \one } \new Voice { \voiceTwo \two } >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Affichage du numéro de répétition en pourcent
Le numéro de mesure répétée sera imprimé à intervalle régulier si vous
déterminez la propriété de contexte repeatCountVisibility
.
\relative c'' { \set countPercentRepeats = ##t \set repeatCountVisibility = #(every-nth-repeat-count-visible 5) \repeat percent 10 { c1 } \break \set repeatCountVisibility = #(every-nth-repeat-count-visible 2) \repeat percent 6 { c1 d1 } }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Positionnement des arpeggios
L’ajustement de la taille d’une indication d’arpeggio s’effectue au travers du positionnement de ses extrémités haute ou basse.
\relative c' { <c e g b>1\arpeggio \once \override Arpeggio.positions = #'(-5 . 0) <c e g b>1\arpeggio \once \override Arpeggio.positions = #'(0 . 5) <c e g b>1\arpeggio \once \override Arpeggio.positions = #'(-5 . 5) <c e g b>1\arpeggio }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Positionnement des silences multimesures
Si l’on peut positionner verticalement un silence simple en le rattachant à une note, il n’en va pas de même pour un silence multimesure. Néanmoins, et uniquement dans le cadre de musique polyphonique, les silences multimesures sont positionnés différemment selon qu’ils appartiennent à une voix au numéro pair ou impair.
Le positionnement des silences multimesures peut se contrôler ainsi :
\relative c'' { % Multi-measure rests by default are set under the fourth line R1 % They can be moved using an override \override MultiMeasureRest.staff-position = #-2 R1 \override MultiMeasureRest.staff-position = #0 R1 \override MultiMeasureRest.staff-position = #2 R1 \override MultiMeasureRest.staff-position = #3 R1 \override MultiMeasureRest.staff-position = #6 R1 \revert MultiMeasureRest.staff-position \break % In two Voices, odd-numbered voices are under the top line << { R1 } \\ { a1 } >> % Even-numbered voices are under the bottom line << { a1 } \\ { R1 } >> % Multi-measure rests in both voices remain separate << { R1 } \\ { R1 } >> % Separating multi-measure rests in more than two voices % requires an override << { R1 } \\ { R1 } \\ \once \override MultiMeasureRest.staff-position = #0 { R1 } >> % Using compressed bars in multiple voices requires another override % in all voices to avoid multiple instances being printed \compressMMRests << \revert MultiMeasureRest.direction { R1*3 } \\ \revert MultiMeasureRest.direction { R1*3 } >> }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Positionnement d’une annotation à l’intérieur d’une liaison
Lorsqu’une annotation doit s’incrire à l’intérieur d’une liaison, la
propriété outside-staff-priority
doit être désactivée.
\relative c'' { \override TextScript.avoid-slur = #'inside \override TextScript.outside-staff-priority = ##f c2(^\markup { \halign #-10 \natural } d4.) c8 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Inscrire le numéro de mesure dans un cadre ou un cercle
Les numéros de mesure peuvent être encadrés ou entourés d’un cercle.
\relative c' { % Prevent bar numbers at the end of a line and permit them elsewhere \override Score.BarNumber.break-visibility = #end-of-line-invisible \set Score.barNumberVisibility = #(every-nth-bar-number-visible 4) % Increase the size of the bar number by 2 \override Score.BarNumber.font-size = #2 % Draw a box round the following bar number(s) \override Score.BarNumber.stencil = #(make-stencil-boxer 0.1 0.25 ly:text-interface::print) \repeat unfold 5 { c1 } % Draw a circle round the following bar number(s) \override Score.BarNumber.stencil = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) \repeat unfold 4 { c1 } \bar "|." }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Impression du métronome et des repères sous la portée
Les indications de tempo et les marques de repère s’impriment par défaut
au-dessus de la portée. Le fait de régler en conséquence la propriété
direction
des objets MetronomeMark
et RehearsalMark
les placera au-dessous de la portée.
\layout { indent = 0 ragged-right = ##f } { % Metronome marks below the staff \override Score.MetronomeMark.direction = #DOWN \tempo 8. = 120 c''1 % Rehearsal marks below the staff \override Score.RehearsalMark.direction = #DOWN \mark \default c''1 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Impression du nom des notes avec ou sans indication d’octave
Le contexte NoteNames
permet d’imprimer le nom des notes. La
propriété printOctaveNames
, une fois activée, leur adjoindra une
indication d’octave.
scale = \relative c' { a4 b c d e4 f g a } \new Staff { << \scale \context NoteNames { \set printOctaveNames = ##f \scale } >> R1 << \scale \context NoteNames { \set printOctaveNames = ##t \scale } >> }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Printing tuplet brackets on the note head side
Whichever option you choose for controlling the tuplet bracket
visibility, it will show or hide the tuplet bracket irrespectively
of tuplet bracket placement (stem side or note head side).
However, when placing the tuplet bracket on the note head side some
authors recommend always printing the tuplet bracket. The option
visible-over-note-heads
can be used to achieve this.
music = \relative c'' { \tupletNeutral \tuplet 3/2 { c16[ d e } f8] \tupletUp \tuplet 3/2 { c8 d e } } \new Voice { \relative c' { \time 2/4 \override TupletBracket.visible-over-note-heads = ##t \override Score.TextMark.non-musical = ##f { \textMark \markup "default" \music } \override TupletBracket.bracket-visibility = #'if-no-beam { \textMark \markup \typewriter "'if-no-beam" \music } } }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Espacement strictement proportionnel des notes
Lorsque la propriété strict-note-spacing
est activée,
l’espacement des notes dans un système ne tient compte ni des barres de
mesure ni des clefs, qui se retrouvent placées juste avant la note qui
tombe au même moment. Ceci peut entraîner certaines collisions.
\relative c'' << \override Score.SpacingSpanner.strict-note-spacing = ##t \set Score.proportionalNotationDuration = #(ly:make-moment 1/16) \new Staff { c8[ c \clef alto c c \grace { d16 } c8 c] c4 c2 \grace { c16[ c16] } c2 } \new Staff { c2 \tuplet 3/2 { c8 \clef bass cis,, c } c4 c1 } >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Retrait de l’accolade à la première ligne d’une pièce pour piano
Dans cet extrait est supprimée la première accolade d’un
PianoStaff
ou d’un GrandStaff
.
Ceci peut s’avérer utile pour couper et coller l’image générée dans de la musique préexistante.
Est utilisée la fonction \alterBroken
.
someMusic = { \once \override Staff.Clef.stencil = ##f \once \override Staff.TimeSignature.stencil = ##f \repeat unfold 3 c1 \break \repeat unfold 5 c1 \break \repeat unfold 5 c1 } \score { \new PianoStaff << \new Staff = "right" \relative c'' \someMusic \new Staff = "left" \relative c' { \clef F \someMusic } >> \layout { indent=75 \context { \PianoStaff \alterBroken transparent #'(#t) SystemStartBrace } } }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Suppression de la partie interportée des barres de mesure d’un regroupement autre que ChoirStaff
Les barres de mesure des regroupements StaffGroup
,
PianoStaff
et GrandStaff
sont par défaut d’un seul tenant.
La portion entre les portées – l’objet SpanBar
– peut néanmoins
être supprimée, portée par portée.
\relative c' { \new StaffGroup << \new Staff { e1 | e \once \override Staff.BarLine.allow-span-bar = ##f e1 | e | e } \new Staff { c1 | c | c \once \override Staff.BarLine.allow-span-bar = ##f c1 | c } \new Staff { a1 | a | a | a | a } >> }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Masquage de la première ligne si elle est vide
Par défaut, le premier système comportera absolument toutes les portées.
Si vous préférez masquer les portées vides y compris pour le premier
système, vous devrez activer la propriété remove-first
du
VerticalAxisGroup
. Mentionnée dans un bloc \layout
, cette
commande agira de manière globale. Pour qu’elle ne soit effective que
pour une portée particulière, vous devrez également spécifier le
contexte (Staff
pour qu’il ne concerne que la portée en cours) en
préfixe de la propriété.
La première ligne inférieure du deuxième StaffGroup
est bien
présente, pour la simple raison que le réglage en question ne s’applique
qu’à la portée dans laquelle il a été inscrit.
\layout { \context { \Staff \RemoveEmptyStaves % To use the setting globally, uncomment the following line: % \override VerticalAxisGroup.remove-first = ##t } } \new StaffGroup << \new Staff \relative c' { e4 f g a \break c1 } \new Staff { % To use the setting globally, comment this line, % uncomment the line in the \layout block above \override Staff.VerticalAxisGroup.remove-first = ##t R1 \break R } >> \new StaffGroup << \new Staff \relative c' { e4 f g a \break c1 } \new Staff { R1 \break R } >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Styles de silences
Les silences peuvent être gravés selon différents styles.
\new Staff \relative c { \omit Score.TimeSignature \cadenzaOn \override Staff.Rest.style = #'mensural r\maxima^\markup \typewriter { mensural } r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128 \bar "" \break \override Staff.Rest.style = #'neomensural r\maxima^\markup \typewriter { neomensural } r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128 \bar "" \break \override Staff.Rest.style = #'classical r\maxima^\markup \typewriter { classical } r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128 \bar "" \break \override Staff.Rest.style = #'z r\maxima^\markup \typewriter { z-style } r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128 \bar "" \break \override Staff.Rest.style = #'default r\maxima^\markup \typewriter { default } r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Barres rythmiques
Il arrive, dans une feuille de chant « simple », que les notes soient remplacées par une « pulsation » et que la structure de la chanson soit indiquée par les accords au-dessus des mesures. Ceci peut être utile lorsque l’on crée ou retranscrit la structure d’une chanson, ainsi que pour donner au guitariste et musiciens de jazz une pseudo partition.
Le fonctionnement standard d’un \repeat percent
n’est pas ici
applicable puisque le premier temps doit être une note ou un silence.
Le code ci-dessous propose deux alternatives à ce problème en
redéfinissant l’aspect d’un silence. Si la durée d’un temps ne
correspond pas à la noire, le r4
inclus dans la définition devra
être remplacé par un silence de durée appropriée.
% Macro to print single slash rs = { \once \override Rest.stencil = #ly:percent-repeat-interface::beat-slash \once \override Rest.thickness = #0.48 \once \override Rest.slope = #1.7 r4 } % Function to print a specified number of slashes comp = #(define-music-function (count) (integer?) #{ \override Rest.stencil = #ly:percent-repeat-interface::beat-slash \override Rest.thickness = #0.48 \override Rest.slope = #1.7 \repeat unfold $count { r4 } \revert Rest.stencil #} ) \score { \relative c' { c4 d e f | \rs \rs \rs \rs | \comp #4 | } }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Séparation entre altérations annulées et nouvelle armure
Les altérations supprimées lors d’un changement de tonalité sont par
défaut accolées à la nouvelle armure. Ce comportement peut s’adapter
grâce à la propriété break-align-orders
de l’objet
BreakAlignment
.
La valeur de break-align-orders
est constituée d’un vecteur à
trois composantes listant l’ordre des éléments à l’occasion d’une
rupture. Seule la deuxième liste est ici modifiée,
key-cancellation
étant déplacé avant staff-bar
. En ne
modifiant que la deuxième liste, cette modification dans l’ordre
d’apparition des éléments sera effective seulement en cours de système,
et non en début ou fin de ligne.
\new Staff { \override Score.BreakAlignment.break-align-orders = ##((left-edge ambitus breathing-sign clef staff-bar key-cancellation key-signature time-signature custos) (left-edge ambitus breathing-sign clef key-cancellation staff-bar key-signature time-signature custos) (left-edge ambitus breathing-sign clef key-cancellation key-signature staff-bar time-signature custos)) \key des \major c'1 \bar "||" \key bes \major c'1 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Soufflets et barres de mesure
En principe, un soufflet – (de)crescendo imprimé sous forme graphique –
commence au bord gauche de la note de départ, et se termine au
bord droit de la note d’arrivée. Cependant, si la note d’arrivée
est sur un premier temps, le soufflet s’arrêtera au niveau de la
barre de mesure qui la précède. Ce comportement peut être annulé
en assignant faux (#f
) à la propriété to-barline
.
\relative c'' { e4\< e2. e1\! \override Hairpin.to-barline = ##f e4\< e2. e1\! }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Séparation visuelle entre les systèmes
La séparation entre deux systèmes consécutifs peut être mise en
évidence par n’importe quel markup. LilyPond dispose à cet effet
d’une double oblique inversée : \slashSeparator
.
\paper { system-separator-markup = \slashSeparator line-width = 120 } notes = \relative c' { c1 | c \break c1 | c \break c1 | c } \book { \score { \new GrandStaff << \new Staff \notes \new Staff \notes >> } }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Impression d’une même articulation des deux côtés d’une note ou d’un accord
LilyPond ne permet pas, par défaut, qu’une même articulation (accent,
flageolet, point d’orgue, etc.) se retrouve à la fois au-dessus et
au-dessous d’une note. Par exemple, c4_\fermata^\fermata
ne
donnera qu’un seul point d’orgue en dessous du do ; celui du dessus sera
tout bonnement ignoré.
On peut néanmoins accoler des scripts, tels des doigtés, à l’intérieur
d’un accord ; il peut donc y avoir autant d’articulations que de besoin,
ce qui, par voie de conséquence, permet de s’affranchir de la présence
des hampes et de positionner l’articulation relativement à la tête de
note comme dans le cas du flageolet ci-dessous. L’imitation du
traitement d’un script externe à un accord requérant un
'add-stem-support
demande de libeller la note comme étant un
accord et d’ajouter les articulations au sein de la construction
<…>
.
Un simple amendement permettra de rectifier le positionnement habituel
en surplomb : <c-\tweak direction #DOWN-\fermata^\fermata>
\relative c' { <>^"Wrong" c2_\fermata^\fermata % The second fermata is ignored! <e d'>2^\flageolet_\flageolet \stopStaff s1 \startStaff <>^"Works if written inside a chord" <e_\flageolet d'^\flageolet>2 <e_\flageolet d'^\flageolet>2 <e_\flageolet^\flageolet>2 <e_\fermata^\fermata>2 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Ligne de prolongation pour numéro de corde
Voici comment ajouter une ligne de prolongation à une indication de numéro de corde, afin de stipuler que les notes qui suivent doivent être jouées sur la corde en question.
stringNumberSpanner = #(define-music-function (StringNumber) (string?) #{ \override TextSpanner.style = #'solid \override TextSpanner.font-size = #-5 \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER \override TextSpanner.bound-details.left.text = \markup { \circle \number $StringNumber } #}) \relative c { \clef "treble_8" \stringNumberSpanner "5" \textSpannerDown a8\startTextSpan b c d e f\stopTextSpan \stringNumberSpanner "4" g\startTextSpan a bes4 a g2\stopTextSpan }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Suppression des avertissements de chevauchement
If notes from two voices with stems in the same direction are placed at
the same position, and both voices have no shift or the same shift
specified, the error message ‘warning: ignoring too many clashing
note columns’ will appear when compiling the LilyPond file. This
message can be suppressed by setting the 'ignore-collision
property of the NoteColumn
object to #t
. Please note that
this does not just suppress warnings but stops LilyPond trying to
resolve collisions at all and so may have unintended results unless
used with care.
ignore = \override NoteColumn.ignore-collision = ##t \relative c' { \new Staff << \new Voice { \ignore \stemDown f2 g } \new Voice { c2 \stemDown c, } >> }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Métrique entre parenthèses
Une métrique peut être mise entre parenthèses.
\relative c'' { \override Staff.TimeSignature.stencil = #(lambda (grob) (bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1)) \time 2/4 a4 b8 c }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Métrique entre parenthèses – méthode 3
Autre manière de mettre la métrique entre parenthèses.
\relative c'' { \override Staff.TimeSignature.stencil = #(lambda (grob) (parenthesize-stencil (ly:time-signature::print grob) 0.1 0.4 0.4 0.1 )) \time 2/4 a4 b8 c }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Affichage seulement du numérateur d’une métrique (au lieu d’une fraction)
La métrique est parfois indiquée non pas par une fraction (par ex. 7/4)
mais simplement par son numérateur (le chiffre 7 dans ce cas).
L’instruction
\override Staff.TimeSignature.style = #'single-digit
permet de
déroger au style par défaut de manière permanente – un
\revert Staff.TimeSignature.style
annulera ces modifications.
Lorsque cette métrique sous la forme d’un seul chiffre ne se présente
qu’une seule fois, il suffit de faire précéder l’instruction
\override
d’un simple \once
.
\relative c'' { \time 3/4 c4 c c % Change the style permanently \override Staff.TimeSignature.style = #'single-digit \time 2/4 c4 c \time 3/4 c4 c c % Revert to default style: \revert Staff.TimeSignature.style \time 2/4 c4 c % single-digit style only for the next time signature \once \override Staff.TimeSignature.style = #'single-digit \time 5/4 c4 c c c c \time 2/4 c4 c }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Crochet de n-olet et changement de portée
Voici comment obtenir un crochet de n-olet qui débute sur une portée et se termine dans l’autre.
aigues = \relative c' { \time 6/8 s4. \stemDown c16[ bes' e] \stemUp g c e \stemDown g8 } basses = \relative c { \time 3/4 \clef F \tweak positions #'(4.5 . 9.5) \tweak edge-height #'(1 . -1) \tuplet 7/6 { c16[ bes' e] \change Staff = md \stemUp g[ c e g] } s4.s8 } \new PianoStaff \with { \omit TimeSignature } << \new Staff = md \aigues \new Staff = mg \basses >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Affinage des propriétés d’une clef
Modifier le glyphe, la position de la clef ou son octaviation ne
changeront pas la position des notes ; il faut pour y parvenir modifier
aussi la position du do médium. La redéfinition préalable de
middleCClefPosition
permet de placer l’armure sur les bonnes
lignes. Le positionnement est relatif à la ligne médiane, un nombre
positif faisant monter, un nombre négatif abaissant.
Par exemple, la commande \clef "treble_8"
équivaut à définir
clefGlyph
, clefPosition
– qui contrôle la position
verticale de la clef – middleCPosition
et clefOctavation
.
Une nouvelle clef apparaîtra dès lors que l’une de ces propriétés, à
l’exception de middleCPosition
, aura été modifiée.
Les exemples qui suivent illustrent les différentes possibilités de définir ces propriétés manuellement. Sur la première ligne, la position relative des notes par rapport aux clefs est préservée, ce qui n’est pas le cas pour la deuxième ligne.
{ % The default treble clef \key f \major c'1 % The standard bass clef \set Staff.clefGlyph = #"clefs.F" \set Staff.clefPosition = #2 \set Staff.middleCPosition = #6 \set Staff.middleCClefPosition = #6 \key g \major c'1 % The baritone clef \set Staff.clefGlyph = #"clefs.C" \set Staff.clefPosition = #4 \set Staff.middleCPosition = #4 \set Staff.middleCClefPosition = #4 \key f \major c'1 % The standard choral tenor clef \set Staff.clefGlyph = #"clefs.G" \set Staff.clefPosition = #-2 \set Staff.clefTransposition = #-7 \set Staff.middleCPosition = #1 \set Staff.middleCClefPosition = #1 \key f \major c'1 % A non-standard clef \set Staff.clefPosition = #0 \set Staff.clefTransposition = #0 \set Staff.middleCPosition = #-4 \set Staff.middleCClefPosition = #-4 \key g \major c'1 \break % The following clef changes do not preserve % the normal relationship between notes, key signatures % and clefs: \set Staff.clefGlyph = #"clefs.F" \set Staff.clefPosition = #2 c'1 \set Staff.clefGlyph = #"clefs.G" c'1 \set Staff.clefGlyph = #"clefs.C" c'1 \set Staff.clefTransposition = #7 c'1 \set Staff.clefTransposition = #0 \set Staff.clefPosition = #0 c'1 % Return to the normal clef: \set Staff.middleCPosition = #0 c'1 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Mise en forme des notes d’ornement
Il est possible de changer globalement la mise en forme des notes
d’ornement dans un morceau, au moyen des fonctions
add-grace-property
et remove-grace-property
.
Ici, par exemple, on ôte la définition de l’orientation des objets
Stem
pour toutes les petites notes, afin que les hampes ne soient
pas toujours orientées vers le haut, et on leur préfère des têtes en
forme de croix.
\relative c'' { \new Staff { $(remove-grace-property 'Voice 'Stem 'direction) $(add-grace-property 'Voice 'NoteHead 'style 'cross) \new Voice { \acciaccatura { f16 } g4 \grace { d16 e } f4 \appoggiatura { f,32 g a } e2 } } }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Crochets de style alternatif
Une dérogation à la propriété stencil
de l’objet Flag
permet aux croches et notes de durée inférieure d’adopter une autre
forme de crochet. Sont disponibles les variantes
modern-straight-flag
, old-straight-flag
et
flat-flag
.
testnotes = { \autoBeamOff c8 d16 c32 d64 \acciaccatura { c8 } d64 r4 } \score { \relative c' { \time 2/4 \testnotes \override Flag.stencil = #modern-straight-flag \testnotes \override Flag.stencil = #old-straight-flag \testnotes \override Flag.stencil = #flat-flag \testnotes \revert Flag.stencil \testnotes } \layout { indent = 0 \context { \Score \override NonMusicalPaperColumn.line-break-permission = ##f } } }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Utilisation de ly:grob-object
pour accéder aux grobs avec \tweak
Certains objets graphiques ne sont accessibles que par le biais d’un
callback à partir d’un autre grob
. Ils sont normalement
listés dans les « layout objects » au sein de la section
« Propriétés internes » d’une grob-interface. La fonction
ly:grob-object
permet d’accéder à ces objets.
Voici plusieurs moyens d’accéder aux objets par un callback sur
NoteHead
. D’autres biais sont naturellement possibles ;
NoteHead
a cependant l’avantage incontestable d’être utilisé
implicitement par la commande \tweak
.
La fonction display-grobs
définie ci-dessous n’est probablement
pas très utile. Elle indique toutefois qu’il est tout à fait possible
d’accéder aux objets.
Voici par exemple ce qui sera émis dans la console :
-------------------- #<Grob Accidental > #<Grob Arpeggio > #<Grob Stem >
#(define (notehead-get-accidental notehead) ;; notehead is grob (ly:grob-object notehead 'accidental-grob)) #(define (notehead-get-arpeggio notehead) ;; notehead is grob (let ((notecolumn (notehead-get-notecolumn notehead))) (ly:grob-object notecolumn 'arpeggio))) #(define (notehead-get-notecolumn notehead) ;; notehead is grob (ly:grob-parent notehead X)) #(define (notehead-get-stem notehead) ;; notehead is grob (let ((notecolumn (notehead-get-notecolumn notehead))) (ly:grob-object notecolumn 'stem))) #(define (display-grobs notehead) ;; notehead is grob (let ((accidental (notehead-get-accidental notehead)) (arpeggio (notehead-get-arpeggio notehead)) (stem (notehead-get-stem notehead))) (format (current-error-port) "~2&~a\n" (make-string 20 #\-)) (for-each (lambda (x) (format (current-error-port) "~a\n" x)) (list accidental arpeggio stem)))) \relative c' { %% display grobs for each note head: %\override NoteHead.before-line-breaking = #display-grobs <c %% or just for one: \tweak before-line-breaking #display-grobs es g>1\arpeggio }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Utilisation de PostScript pour générer des têtes de note à l’allure particulière
Lorsqu’il est impossible d’obtenir facilement une allure particulière
pour les têtes de note en recourant à la technique du \markup
,
un code PostScript peut vous tirer d’embarras. Voici comment générer
des têtes ressemblant à des parallélogrammes.
parallelogram = #(ly:make-stencil (list 'embedded-ps "gsave currentpoint translate newpath 0 0.25 moveto 1.3125 0.75 lineto 1.3125 -0.25 lineto 0 -0.75 lineto closepath fill grestore" ) (cons 0 1.3125) (cons -.75 .75)) myNoteHeads = \override NoteHead.stencil = \parallelogram normalNoteHeads = \revert NoteHead.stencil \relative c'' { \myNoteHeads g4 d' \normalNoteHeads <f, \tweak stencil \parallelogram b e>4 d }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Utilisation de \tweak
pour retoucher des objets particuliers
La commande \tweak
permet de retoucher directement n’importe
quel objet graphique. En voici quelques exemples :
\relative c' { \time 2/4 \set fingeringOrientations = #'(right) < \tweak font-size #3 c \tweak color #red d-\tweak font-size #8 -4 \tweak style #'cross g \tweak duration-log #2 a >2 }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Alignement vertical des nuances et indications textuelles
Tous les objets DynamicLineSpanner
(soufflets ou nuances
textuelles) viennent s’aligner sur une ligne de référence placée, par
rapport à la portée, à au moins la valeur de 'staff-padding
sauf
lorsque d’autres éléments de notation les en éloignent plus. Les nuances
seront centrés sur une même ligne dès lors que 'staff-padding
aura été défini à une valeur suffisante.
C’est le même principe – en combinaison avec \textLengthOn
–
qui sert à aligner les indications textuelles sur une ligne de
référence.
music = \relative c' { a'2\p b\f e4\p f\f\> g, b\p c2^\markup { \huge gorgeous } c^\markup { \huge fantastic } } { \music \break \override DynamicLineSpanner.staff-padding = #3 \textLengthOn \override TextScript.staff-padding = #1 \music }
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ > ] |
Positionnement d’une ossia et des paroles
Cet exemple illustre la manière de positionner une portée d’ossia et
des paroles à l’aide des propriétés de contexte alignBelowContext
et alignAboveContext
.
\paper { ragged-right = ##t } \relative c' << \new Staff = "1" { c4 c s2 } \new Staff = "2" { c4 c s2 } \new Staff = "3" { c4 c s2 } { \skip 2 << \lyrics { \set alignBelowContext = #"1" lyrics4 below } \new Staff \with { alignAboveContext = #"3" fontSize = #-2 \override StaffSymbol.staff-space = #(magstep -2) \remove "Time_signature_engraver" } { \tuplet 6/4 { \override TextScript.padding = #3 c8[^"ossia above" d e d e f] } } >> } >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ Paper and layout > ] |
Prolongateur commun de basse figurée
L’activation de la propriété useBassFigureExtenders
permet
d’afficher des lignes de prolongation pour les chiffres qui se répètent.
Deux chiffres prolongés sur la même durée se verront affublés d’un
unique prolongateur, verticalement centré entre eux, dès lors que la
propriété figuredBassCenterContinuations
aura elle aussi été
activée.
<< \relative c' { c8 c b b a a c16 c b b c8 c b b a a c16 c b b c8 c b b a a c c b b } \figures { \set useBassFigureExtenders = ##t <6+ 4 3>4 <6 4 3>8 r <6+ 4 3>4 <6 4 3>8 <4 3+>16 r \set figuredBassCenterContinuations = ##t <6+ 4 3>4 <6 4 3>8 r <6+ 4 3>4 <6 4 3>8 <4 3+>16 r \set figuredBassCenterContinuations = ##f <6+ 4 3>4 <6 4 3>8 r <6+ 4 3>4 <6 4 3>8 <4 3+>8 } >>
[ << Tweaks and overrides ] | [Racine][Table des matières] | [ Paper and layout >> ] |
[ < ] | [Plus haut: Tweaks and overrides ] | [ Paper and layout > ] |