Fragments del LilyPond: Expressive marks

# Expressive marks

Expressive marks

## Afegir barres, lligadures d’expressió i d’unió, etc., quan s’usen ritmes amb i sense grups de valoració especial.

La sintaxi del LilyPond pot implicar moltes col·locacions poc comunes per als parèntesis, claus, etc., que a vegades s’han d’intercalar. Per exemple, en introduir una barra manual, la clau esquerra d’apertura s’ha d’escriure després de la nota inicial i de la seva duració, no abans. De forma semblant, la clau dreta de tancament ha de seguir immediatament a la nota que es vol ubicar al final del barrat, fins i tot si aquesta nota resulta estar dins d’un grup de valoració especial. Aquest fragment de codi mostra com combinar el barrat manual, les lligadures d’expressió i d’unió i les lligadures de fraseig, amb seccions de valoració especial (tancades entre claus).

    {
      r16[ g16 \tuplet 3/2 { r16 e'8] }
      g16( a \tuplet 3/2 { b d e') }
      g8[( a \tuplet 3/2 { b d') e'] ~ }
      \time 2/4
      \tuplet 5/4 { e'32\( a b d' e' } a'4.\)
    }

## Envoltar entre parèntesis una marca expressiva o una nota d’un acord

La funció `\parenthesize` és un ajustament especial que envolta objectes entre parèntesis. EL grob associat és `ParenthesesItem`.

    \relative c' {
      c2-\parenthesize ->
      \override Parentheses.padding = #0.1
      \override Parentheses.font-size = #-4
      <d \parenthesize f a>2
    }

## Afegir marques de temps a glissandos llargs

Els temps que se salten a glissandos molt llargs s’indiquen a vegades mitjançant marques de temps, que sovint consisteixen en figures sense cap. Aquestes pliques es poden usar també per allotjar indicacions expressives intermèdies.

Si les pliques no queden ben alineades amb el glissando, podria caldre recol·locar-les lleugerament.

    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 |
    }

## Ajustar la forma de les caigudes i pujades de to

Pot caldre ajustar la propietat `shortest-duration-space` per poder ajustar la mida de les caigudes i pujades de to («falls» i «doits»).

    \relative c'' {
      \override Score.SpacingSpanner.shortest-duration-space = #4.0
      c2-\bendAfter #5
      c2-\bendAfter #-4.75
      c2-\bendAfter #8.5
      c2-\bendAfter #-6
    }

## Aligning the ends of hairpins to NoteColumn directions

The ends of hairpins may be aligned to the `LEFT`, `CENTER` or `RIGHT` of `NoteColumn` grobs by overriding the property `endpoint-alignments`, which is a pair of numbers representing the left and right ends of the hairpin. `endpoint-alignments` are expected to be directions (either -1, 0 or 1). Other values will be transformed with a warning. The right end of a hairpin terminating at a rest is not affected, always ending at the left edge of the rest.

    {
      c'2\< <c' d'>\! |
      \override Hairpin.endpoint-alignments = #'(1 . -1)
      c'2\< <c' d'>\! |
      \override Hairpin.endpoint-alignments = #`(,LEFT . ,CENTER)
      c'2\< <c' d'>\! |
    }

## Formes alternatives de la figura breu

Les figures de breu també estan disponibles amb dues línies verticals a les vores del cap en lloc d’una sola línia i la forma en estil barroc.

    \relative c'' {
      \time 4/2
      c\breve |
      \override Staff.NoteHead.style = #'altdefault
      b\breve
      \override Staff.NoteHead.style = #'baroque
      b\breve
      \revert Staff.NoteHead.style
      a\breve
    }

## Lligadures asimètriques

Es pot fer que una lligradura d’expressió sigui asimètrica per adaptar-se millor un patró asimètric de notes.

    slurNotes = { d,8( a' d f a f' d, a) }

    \relative c' {
      \stemDown
      \slurUp
      \slurNotes
      \once \override Slur.eccentricity = #3.0
      \slurNotes
    }

## Marques de respiració

Les marques de respiració estan disponibles per diversos gustos: coma (la predeterminada), ratlla curta, v baixa i “vies del tren” (cesura).

    \new Staff \relative c'' {
      \key es \major
      \time 3/4
      % this bar contains no \breathe
      << { g4 as g } \\ { es4 bes es } >> |
      % Modern notation:
      % by default, \breathe uses the rcomma, just as if saying:
      % \override BreathingSign.text =
      %   #(make-musicglyph-markup "scripts.rcomma")
      << { g4 as g } \\ { es4 \breathe bes es } >> |

      % rvarcomma and lvarcomma are variations of the default rcomma
      % and lcomma
      % N.B.: must use Staff context here, since we start a Voice below
      \override Staff.BreathingSign.text =
        \markup { \musicglyph "scripts.rvarcomma" }
      << { g4 as g } \\ { es4 \breathe bes es } >> |

      % raltcomma and laltcomma are alternative variations of the
      % default rcomma and lcomma
      \override Staff.BreathingSign.text =
        \markup { \musicglyph "scripts.raltcomma" }
      << { g4 as g } \\ { es4 \breathe bes es } >> |

      % vee
      \override BreathingSign.text =
        \markup { \musicglyph "scripts.upbow" }
      es8[ d es f g] \breathe f |

      % caesura
      \override BreathingSign.text =
        \markup { \musicglyph "scripts.caesura.curved" }
      es8[ d] \breathe es[ f g f] |
      es2 r4 \bar "||"
    }

## Regulador interromput

Per fer invisibles parts d’un regulador de crescendo, s’usa el mètode de dibuixar un rectangle blanc a sobre de la respectiva del regulador, tapant-la. El rectangle es defineix com codi de postscript dins d’un element de marcatge de text.

L’ordre de marcatge `with-dimensions` indica al LilyPond que consideri sols l’extrem inferior del rectangle quan realitzi l’espaiat d’aquest rectangle frente al regulador. La propietat `staff-padding` evita que el rectangle càpiga entre el regulador i el pentagrama.

Assegureu-vos que el regulador està a una capa més baixa que l’element de marcatge de text per traçar el rectangle a sobre del regulador.

    \relative c' {
      <<
        {
          \dynamicUp
          r2 r16 c'8.\pp r4
        }
        \\
        {
          \override DynamicLineSpanner.layer = #0
          des,2\mf\< ~
          \override TextScript.layer = #2
          \once\override TextScript.staff-padding = #6
          \once\override TextScript.vertical-skylines = #'()
          des16_\markup \with-dimensions #'(2 . 7) #'(0 . 0)
                        \with-color #white
                        \filled-box #'(2 . 7) #'(0 . 2) #0
          r8. des4 ~ des16->\sff r8.
        }
      >>
    }

## Cesura tipus "vies del tren" amb calderó

En ocasions es denota una «cesura» mitjançant una doble marca de respiració semblant a les vies d’un tren, amb un calderó a sobre. Aquest fragment de codi presenta una combinació visualment satisfactòria d’aquestes dues marques.

    \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 "|."
    }

## Centrar text a sota d’un regulador

Aquest exemple proporciona una funció per escriure un regulador amb text a sota, com “molto” o “poco”. El text afegit canvia la direcció d’acord amb la del regulador. L’objecte hairpin està alineat amb DynamicText.

L’exemple il·lustra també com modificar la manera en la qual s’imprimeix normalment un object, utilitzat codi de l’Scheme.

    \paper { tagline = ##f }

    hairpinWithCenteredText =
    #(define-music-function (text) (markup?)
      #{
        \once \override Voice.Hairpin.after-line-breaking =
          #(lambda (grob)
            (let* ((stencil (ly:hairpin::print grob))
                   (par-y (ly:grob-parent grob Y))
                   (dir (ly:grob-property par-y 'direction))
                   (staff-line-thickness
                     (ly:output-def-lookup (ly:grob-layout grob) 'line-thickness))
                   (new-stencil (ly:stencil-aligned-to
                     (ly:stencil-combine-at-edge
                       (ly:stencil-aligned-to stencil X CENTER)
                       Y dir
                       (ly:stencil-aligned-to
                         (grob-interpret-markup
                           grob
                           (make-fontsize-markup
                             (magnification->font-size
                               (+ (ly:staff-symbol-staff-space grob)
                                  (/ staff-line-thickness 2)))
                               text)) X CENTER))
                     X LEFT))
                   (staff-space (ly:output-def-lookup
                     (ly:grob-layout grob) 'staff-space))
                   (par-x (ly:grob-parent grob X))
                   (dyn-text (grob::has-interface par-x 'dynamic-text-interface))
                   (dyn-text-stencil-x-length
                     (if dyn-text
                       (interval-length
                         (ly:stencil-extent (ly:grob-property par-x 'stencil) X))
                       0))
                   (x-shift
                     (if dyn-text
                       (-
                         (+ staff-space dyn-text-stencil-x-length)
                         (* 0.5 staff-line-thickness)) 0)))

            (ly:grob-set-property! grob 'Y-offset 0)
            (ly:grob-set-property! grob 'stencil
               (ly:stencil-translate-axis
                new-stencil
                x-shift X))))
      #})

    hairpinMolto =
    \hairpinWithCenteredText \markup { \italic molto }

    hairpinMore =
    \hairpinWithCenteredText \markup { \larger moltissimo }

    \layout { ragged-right = ##f }

    \relative c' {
      \hairpinMolto
      c2\< c\f
      \hairpinMore
      c2\ppppp\< c\f
      \break
      \hairpinMolto
      c2^\< c\f
      \hairpinMore
      c2\ppppp\< c\f
    }

## Canviar el text i els estils d’objecte d’extensió per a les indicacions dinàmiques textuals

Es pot modificar el text empleat per als crescendos i decrescendos modificant les propietats de context `crescendoText` i `decrescendoText`.

L’estil de la línia d’extensió es pot canviar modificant la propietat `'style` de `DynamicTextSpanner`. El valor predeterminat és `'dashed-line` (línia discontínua), i entre d’altres valors possibles es troben `'line` (línia), `'dotted-line` (línia de punts) i `'none` (res):

    \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
    }

## Modificar l’aspecte continu d’una lligadura d’expressió a puntejat o intermitent

Es pot canviar l’aspecte de les lligadures d’expressió de contínues a puntejades o intermitents.

    \relative c' {
      c4( d e c)
      \slurDotted
      c4( d e c)
      \slurSolid
      c4( d e c)
      \slurDashed
      c4( d e c)
      \slurSolid
      c4( d e c)
    }

## Canviar el símbol de la marca de respiració

El glif de la marca de respiració es pot ajustar sobreescrivint la propietat de text de l’objecte de presentació `BreathingSign`, amb qualsevol altre text de marcatge.

    \relative c'' {
      c2
      \override BreathingSign.text =
        \markup { \musicglyph "scripts.rvarcomma" }
      \breathe
      d2
    }

## Modificar el nombre de puntets d’una nota

La quantitat de puntets d’una nota es pot modificar independentment dels puntets que s’escriuen després d’una nota.

    \relative c' {
      c4.. a16 r2 |
      \override Dots.dot-count = #4
      c4.. a16 r2 |
      \override Dots.dot-count = #0
      c4.. a16 r2 |
      \revert Dots.dot-count
      c4.. a16 r2 |
    }

## Combinar indicacions dinàmiques amb marcatges textuals

Certes indicacions dinàmiques poden portar textos (com “più forte” o “piano subito”). Es poden produir usant un bloc `\markup`.

    piuF = \markup { \italic più \dynamic f }

    \layout { ragged-right = ##f }

    \relative c'' {
      c2\f c-\piuF
    }

## Glissando contemporani

Es pot gravar un glissando contemporani sense nota final utilitzant una nota oculta i temporització de cadenza.

    \relative c'' {
      \time 3/4
      \override Glissando.style = #'zigzag
      c4 c
      \cadenzaOn
      c4\glissando
      \hideNotes
      c,,4
      \unHideNotes
      \cadenzaOff
      \bar "|"
    }

## Controlar la visibilitat dels objectes d’extensió després d’un salt de línia

La visibilitat dels objectes d’extensió que acaben a la primera nota després d’un salt de línia està controlada per la funció de crida de `after-line-breaking` `ly:spanner::kill-zero-spanned-time`.

Per als objectes com els glissandos i els reguladors, el comportament predeterminat és ocultar l’objecte d’extensió després del salt; la inhabilitació de la funció de callblack fa que l’object d’extensió trencat per l’esquerra pot mostrar-se.

De forma inversa, els objectes d’extensió que són visibles normalment, com els objectes d’extensió de text, es poden ocultar habilitant la funció de callback.

    \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
    }

## Controlar l’ordenació vertical de les inscripcions

L’orden vertical que ocupen les inscripcions gràfiques està controlat amb la propietat `'script-priority`. Quant més baix és aquest número, més a prop de la nota es col·locarà. En aquest exemple, el `TextScript` (el sostingut) té primer la prioritat més baixa, per la qual cosa se situa en la posició més baixa al primer exemple. En el segon, el semitrí (el `Script`) és el que la té més baixa, per la qual cosa se situa en la part interior. Quan dos objectes tenen la mateixa prioritat, l’ordre en el qual s’introdueixen determina quin serà el que apareix en primer lloc.

    \relative c''' {
      \once \override TextScript.script-priority = #-100
      a2^\prall^\markup { \sharp }

      \once \override Script.script-priority = #-100
      a2^\prall^\markup { \sharp }
    }

## Crear un grupet d’anticipació

La creació d’un grupet circular d’anticipació entre dues notes, on la nota inferior del grupet utilitza una alteració, requereix diverses sobreescriptures de propietats. La propietat `outside-staff-priority` es pot establir al valor `#f`, atès que en aquest cas tindria prioritat sobre la propietat `avoid-slur property`. Canviant les fraccions `2/3` i `1/3` pot ajustar-se la posició horitzontal.

    \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)
    }

## Crear arpegis entre notes de veus diferents

Es pot dibuixar un símbol d’arpegi entre notes de diferents veus que estan sobre el mateix pentagrama si el gravador `Span_arpeggio_engraver` es trasllada al context de `Staff`:

    \new Staff \with {
      \consists "Span_arpeggio_engraver"
    }
    \relative c' {
      \set Staff.connectArpeggios = ##t
      <<
        { <e' g>4\arpeggio <d f> <d f>2 }
        \\
        { <d, f>2\arpeggio <g b>2 }
      >>
    }

## Crear arpegis que es creuen entre pentagrames dins d’un sistema de piano

Dins d’un `PianoStaff`, és possible fer que un arpegi creuï entre els pentagrames ajustant la propietat `PianoStaff.connectArpeggios`.

    \new PianoStaff \relative c'' <<
      \set PianoStaff.connectArpeggios = ##t
      \new Staff {
        <c e g c>4\arpeggio
        <g c e g>4\arpeggio
        <e g c e>4\arpeggio
        <c e g c>4\arpeggio
      }
      \new Staff {
        \clef bass
        \repeat unfold 4 {
          <c,, e g c>4\arpeggio
        }
      }
    >>

## Creació d’arpegis que es creuen entre pentagrames dins d’altres contextos

Es poden crear arpegis que es creuen entre pentagrames dins de contextos diferents a `GrandStaff`, `PianoStaff` i `Span_arpeggio_engraver` en el context de `Score`.

    \score {
      \new ChoirStaff {
        \set Score.connectArpeggios = ##t
        <<
          \new Voice \relative c' {
            <c e>2\arpeggio
            <d f>2\arpeggio
            <c e>1\arpeggio
          }
          \new Voice \relative c {
            \clef bass
            <c g'>2\arpeggio
            <b g'>2\arpeggio
            <c g'>1\arpeggio
          }
        >>
      }
      \layout {
        \context {
          \Score
          \consists "Span_arpeggio_engraver"
        }
      }
    }

## Crear digitacions de dues xifres

És possible crear digitacions amb el nombre més gran de 5.

    \relative c' {
      c1-10
      c1-50
      c1-36
      c1-29
    }

## Crear indicacions dinàmiques "vertaderes" entre parèntesis

Tot i que la manera més fàcil d’afegir parèntesis a una indicació de dinàmica és utilitzar un bloc `\markup`, aquest mètode té un inconvenient: els objectes que es creen es comportaran com elements de marcatge de text i no com indicacions dinàmiques.

No obstant, és possible crear un objecte utilitzant el codi de l’Scheme equivalent (com s’explica a la Referència de la notació), en combinació amb la funció `make-dynamic-script`. D’aquesta forma l’element de marcatge es tractarà com una indicació dinàmica, i per tant seguirà sent compatible amb ordre com ara `\dynamicUp` o `\dynamicDown`.

    paren =
    #(define-event-function (dyn) (ly:event?)
       (make-dynamic-script
        #{ \markup \concat {
             \normal-text \italic \fontsize #2 (
    	 \pad-x #0.2 #(ly:music-property dyn 'text)
    	 \normal-text \italic \fontsize #2 )
           }
        #}))

    \relative c'' {
      c4\paren\f c c \dynamicUp c\paren\p
    }

## Fer lligadures entre veus diferents

En determinades situacions cal crear lligadures d’expressió entre notes que estan a veus diferents.

La solució és afegir notes invisible a una de les veus utilitzant `\hideNotes`.

Aquest exemple és el compàs 235 de la Chacona de la segona Partita per a violí sol, BMW 1004, de Bach.

    \relative c' {
      <<
        {
          d16( a') s a s a[ s a] s a[ s a]
        }
        \\
        {
          \slurUp
          bes,16[ s e](
          \hideNotes a)
          \unHideNotes f[(
          \hideNotes a)
          \unHideNotes fis](
          \hideNotes a)
          \unHideNotes g[(
          \hideNotes a)
          \unHideNotes gis](
          \hideNotes a)
        }
      >>
    }

## Crear elements de extensió textuals

Les ordres `\startTextSpan` i `\stopTextSpan` permeten la creació d’elements d’extensió textuals tan fàcilment com indicacions de pedal o octavacions. Sobreescrivim certes propietats de l’object `TextSpanner` per modificar la seva sortida.

    \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
    }

## Objecte personalitzat d’extensió de text de matisos dinàmics, postfix

Funcions postfix per a la creació d’objectes d’extensió de text personalitzats. Els objectes d’extensió han de començar en la primera nota del compàs. Cal utilitzar -\mycresc, en cas contrari el començament de l’objecte d’extensió s’assignarà a la nota següent.

    % 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
    }

## Objectes extensors de text postfix per a dinàmica

Els objectes d’extensió \cresc, \dim i \decresc ara es poden redefinir com a operadors postfix i produir un sols objecte d’extensió de text. La definició d’extensores personalitzats també és fàcil. Es poden barrejar amb facilitat els crescendi textuals i en forma de reguladors. \< i \> produeixen reguladors gràfics de forma predeterminada, \cresc etc. produeixen elements extensors de text de forma predeterminada.

    % 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\!
    }

## Glissando per sota d’una objecte gràfic

Els objectes gràfics de columna de nota (els grobs `NoteColumn`) poder ser sobrepassats pels glissandos.

    \relative c' {
      a2 \glissando
      \once \override NoteColumn.glissando-skip = ##t
      f''4 d,
    }

## Reguladors amb diferents estils de línia

Els reguladors poden imprimir-se en qualsevol dels estils de `line-interface`: discontinu, puntejat, línia, tri o zig-zag.

    \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\!
    }

## Ocultar la línia d’extensió de les expressions textuals de dinàmica

Els canvis de dinàmica amb estil de text (com cresc. i dim.) es graven amb una línia intermitent que mostra el seu abast. Aquesta línia es pot suprimir de la manera següent:

    \relative c'' {
      \override DynamicTextSpanner.style = #'none
      \crescTextCresc
      c1\< | d | b | c\!
    }

## Alinear horitzontalment indicacions dinàmiques personalitzades (per exemple "sempre pp""piu f""subito p")

Algunes expressions de matís dinàmic porten text addicional, com "sempre pp". Considerant que els matisos solen anar centrats sota la nota, el \p s’imprimiria molt després de la nota a la qual s’aplica el matís.

Per alinear correctament el "sempre pp" en sentit horitzontal, de manera que s’alineï com si estigués solament el \pp, hi h a diversos enfocaments:

* Senzillament usar `\once\override DynamicText.X-offset = #-9.2` abans de la nota que porta el matís, per desplaçar-lo manualment a la posició correcta. Inconvenient: cal fer-ho manualment cada cop que usem aquesta indicació dinàmica.

* Afegir una mica de farciment (`#:hspace 7.1`) dins de la definició de la nostra indicació dinàmica personalitzada, de forma que després que el LilyPond l’hagi centrat, ja estigui alineada correctament. Inconvenient: el farciment realment ocupa aquest espai i no permet que es gravi cap altre element de marcatge o matís dinàmic en aquesta posició.

* Desplaçar la inscripció dinàmica `\once\override ... .X-offset = ..`. Inconvenient: ¡cal `\once\override` per a cada una de les invocacions!

* Fixar les dimensions del text addicional a zero (usant `#:with-dimensions '(0 . 0) '(0 . 0)`). Inconvenient: per al LilyPond "sempre" no té dimensions, per la qual cosa podria gravar altres elements en el seu mateix lloc i produir col·lisions (que no serien advertides pel mecanisme de detecció de col·lisions). Així mateix, aparentment hi ha algun espai, i per tant no és exactament la mateixa alineació que sense el text addicional.

* Afegir un desplaçament explicit directament dins de la funció de l’Scheme que produeix l’element dynamic-script.

* Fixar una alineació explícita dins del dynamic-script. De forma predeterminada, això no tindria cap efecte, a no ser que fixéssim un valor per a X-offset. Inconvenient: hem de donar un valor a `DynamicText.X-offset` que s’aplicaria a tots els textos de dinàmica. A més a més, s’alinea amb l’extrem dret del text addicional, no amb el centre del 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 }

## Inserir una cesura

Les marques de cesura es poden crear sobreescrivint la propietat `'text` de l’objecte `BreathingSign`. També està disponible una marca de cesura corba.

    \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
    }

## Lligaduras “Laissez vibrer”

Les lligadures “Laissez vibrer” (deixar vibrar) tenen una mida fixa. Es pot ajustar el seu format usant `'tie-configuration`.

    \relative c' {
      <c e g>4\laissezVibrer r <c f g>\laissezVibrer r
      <c d f g>4\laissezVibrer r <c d f g>4.\laissezVibrer r8

      <c d e f>4\laissezVibrer r
      \override LaissezVibrerTieColumn.tie-configuration
         = #`((-7 . ,DOWN)
              (-5 . ,DOWN)
              (-3 . ,UP)
              (-1 . ,UP))
      <c d e f>4\laissezVibrer r
    }

## Puntes de fletxa per a les línies

Es poden aplicar puntes de fletxa als elements d’extensió de text i de línia (com el Glissando).

    \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
    }

## Fer lligadures d’expressió amb estructura complexa de discontinuïtat

Les lligadures d’expressió es poden construir amb patrons de discontinuïtat complexos mitjançant la definició de la propietat `dash-definition`. `dash-definition` és una llista de paràmetres que defineixen el comportament de discontinuïtat d’un segment de la lligadura d’expressió.

La lligadura es defineix en termes del paràmetre de bezier t el rang del qual va de 0 a l’esquerra de la lligadura fins a 1 a l’extrem dret de la lligadura. cada `element de discontinuïtat` és una llista `(t-inici t-final fracció-discontinuïtat període-discontinuitat)`. La regió de la lligadura des de `t-inici` fins a `t-final` tindrà una fracció `fracció-discontinuitat` de cada `període-discontinuïtat` de color negre. `període-discontinuïtat` es defineix en termes d’espais de pentagrama. `fracció-discontinuïtat` s’estableix al valor d’1 per a una lligadura contïnua.

    \relative c' {
      \once \override
        Slur.dash-definition = #'((0 0.3 0.1 0.75)
                                    (0.3 0.6 1 1)
                                    (0.65 1.0 0.4 0.75))
      c4( d e f)
      \once \override
        Slur.dash-definition = #'((0 0.25 1 1)
                                    (0.3 0.7 0.4 0.75)
                                    (0.75 1.0 1 1))
      c4( d e f)
    }

## Modificació dels valors predeterminats per a la notació abreviada de les articulacions

Les abreviatures es troben definides dins del fitxer ‘`ly/script-init.ly`’, on les variables`dashHat`, `dashPlus`, `dashDash`, `dashBar`, `dashLarger`, `dashDot` i `dashUnderscore` reben valors predeterminats. Es poden modificar aquests valors predeterminats per a les abreviatures. Per exemple, per associar l’abraviatura `-+` (`dashPlus`) amb el símbol de semitrí en cmptes del símbol predeterminat +, assigneu el valor `trill` a la variable `dashPlus`:

    \relative c'' { c1-+ }

    dashPlus = \trill

    \relative c'' { c1-+ }

## Desplaçament de les lligadures d’expressió verticalment

Es pot ajustar la posició vertical d’una lligadura d’expressió utilitzant la propietat `positions` de l’objecte `Slur`. La propietat de dos paràmetres, on el primer es refereix a l’extrem esquerre de la lligadura i el segon al dret. Els valors dels paràmetres no s’utilitzen per part del LilyPond per produir un desplaçament exacte de la lligadura: més bé selecciona la col·locació que té un aspecte millor, tenint en compte els valors dels paràmetres. Els valors positius desplacen la lligadura cap amunt, i són adequats a notes que tenen les pliques cap avall. Els valors negatius desplacen les lligadures baixes encara més cap avall.

    \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)
    }

## Moving the ends of hairpins

The ends of hairpins may be offset by setting the `shorten-pair` property of the `Hairpin` object. Positive values move endpoints to the right, negative to the left. Unlike the `minimum-length` property, this property only affects the appearance of the hairpin; it does not adjust horizontal spacing (including the position of bounding dynamics). This method is thus suitable for fine-tuning a hairpin within its allotted space.

    {
      c'1~\<
      c'2~ c'\!
      \once \override Hairpin.shorten-pair = #'(2 . 2)
      c'1~\<
      c'2~ c'\!
      \once \override Hairpin.shorten-pair = #'(-2 . -2)
      c'1~\<
      c'2~ c'\!
      c'1~\p-\tweak shorten-pair #'(2 . 0)\<
      c'2~ c'\ffff
    }

## Posicionar símbols d’arpegi

Si cal fer més llargs o més curts un símbol d’arpegi, es pot modificar independentment els extrems superior i inferior.

    \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
    }

## Situar els elements de marcatge de text por dins de les lligadures

Els elements de marcatge de text han de tenir la propietat `outside-staff-priority` establerta al valor fals perquè s’imprimeixin per dins de les lligadures d’expressió.

    \relative c'' {
      \override TextScript.avoid-slur = #'inside
      \override TextScript.outside-staff-priority = ##f
      c2(^\markup { \halign #-10 \natural } d4.) c8
    }

## Impressió de reguladors en diversos estils

Els reguladors es poden crear en una àmplia varietat d’estils.

    \relative c'' {
      \override Hairpin.stencil = #flared-hairpin
      a4\< a a a\f
      a4\p\< a a a\ff
      a4\sfz\< a a a\!
      \override Hairpin.stencil = #constante-hairpin
      a4\< a a a\f
      a4\p\< a a a\ff
      a4\sfz\< a a a\!
      \override Hairpin.stencil = #flared-hairpin
      a4\> a a a\f
      a4\p\> a a a\ff
      a4\sfz\> a a a\!
      \override Hairpin.stencil = #constante-hairpin
      a4\> a a a\f
      a4\p\> a a a\ff
      a4\sfz\> a a a\!
    }

## Impressió de reguladors utilitzant la notació «al niente»

Es poden imprimir reguladores amb un cercle en la punta (notació «al niente») establint la propietat `circled-tip` de l’objecte `Hairpin` al valor `#t`.

    \relative c'' {
      \override Hairpin.circled-tip = ##t
      c2\< c\!
      c4\> c\< c2\!
    }

## Impressió d’indicacions de metrònom i lletres d’assaig a sota del pentagrama

De forma predeterminada, les indicacions de metrònom i les lletres d’assaig s’imprimeixen a sobre del pentagrama. Per col·locar-les a sota del pentagrama, simplement ajustem adequadament la propietat `direction` de `MetronomeMark` o de `RehearsalMark`.

    \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
    }

## Establir el comportament dels reguladors a les barres de compàs

Si la nota que acaba un regulador cau sobre la primera part d’un compàs, el regulador s’atura en la línia divisòria immediatament precedent. Es pot controlar aquest comportament sobreescrivint la propietat `'to-barline`.

    \relative c'' {
      e4\< e2.
      e1\!
      \override Hairpin.to-barline = ##f
      e4\< e2.
      e1\!
    }

## Ajustament de la longitud mínima dels reguladors

Si els reguladors són massa curts, es poden allargar modificant la propietat `minimum-length` de l’objecte `Hairpin`.

    <<
      {
        \after 4 \< \after 2 \> \after 2. \! f'1
        \override Hairpin.minimum-length = #8
        \after 4 \< \after 2 \> \after 2. \! f'1
      }
      {
        \repeat unfold 8 c'4
      }
    >>

## Impressió de la mateixa articulació a sobre i a sota de la mateixa nota o acord

De forma predeterminada, el LilyPond no permet posar la mateixa articulació (per exemple un accent, un calderó, un cercle d’harmònic, etc.) a sobre i a sota de la nota. Per exemple, c4_\fermata^\fermata imprimeix sols el calderó inferior. El calderó superior senzillament s’ignora. No obstant, es poden adjuntar inscripcions (de igual forma que les digitacions) dins d’un acord, soca que significa que és possible tenir tantes articulacions com es vulgui. Aquest enfocament té l’avantatge que ignora la plica i posiciona l’articulació de forma relativa al cap de la nota. Pot veure’s això en el cas dels flageolets (indicacions d’harmònic)) que apareixen en el fragment de codi. Per recrear el comportament de les inscripcions fora de l’acord, es requereix ’add-stem-support. D’aquesta manera la solució consisteix en escriure la nota com un acord i afegir les articulacions dins dels parèntesis en angle <...>. La direcció sempre serà cap a dalt, però podem retocar això per mitjà d’una ordre \tweak: `<c-\tweak direcció #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
    }

## Pizzicato “snap” o pizzicato de Bartók

El “snap-pizzicato” (pizzicato de pessigada, conegut també com “pizzicato de Bartók”) és un “pizzicato fort en el qual la corda es polsa verticalment pessigant-la i fent que reboti contra el diapasó de l’instrument” (Wikipedia). Es doneta mitjançant un cercle com una línia vertical que surt del centre del cercla cap amunt.

    \relative c' {
      c4\snappizzicato
      <c' e g>4\snappizzicato
      <c' e g>4^\snappizzicato
      <c, e g>4_\snappizzicato
    }

## Usar una ratlla curta com a símbol de respiració

La música vocal i de vent usa amb freqüència una ratlla curta com a signe de respiració. Això indica una respiració que treu una mica de temps a la nota anterior enlloc de produir una pausa curta, cosa que s’indica amb la marca de respiració en forma de coma. La marca es pot moure lleugerament cap a dalt per allunyar-la del pentagrama.

    \relative c'' {
      c2
      \breathe
      d2
      \override BreathingSign.Y-offset = #2.6
      \override BreathingSign.text =
        \markup { \musicglyph "scripts.tickmark" }
      c2
      \breathe
      d2
    }

## Ús de arpeggioBracket per fer més visible un divisi

El corxet d’arpegis `arpeggioBracket` es pot usar per indicar la divisió de veus quan no hi ha pliques que puguin oferir aquesta informació. Se sol trobar a la múśica coral.

    \include "english.ly"

    \score {
      \relative c'' {
        \key a \major
        \time 2/2
        <<
          \new Voice = "upper"
          <<
            { \voiceOne \arpeggioBracket
              a2( b2
              <b d>1\arpeggio)
              <cs e>\arpeggio ~
              <cs e>4
            }
            \addlyrics { \lyricmode { A -- men. } }
          >>
          \new Voice = "lower"
          { \voiceTwo
            a1 ~
            a
            a ~
            a4 \bar "|."
          }
        >>
      }
      \layout { ragged-right = ##t }
    }

## Utilitzar lligadures dobles per acords legato

Alguns compositors escriuen dues lligadures quan volen acords legato. Això es pot aconseguir establint `doubleSlurs`.

    \relative c' {
      \set doubleSlurs = ##t
      <c e>4( <d f> <c e> <d f>)
    }

## Ús de la propietat whiteout

Es pot imprimir qualsevol objecte gràfic sobre un fons blanc per ocultar part dels objectes que estan a sota. Això pot ser útil per millorar l’aspecte de les col·lisions en situaciones complexes quan no es pràctic tornar a col·locar els objectes. Cal establir explícitament la propietat de capa (`layer`) per controlar quins objectes resulten ocultats pel fons blanc.

En aquest exemple, la col·lisió de la lligadura d’unió amb la indicació de compàs resulta millorada ocultant la part de la lligadura que creua la indicació de compàs mitjançant l’establiment de la propietat `whiteout` de `TimeSignature`. per fer això, es mou `TimeSignature` a una capa per sobre de `Tie`, que es deixa a la capa predeterminada d’1, i `StaffSymbol` es mou a una capa per sobre de `TimeSignature` de manera que no resulti ocultada.

    {
      \override Score.StaffSymbol.layer = #4
      \override Staff.TimeSignature.layer = #3
      b'2 b'~
      \once \override Staff.TimeSignature.whiteout = ##t
      \time 3/4
      b' r4
    }

## Línia vertical com una articulació barroca

Aquesta línia curta vertical a sobre de la nota és d’ús comú en la música barroca. El seu significat varia, però en general indica notes que s’han de tocar amb més “pes”. L’exemple següent mostra com aconseguir aquesta notació.

    upline =
    \tweak stencil
      #(lambda (grob)
        (grob-interpret-markup grob #{ \markup \draw-line #'(0 . 1) #}))
      \stopped

    \relative c' {
      a'4^\upline a( c d')_\upline
    }

## Alinear verticalment expressions dinàmiques que abasten diverses notes

Les expressions dinàmiques que es comencen, acaben o es produeixen a la mateixa nota, s’alineen verticalment. Per assegurar que les expressions dinàmiques s’alineen quan no es produeixen sobre la mateixa nota, incrementeu la propietat `staff-padding` de l’objecte `DynamicLineSpanner`.

    \relative c' {
      \override DynamicLineSpanner.staff-padding = #4
      c2\p f\mf
      g2\< b4\> c\!
    }

#### LilyPond — Fragments v2.24.4 (branca estable).