Fragments del LilyPond: Tweaks and overrides

# Tweaks and overrides

Changing defaults

Tweaking output

## Afegir una indicació d’octava alta a una sola veu

Si teniu més d’una veu al mateix pentagrama, el canvi d’octavació d’una veu transportarà la posició de les notes en totes les veus mentre duri la clau de l’octava. Si l’octavació es vol aplicar sols a una veu, s’han d’ajustar explícitament la middleCPosition i la clau d’octava. En aquest fragment de codi el valor de middleCPosition per a la clau de Fa és normalment 6, sis posicions per sobre de la línia del Do central, de manera que en la porció de 8va el valor de middleCPosition és encara 7 posicions (una octava) més alta.

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

## Afegir enllaços als objectes

Per afegir un enllaç al segell d’un objecte gràfic, podem usar `add-link` tal i com es defineix aquí. Funciona amb `\override` i amb `\tweak`. Inconvenient: `point-and-click` (apuntar i clicar) quedarà obstaculitzat pels objectes gràfics enllaçats.

Limitació: funciona sols per a PDF.

Els objectes enllaçats s’acoloreixen amb una ordre a part.

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

## Adding markups in a tablature

By default markups does not show in a tablature.

To make them appear, simply use the command `\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)
        }
      }
    }

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

## Ajustament d’espaiat de les notes d’adorn

Es poden ajustar la separació entre les notes d’adorn utilitzant la propietat `spacing-increment` de `Score.GraceSpacing`.

    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
    }

## Ajustament de l’espaiat vertical de la lletra

Aquest fragment de codi mostra com situar la línia de base de la lletra més a prop del pentagrama.

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

## Alterar la longitud de les pliques unides per una barra

Es pot variar la longitud de les pliques de les figures unides per una barra mitjançant la sobreescriptura de la propietat `beamed-lengths` dels detalls (`details`) de l’objecte `Stem`. Si s’utilitza un sol valor com argument, la longitud s’aplica a totes les pliques. Si s’usen diversos arguments, el primer s’aplica a les corxeres, el segon a les semicorxeres, i així successivament. L’últim argument també s’aplica a totes les figures que són més curtes que la longitud de la figura de l’últim argument. També es poden usar arguments no enters.

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

## Numeració de compassos alternativa

Es poden seleccionar dos mètodes alternatius per a la numeració de compassos, especials quan hi ha repeticions.

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

## Claus d’anàlisis a sobre del pentagrama

De forma predeterminada s’afegeixen claus d’anàlisis senzills a sota del pentagrama. L’exemple següent mostra una manera de col·locar-los a sobre.

    \layout {
      \context {
        \Voice
        \consists "Horizontal_bracket_engraver"
      }
    }

    \relative c'' {
      \once \override HorizontalBracket.direction = #UP
      c2\startGroup
      d2\stopGroup
    }

## Analysis brackets with labels

Text markup may be added to analysis brackets through the `text` property of the `HorizontalBracketText` grob. Adding different texts to brackets beginning at the same time requires the `\tweak` command.

Bracket text will be parenthesized after a line break.

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

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

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

## Modificar la mida d’una nota solta d’una acord

Es poden modificar notes individuals d’un acord amb l’ordre `\tweak`, alterant la propietat `font-size`.

Dins d’un acord (entre angles simples `< >`), abans de la nota que volem alterar, situem l’ordre `\tweak` seguida per `#'font-size` i definim la mida adequada com `#-2` (un cap petit).

    \relative c' {
      <\tweak font-size #+2 c e g c
       \tweak font-size #-2 e>1
       ^\markup { A tiny e }_\markup { A big c }
    }

## Changing beam thickness and spacing

To make beams thicker or thinner alter the `Beam.beam-thickness` property. To adjust the spacing between beams alter the `Beam.length-fraction` property.

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

## Canviar la forma dels silencis multicompàs

Si hi ha deu compassos de silenci o menys, s’imprimeix en el pentagrama una sèrie de silencis de breu i longa (coneguts en alemany com “Kirchenpausen”, «silencis eclesiàstics»); en cas contrari es mostra una barra normal. Aquest nombre predeterminat de deu es pot canviar sobreescrivint la propietat `expand-limit`:

    \relative c'' {
      \compressMMRests {
        R1*2 | R1*5 | R1*9
        \override MultiMeasureRest.expand-limit = #3
        R1*2 | R1*5 | R1*9
      }
    }

## Modificació de propietats per a objetes gràfics individuals

L’ordre `\applyOutput` fa possible l’ajustament fi de qualsevol objecte de presentació, en qualsevol context. Requereix una funció de l’Scheme amb tres 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
    }

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

## Canviar la família de tipus de lletra predeterminada per al text

Les famílies de tipus de lletra per al text es poden sobreescriure amb `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 }
        }
      }
    }

## Modificar la mida de la pauta

Tot i que la manera més senzilla de redimensionar els pentagrames és usar `#(set-global-staff-size xx)`, la mida d’una pauta individual es pot canviar escalant les propietats de `'staff-space` i de `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
      }
    >>

## Canviar el tempo sense indicació metronòmica

Per canviar el tempo a la sortida MIDI sense imprimir res, fem invisible la indicació metronòmica:

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

## Modificar el text de las indicacions de pedal

Es pot usar `Staff.pedalSustainStrings` per fixar el text de les indicacions de pisar pedal i aixecar pedal. Observeu que les úniques cadenes vàlides són les que estan a la llista de glifs de pedal: els valors que apareixen en aquest fragment de codi són una relació exhaustiva.

    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
    }

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

## Control de la visibilitat dels corxets de grup especial

El comportament predeterminat de la visibilitat dels corxets de grup de valoració especial és imprimir el corxet a no ser que hi hagi una barra de la mateixa longitud que el grup especial. Per controlas la visibilitat dels corxets de grup, establiu la propietat `'bracket-visibility` a `#t` (sempre imprimir el corxet). `#f` (no imprimir-lo mai) o `#'if-no-beam` (imprimir el corxet sols si no hi ha barra).

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

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

## Creació d’armadures personalitzades

El LilyPond accepta armadures personalitzades. En aquest exemple, es mostra l’armadura de re menor amb una rang estès de bemolls.

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

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

## Cross-staff chords - beaming problems workaround

Sometimes it is better to use stems from the upper staff for creating cross-staff chords, because no problems with automatic beam collision avoidance then arise. If the stems from the lower staff were used in the following example, it would be necessary to change the automatic beam collision avoidance settings so that it doesn’t detect collisions between staves using `\override Staff.Beam.collision-voice-only = ##t`

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

## Pliques de pentagrama creuat

Aquest fragment de codi mostra l’ús del gravador `Span_stem_engraver` i de `\crossStaff` per connectar automàticament pliques d’un pentagrama a un altre. No cal especificar la longitud de la plica perquè la distància variable entre els caps de les notes i els pentagrames es calcula automàticament.

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

## Custos

Es poden gravar «custos» en diferents estils.

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

## Personalitzar els diagrames de posicions

Es poden establir les propietats dels diagrames de posicions d’acords per mitjà de `'fret-diagram-details`. Per als diagrames de posicions de FretBoard, s’apliquen els overrides (sobreescriptures) a l’objecte `FretBoards.FretBoard`. Com `Voice`, `FretBoards` és un context del nivell inferior, i per tant es pot ometre el seu nom a la sobreescriptura de propietats.

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

## Personalitzar diagrames de posicions de marcatge

Es poden establir les propietats dels diagrames de posicions a través de `'fret-diagram-details`. Per als diagrames de posicions de marcatge, es poden aplicar overrides (sobreescriptures) a l’objecte `Voice.TextScript` o directament a l’element de marcatge.

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

## Mostrar claudàtor o clau en grups d’un sol pentagrama

Si hi ha un sols pentagrama en un dels tipus de sistema `ChoirStaff` o `StaffGroup`, el comportament predeterminat és que no s’imprimeixi el claudàtor a la barra inicial. Això es pot canviar sobreescrivint `collapse-height` per fixar el seu valor de manera que sigui menor que el nombre de línies a la pauta.

Observeu que en contextos com `PianoStaff` i `GrandStaff` en els quals els sistemes comencen amb una clau en comptes d’un claudàtor, s’ha d’establir el valor d’una propietat diferent, com es veu al segon sistema 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
        }
      >>
    }

## Imprimir l’arbre genealògic d’un grob

En treballar amb les crides d’un grob, pot ser de molta utilitat entendre l’arbre genealògic d’un grob. La major part dels grobs tenen pares que influeixen en el posicionament del grob. Els pares X i Y influeixen en les posisions horitzontal i vertical del grob, respectivament. A més, cada pare pot tenir al seu cop pares.

Desafortunadament, hi ha diversos aspectes de la geneaologia d’un grob que pot portar a confusió:

* Els tipus de pare que té un grob poden dependre del context.

* Per a certs grobs, els pares X i Y són el mateix.

* Un "ancestre" concret pot estar relacionat amb un grob de més d’una manera.

* El concepte de "generacions" és enganyós.

Por exemple, el grob `System` pot ser tant un pare (sobre la vorfa Y) com un avi (dues vegades a la vora X) d’un grob `VerticalAlignment`.

Aquest macro imprimeix, en la consola, una representació textual de la genealogia d’un grob.

Quan es crida d’aquesta forma:

`{ \once \override NoteHead.before-line-breaking = #display-ancestry c }`

Es general la sortida següent:

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

## Harmònics amb puntet

Els harmònics artificials que usen l’ordre `\harmonic` no tenen puntet. Per sobreescriure aquest comportament, fixeu la propietat de context `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.
    }

## Rodejar els objectes gràfics amb rectangles

Es pot sobreescriure la funció `print-function` per traçar un rectangle al voltant d’un objecte gràfic arbitrari.

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

## Rodejar diversos objectes amb una circumferència

L’ordre de marcatge `\circle` traça circumferències al voltant de diversos objectes, per exemple les indicacions de digitació. Per a d’altres objectes es poden requerir ajustament específics: aquest exemple mostra dues estratègies per a lletres d’assaig i els números de compàs.

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

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

## Extending a TrillSpanner

For `TrillSpanner`, the `minimum-length` property becomes effective only if the `set-spacing-rods` procedure is called explicitly.

To do this, the `springs-and-rods` property should be set to `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)
    }

## Estendre glissandos sobre repeticions

Es pot simular un glissando que s’estén fins a l’interior de diversos blocs `\alternative` de primera i segona vegada mitjançant l’addició d’una nota d’adorn oculta amb un glissando al començament de cada bloc `\alternative`. La nota d’adorn ha d’estar a la mateixa alçada que la nota que dona inici al primer glissando., Això s’implementa aquí amb una funció musical que agafa com a argument l’altura de la nota d’adorn.

Observeu que a la música polifònica la nota d’adorn ha de coincidir amb les notes d’adorn corresponents en totes les altres veus.

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

## Ajustament fi de les línies de pedal

Es pot alterar l’aspecte de les línies de pedal de diverses formes.

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

## Flat Ties

The function takes the default `Tie.stencil` as an argument, calculating the result relying on the extents of this default.

Further tweaking is possible by overriding `Tie.details.height-limit` or with `\shape`. It’s also possible to change the custom-definition on the fly.

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

## Force a cancellation natural before accidentals

The following example shows how to force a natural sign before an accidental.

    \relative c' {
      \key es \major
      bes c des
      \tweak Accidental.restore-first ##t
      eis
    }

## Forçar el desplaçament horitzontal de les notes

Quan el motor de gravat no és capaç de tot, es pot usar la sintaxi següent per sobreescriure les decisions de tipografia. Les unitats de mesura que s’usen aquí són espais de pentagrama.

    \relative c' <<
      {
        <d g>2 <d g>
      }
      \\
      {
        <b f'>2
        \once \override NoteColumn.force-hshift = #1.7
        <b f'>2
      }
    >>

## Diagrames de posicions d’acord, explicats i desenvolupats

Aquest fragment de codi presenta moltes possibilitat per obtenir diagrames de posicions d’acord i com ajustar-los.

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

## Generar claudàtors personalitzats

La propietat `stencil` del grob `Flag` (l’objecte gràfic claudàtor) es pot fixar a un funció de l’Scheme personalitzat que genera el glif del claudàtor.

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

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

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

## Com canviar la posició d’un diagrama de posicions

Si volem moure un diagrama de posicions d’acord, per exemple, per evitar una col·lisió, o situar-lo entre dues notes, tenim diverses possibilitats:

1) modificar els valors de farciment #’padding o del desplaçament addicional #’extra-offset (como es mostra en el primer exemple)

2) podem afegir una veu invisible i adjuntar els diagrames de posicions a les notes invisibles d’aquesta veu (com es veu en el segon exemple).

Si hem de moure el diagrama segons una posició rítmica dins del compàs (a l’exemple, la tercera part del compàs) és millor el segon exemple, perquè el diagrama s’alinea amb la tercera pulsació per si sol

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

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

## Mantenir la mida del símbol en els canvis de clau

Quan es produeix un canvi de clau, el símbol de clau s’imprimeix a una mida més petita que la clau inicial. Això es pot ajustar amb `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
    }

## 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 invisible un objecte amb la propietat ’transparent

Si s’ajusta la propietat `transparent` d’un objecte, s’imprimeix en “tinta invisible”: l’objecte no s’imprimeix però es retenen tots els seus altres comportaments. L’objecte encara ocupa espai, participa en les col·lisions i se li poden afegir lligadures d’expressió, lligadures d’unió i barres de corxera.

Aquest fragment de codi mostra com connectar diferents veus usant lligadures d’únió. Normalment les lligadures d’unió sols connecten dues notes que estiguin a la mateixa veu. Mitjançant la introducció d’una lligadura en una veu diferent i pintant de color blanc la primera plica cap a amunt dins d’aquesta veu, la lligadura sembla creuar d’una veu a l’altra.

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

## Making glissandi breakable

Si s’ajusta la propietat `breakable` al valor `#t` en combinació amb `after-line-breaking`, podem fer que un glissando es divideixi en el salt de línia:

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

## Control manual de les posicions de les barres

Es poden controlar manualment les posicions de les barres de corxera sobreescrivint el valor del paràmetre `positions` de l’objecte gràfic `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
    }

## Measure-centered bar numbers

For film scores, a common convention is to center bar numbers within their measure. This is achieved through setting the `centerBarNumbers` context property to true. When this is used, the type of the bar number grobs is `CenteredBarNumber` rather than `BarNumber`.

This example demonstrates a number of settings: the centered bar numbers are boxed and placed below the staves.

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

## Disposició Mensurstriche (línies divisòries entre pentagrames)

La disposició «mensurstriche» en els quals les línies divisòries no estan dibuixades sobre els pentagrames, sinó entre ells, es pot aconseguir amb un `StaffGroup` en comptes d’un `ChoirStaff`. La línia divisòria sobre els pentagrames s’esborra usant `\hide`.

    \layout {
      \context {
        \Staff
        measureBarType = "-span|"
      }
    }

    music = \fixed c'' {
      c1
      d2 \section e2
      f1 \fine
    }

    \new StaffGroup <<
      \new Staff \music
      \new Staff \music
    >>

## Modifying the Ottava spanner slope

It is possible to change the slope of the Ottava spanner.

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

## Desplaçament de les notes amb puntet en polifonia

Quan una nota amb puntet a la veu superior es mou per evitar la col·lisió amb una nota de una altra veu, el comportament predeterminat és desplaçar la nota superior a la dreta. Es pot canviar usant la propietat `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 }
    >>

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

## Niuat de grups de pentagrames

Es pot utilitzar la propietat `systemStartDelimiterHierarchy` per crear grups de pentagrames niuats de forma més complexa. L’ordre `\set StaffGroup.systemStartDelimiterHierarchy` pren una llista alfabètic del nombre de pentagrames produïts. Es pot proporcionar abans de cada pentagrama un delimitador de començament del sistema. Es pot envoltar entre corxets i admetre tants pentagrames com envoltin els corxets. Es poden ometre els elements de la llista, però el primer corxet sempre abasta tots els pentagrames. Les possibilitat són `SystemStartBar`, `SystemStartBracket`, `SystemStartBrace` `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 }
    >>

## Modificació d’articulacions de diversos tipus

A vegades volem modificar un sol temps d’articulació. Tot i que sempre és possible usar l’ordre `\tweak`, podria fer-se tediós fer-lo per a tots i cada un dels símbols d’una partitura completa. L’exemple mostra com ajustar articulacions amb una llista d’ajustaments personalitzats. Un cas seria la creació d’un full d’estils.

Amb 2.16.2 és possible introduir la funció proposada, `\customScripts`, en 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 }
       >>

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

## Visibilitat del comptador de repeticions de tipus percentatge

Es poden mostrar els comptadors de les repeticions del tipus percentatge a intervals regulars mitjançant l’establiment de la propietat de context `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 }
    }

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

## Posicionar els silencis multicompàs

A diferència dels silencis normals, no existeix una ordre predefinida per modificar la posició predeterminada d’un símbol de silenci multicompàs sobre el pentagrama, adjuntant-lo a una nota, independentment de quin sigui la seva forma. No obstant, en la música polifònica els silencis multicompàs de les veus de numeració parell i imparell estan separats verticalment. La col·locació dels silencis multicompàs es pot controlar com es ve a continuació:

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

## 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 nombre de compàs dins de rectangles o circumferències

Els nombres de compàs també es poden imprimir dins de rectangles o de circumferències.

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

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

## Impressió dels noms de les notes amb o sense indicació de l’octava

Es pot usar el context `NoteNames` per imprimir el valor textual de les notes. La propietat `printOctaveNames` activa o desactiva la representació de l’octava de les notes.

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

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

## Espaiat de les notes estrictament proporcional

Si s’ha establert `strict-note-spacing`, l’espaiat de les notes no es veu influït pels compassos o claus que pugui haver-hi dins d’un sistema. En comptes d’això, es col·loquen just abans de la nota que té lloc en el mateix moment temporal. Això pot produir col·lisions.

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

## Removing brace on first line of piano score

This snippet removes the first brace from a `PianoStaff` or a `GrandStaff`.

It may be useful when cutting and pasting the engraved image into existing music.

It uses `\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
        }
      }
    }

## Treure les barres de compàs entre els pentagrames d’un StaffGroup PianoStaff o GrandStaff

De forma predeterminada, les línies divisòries als grups StaffGroup, PianoStaff o GrandStaff es connecten entre els pentagrames. Es pot alterar aquest comportament pentagrama a pentagrama.

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

## Supressió de la primera línia buida

El primer pentagrama buit també es pot suprimir de la partitura establint la propietat `remove-first` de `VerticalAxisGroup`. Això es pot fer globalment dins del bloc `\layout`, o localment dins del pentagrama concret que es vol suprimir. En aquest últim cas, hem d’especificar el contex (`Staff` s’aplica sols al pentagrama actual) davant de la propietat.

El pentagrama inferior del segon grup no s’elimina, perquè l’ajustament sols s’aplica al pentagraa concret dins del que s’escriu.

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

## Estils de silencis

Els silencis es poden imprimir en diferents estils.

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

## Barres rítmiques

Als fulls guia d’acords o fulls guia “senzilles”, a vegades no s’imprimeix realment cap nota, i en el seu lloc es fa una notació que té sols “patrons rítmics” i acords a sobre dels compassos, donant l’estructura de la cançó. Aquesta funcionalitat és útil, per exemple, en crear o transcriure l’estructura d’una cançó i també si es volen compartir els fulls guia amb guitarristes o músics de jazz. La forma estàndard en la qual hi ha suport per a aquesta modalitat usant `\repeat percent` no és adequada aquí perquè el primer compàs hauria de ser una nota o silenci normals. Aquest exemple mostra dues solucions al problema, redefinint els silencis normals perquè s’imprimeixin com a barres inclinades (si la duració de cada pols no és una negra, substituirem el `r4` que apareix a les definicions amb un silenci de la duració adequada).

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

## Separar les cancel·lacions de tonalitat dels canvis d’armadura

De forma predeterminada, les alteracions accidentals que s’usen per a les cancel·lacions a les armadures es col·loquen adjacents a les que s’usen per als canvis de tonalitat. Aquest comportament es pot canviar sobreescrivint la propietat `'break-align-orders` de l’objecte gràfic `BreakAlignment`.

El valor de `'break-align-orders` és un vector de longitud 3, amb llistes entre cometes els elements de les quals són objectes que es poden dividir en un salt. Aquest exemple sols modifica la segona llista, movent `key-cancellation` abans de `staff-bar`; modificant la segona llista, el comportament d’alineació dels salts canvia en la meitat d’un sistema, no al principi ni al final.

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

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

## Fixació d’un separador entre els sistemes

Es poden inserir separadors de sistema entre els sistemes d’una pàgina. Es pot usar qualsevol element de marcatge, però hi ha `\slashSeparator` com una elecció predeterminada adequada.

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

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

## Línies d’extensió per a nombre de corda

Fem una línia extensora per a les indicacions de nombre de corda, mostrant que una sèrie de notes s’han de tocar sobre la mateixa corda.

    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
    }

## Evitar els advertiments sobre columnes de notes que xoquen

Si es col·loquen sobre la mateixa posició notes de dues veus diferents amb les pliques en la mateixa direcció, i cap de les veus té un desplaçament o ambdues tenen el mateix desplaçament, apareix el missatge d’error ‘`advertiment: massa columnes de notes en col·lisió, s'ignora`’ en compilar el fitxer del LilyPond. Aquest missatge es pot evitar fixant la propietat `'ignore-collision` de l’objecte `NoteColumn` al valor `#t`. Observeu que això no elimina sols els advertiments, sinó que fa que el LilyPond deixi d’intentar resoldre les col·lisions en absolut, per la qual cosa poden obtenir-se resultats diferents dels esperats si no s’usa amb prudència.

    ignore = \override NoteColumn.ignore-collision = ##t

    \relative c' {
      \new Staff <<
        \new Voice { \ignore \stemDown f2 g }
        \new Voice { c2 \stemDown c, }
      >>
    }

## Compàs entre parèntesis

La indicació de compàs pot envoltar-se entre parèntesi.

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

## Indicació de compàs entre parèntesis: mètode número 3

Una altra forma de posar la indicació de comàs entre parèntesis.

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

## Indicació de compàs imprimint sols el numerador (en lloc de la fracció)

A vegades, la indicació de compàs no ha d’imprimir la fracció completa (per exemple 7/4), sinó sols el numerador (7 en aquest cas). Això es pot fer fàcilment utilitzant `\override Staff.TimeSignature.style = #'single-digit` per canviar l’estil permanentment. Usant `\revert Staff.TimeSignature.style`, es pot revertir el canvi. Per aplicar l’estil d’un dígit únic a una sola indicació de compàs, utilitzeu l’ordre `\override` i anteposeu l’ordre `\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
    }

## Tuplet bracket and change staff

This snippet shows how to set a tuplet starting in a lower staff and finishing in the upper one.

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

## Ajustament de les propietats de clau

La modificació del glif de la clau, la seva posició o octava, no canvien ’per se’ la posició de les notes següents del pentagrama. Per aconseguir armadures adequades de tonalitat sobre les línies del pentagrama, s’ha d’especificar també `middleCClefPosition`, amb valor positius o negatius que moguin `Do central` cap amunt o cap avall, respectivament, en relació amb la línia central del pentagrama (usualment la tercera).

Per exemple, l’ordre `\clef "treble_8"` equival a un ajustament de `clefGlyph`, `clefPosition` (que controla la posició vertical de la clau sobre el pentagrama), `middleCPosition` i `clefTransposition`. Se imprimeix la clau cada cop que es modifica qualsevol de les propietats excepte `middleCPosition`.

Els exemple següents mostren les possibilitats quan s’ajusten aquestes propietats manualment. En la primera línia, els canvis manuals preserven la posició relativa estàndard de les clau i les notes, però no ho fan a la segona línia.

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

## Ajustament de la disposició de les notes d’adorn dins de la música

La disposició de les expressions d’adorn es pot canviar al llarg de tota la música usant les funcions `add-grace-property` i `remove-grace-property`. L’exemple següent esborra la definició de la direcció de la plica per a aquest nota d’adorn, de manera que les pliques no sempre apunten cap a dalt, i canvia la forma predeterminada dels caps a aspes.

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

## Ús d’estils alternatius per als corxets

Es poden imprimir estils alternatius del corxet o ganxo de les corxeres i figures menors, mitjançant la sobreescriptura de la propietat `stencil` de l’objecte `Flag`. Són valors vàlids `modern-straight-flag`, `old-straight-flag` i `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
        }
      }
    }

## Utilitzar ly:grob-object per accedir als grobs amb \tweak

Es pot accedir "lateralment" a alguns grobs des de dins de la funció de callbak d’un altre grob. Aquests es troben relacionats normalment com "layout objects" (objectes de presentació) en la secció "Internal properties" (propietats internes) d’una interfície de grob. S’usa la funció ly:grob-object per a accedir a aquests grobs.

Es presenten més avall com a exemple algunes formes d’accedir a grobs des de dins d’una funció de callblack de NoteHead, però la tècnica no es limita als caps de nota. No obstant, la funció de callblack de NoteHead és especialment important, perquè és la funció de callback implícita que utilitza l’ordre `\tweak`.

La funció d’exemple que es defineix sota ("display-grobs") no és probablement tan útil, però mostra que s’està accedint efectivament als grobs.

Sortida d’exemple de la consola:

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

## Ús del llenguatge PostSript per generar caps de nota de formes especials

Quan el cap d’una nota amb una forma especial no es pot generar fàcilment mitjançant elements de marcatge gràfic, es pot usar codi de Postscript per generar la forma. Aquest exemple mostra com es genera un cap en forma de paral·lelogram.

    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
    }

## Ús de l’ordre \tweak per retocar objectes gràfics individuals

Amb l’ordre d’ajustament `\tweak` tots els objectes gràfics es poden retocar directament. Aquí presentem exemples dels tipus de retocament disponibles.

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

## Indicacions dinàmiques i textuals alineades verticalment

Tots els objectes `DynamicLineSpanner` (reguladors i indicacions dinàmiques de text) se situen amb la seva línia de referència a una distància d’almenys `'staff-padding` del pentagrama, a no ser que d’altres elements de notació els forci a col·locar-se a més distància. Si s’ajusta `'staff-padding` a un valor suficientment gran, les indicacions dinàmiques quedaran alineades.

S’usa una idea semblant junt a \textLengthOn per alinear les inscripcions de text al llarg de la seva línia de base.

    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
    }

## Alineació vertical de la lletra i els compassos d’ossia

Aquest fragment de codi mostra l’ús de les propietats de context `alignBelowContext` i `alignAboveContext` per a controlar la posició de la lletra i els compassos d’ossia.

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

## Centrat vertical de les línies de baix xifrat emparellades

Al lloc on s’utilitzin línies extensores per al baix xifrat mitjançant l’establiment de `useBassFigureExtenders` al valor vertader, les parelles de línies extensores congruents se centren verticalment si el valor de `figuredBassCenterContinuations` té el valor vertader.

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

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