LilyPond snippets: Tweaks and overrides

# Tweaks and overrides

Changing defaults

Tweaking output

## Añadir una indicación de octava alta a una sola voz

Si tiene más de una voz en el mismo pentagrama, el cambio de octavación de una voz transportará la posición de las notas en todas las voces mientras dure el corchete de octava. Si la octavación se quiere aplicar a una voz solamente, se deben ajustar explícitamente la middleCPosition y el corchete de octava. En este fragmento de código, el valor de middleCPosition para la clave de Fa es normalmente 6, seis posiciones por encima de la línea del Do central, de manera que en la porción de 8va el valor de middleCPosition es aún 7 posiciones (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
        }
      >>
    }

## Añadir enlaces a los objetos

Para añadir un enlace al sello de un objeto gráfico, podemos usar `add-link` tal y como se define aquí. FUnciona con `\override` y con `\tweak`. Inconveniente: `point-and-click` (apuntar y pulsar) quedará obstacuilzado por los objetos gráficos enlazados.

Limitación: funciona solamente para PDF.

Los objetos enlazados se colorean con una instrucción aparte.

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

## Añadir marcas de tiempo a glissandos largos

Los pulsos que se saltan en glissandos muy largos se indican a veces mediante marcas de tiempo, que a menudo consisten en figuras sin cabeza. Estas plicas se pueden usar también para albergar indicaciones expresivas intermedias.

Si las plicas no quedan bien alineadas con el glissando, podría ser necesario recolocarlas ligeramente.

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

## Ajuste del espaciado de las notas de adorno

Se puede ajustar la separación entre las notas de adorno utilizando la propiedad `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
    }

## Ajuste del especiado vertical de la letra

Este fragmento de código muestra cómo situar la línea de base de la letra más cerca 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 las plicas unidas por una barra

Se puede variar la longitud de las plicas de las figuras unidas por una barra mediante la sobreescritura de la propiedad `beamed-lengths` de los detalles (`details`) del objeto `Stem`. Si se utiliza un solo valor como argumento, la longitud se aplica a todas las plicas. Si se usan varios argumentos, el primero se aplica a las corcheas, el sgundo a las semicorcheas y así sucesivamente. El último argumento también se aplica a todas las figuras que son mmás cortas que la longitud de la figura del último argumento. También se pueden usar argumentos no enteros.

    \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ón de compases alternativa

Se pueden seleccionar dos métodos alternativos para la numeración de compases, especiales para cuando hay repeticiones.

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

## Corchetes de análisis encima del pentagrama

De forma predeterminada se añaden corchetes de análisis sencillos debajo del pentagrama. El ejemplo siguiente muestra una manera de colocarlos por encima.

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

## Ligaduras asimétricas

Se puede hacer que una ligadura de expresión sea asimétrica para adaptarse mejor a un patrón asimétrico de notas.

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

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

## Cesura tipo "vías del tren"con calderón

A veces se denota una «cesura» mediante una doble marca de respiración parecida a las vías del tren, con un calderón encima. Este fragmento de código presenta una combinación visualmente satisfactoria de estas dos marcas.

    \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 el tamaño de una nota suelta de un acorde

Se pueden modificar notas individuales de un acorde con la instrucción `\tweak`, alterando la propiedad `font-size`.

Dentro de un acorde (entre ángulos simples `< >`), antes de la nota que queremos alterar, situamos la instrucción `\tweak` seguida por `font-size` y definimos el tamaño adecuado como `#-2` (una cabeza pequeña).

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

## Cambiar la forma de los silencios multicompás

Si hay diez compases de silencio o menos, se imprime en el pentagrama una serie de silencios de breve y longa (conocidos en alemán como “Kirchenpausen”, «silencios eclesiásticos»); en caso contrario se muestra una barra normal. Este número predeterminado de diez se puede cambiar sobreescribiendo la propiedad `expand-limit`:

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

## Modificación de propiedades para objetos gráficos individuales

La instrucción `\applyOutput` hace posible el ajuste fino de cualquier objeto de presentación, en cualquier contexto. Requiere una función de Scheme contres argumentos.

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

## Cambiar el texto y los estilos de objeto de extensión para las indicaciones dinámicas textuales

Se puede modificar el texto empleado para los crescendos y decrescendos modificando las propiedades de contexto `crescendoText` y `decrescendoText`.

El estilo de la línea de extensión se puede cambiar modificando la propiedad `'style` de `DynamicTextSpanner`. El valor predeterminado es `'dashed-line` (línea discontinua), y entre otros valores posibles se encuentran `'line` (línea), `'dotted-line` (línea de puntos) y `'none` (nada):

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

## Cambiar la familia de tipografía predeterminada para el texto

Las familias de fuente tipográfica para el texto se pueden sobreescribir con `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 el tamaño de la pauta

Aunque la manera más sencilla de redimensionar los pentagramas es usar `#(set-global-staff-size xx)`, el tamaño de una pauta individual se puede cambiar escalando las propiedades de `'staff-space` y 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
      }
    >>

## Cambiar el tempo sin indicación metronómica

Para cambiar el tempo en la salida MIDI sin imprimir nada, hacemos invisible la indicación 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 texto de las indicaciones de pedal

Se puede usar `Staff.pedalSustainStrings` para fijar el texto de las indicaciones de pisar pedal y levantar pedal. Observe que las únicas cadenas válidas son las que están en la lista de glifos de pedal: los valores que aparecen en este fragmento de código son una relación 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 visibilidad de los objetos de

extensión después de un salto de línea

La visibilidad de los objetos de extensión que acaban en la primera nota después de un salto de línea está controlada por la función de callback de `after-line-breaking` `ly:spanner::kill-zero-spanned-time`.

Para los objetos como los glissandos y los reguladores, el comportamiento predeterminado es ocultar el objeto de extensión después del salto; la inhabilitación de la función de callback hace que el objeto de extensión roto por la izquierda pueda mostrarse.

De forma inversa, los objetos de extensión que son visibles normalmente, como los objetos de extensión de texto, se pueden ocultar habilitando la función 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 la ordenación vertical de las inscripciones

El orden vertical que ocupan las inscripciones gráficas está controlado con la propiedad `'script-priority`. Cuanto más bajo es este número, más cerca de la nota se colocará. En este ejemplo, el `TextScript` (el sostenido) tiene primero la prioridad más baja, por lo que se sitúa en la posición más baja en el primer ejemplo. En el segundo, el `Script` (el semitrino) es el que la tiene más baja, por lo que se sitúa en la parte interior. Cuando dos objetos tienen la misma prioridad, el orden en que se introducen determina cuál será el que aparece en primer lugar.

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

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

## Controlar la visibilidad de los corchetes de grupo especial

El comportamiento predeterminado de la visibilidad de los corchetes de grupo de valoración especial es imprimir el corchete a no ser que haya una barra de la misma longitud que el grupo especial. Para controlar la visibilidad de los corchetes de grupo, establezca la propiedad `'bracket-visibility` a `#t` (imprimir el corchete siempre), `#'if-no-beam` (imprimir el corchete solamente si no hay barra, el comportamiento predeterminado), o `#f` (no imprimir nunca el corchete). Este último equivale de hecho a omitir el objeto `TupletBracket` de la salida impresa.

    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 grupeto de anticipación

La creación de un grupeto circular de anticipación entre dos notas, donde la nota inferior del grupeto utiliza una alteración, requiere varias sobreescrituras de propiedades. La propiedad `outside-staff-priority` se debe establecer al valor `#f`, pues en caso contrario tendría prioridad sobre la propiedad `avoid-slur property`. Cambiando las fracciones `2/3` y `1/3` puede ajustarse la posición horizontal.

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

## Creating custom key signatures

LilyPond supports custom key signatures. In this example, print for D minor with an extended range of printed flats.

    \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 digitaciones de dos cifras

Es posible crear digitaciones con un número mayor de 5.

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

## Crear elementos de extensión textuales

Las instrucciones `\startTextSpan` y `\stopTextSpan` permiten la creación de elementos de extensión textuales tan fácilmente como indicaciones de pedal u octavaciones. Sobreescribimos ciertas propiedades del objeto `TextSpanner` para modificar su salida.

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

## Plicas de pentagrama cruzado

Este fragmento de código muestra el uso del grabador `Span_stem_engraver` y de `\crossStaff` para conectar automáticamente plicas de un pentagrama a otro. No es necesario especificar la longitud de la plica porque la distancia variable entre las cabezas de las notas y los pentagramas se calcula automáticamente.

    \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

Se pueden tipografiar «custos» en diferentes estilos.

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

## Personalizar los diagramas de posiciones

Se pueden establecer las propiedades de los diagramas de posiciones de acordes por medio de `'fret-diagram-details`. Para los diagramas de posiciones de FretBoard, se aplican los overrides (sobreescrituras) al objeto `FretBoards.FretBoard`. Como `Voice`, `FretBoards` es un contexto del nivel inferior, y por tanto se puede omitir su nombre en la sobreescritura de propiedades.

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

## Personalizar diagramas de posiciones de marcado

Se pueden establecer las propiedades de los diagramas de posiciones a través de `'fret-diagram-details`. Para los diagramas de posiciones de marcado, se pueden aplicar overrides (sobreescrituras) al objeto `Voice.TextScript` o directamente al elemento de marcado.

    <<
      \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 corchete o llave en grupos de un solo pentagrama

Si hay un solo pentagrama en un de los tipos de sistema `ChoirStaff` o `StaffGroup`, el comportamiento predeterminado es que no se imprima el corchete en la barra inicial. Esto se puede cambiar sobreescribiendo `collapse-height` para fijar su valor de manera que sea menor que el número de líneas en la pauta.

Observe que en contextos como `PianoStaff` y `GrandStaff` en que los sistemas empiezan con una llave en lugar de un corchete, se debe establecer el valor de una propiedad distinta, como se ve en el segundo sistema del ejemplo.

    \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 el árbol genealógico de un grob

Al trabajar con los callbacks de un grob, puede ser de mucha ayuda entender el árbol genealógico de un grob. La mayor parte de los grobs tienen padres que influyen en el posicionamiento del grob. los padres X e Y influyen en las posiciones horizontal y vertical del grob, respectivamente. Además, cada pade puede tener padres a su vez.

Por desgracia, existen varios aspectos de la genealogía de un grob que pueden llevar a confusión:

* Los tipos de padre que tiene un grob pueden depender del contexto.

* Para ciertos grobs, los padres X e Y son el mismo.

* Un "ancestro" concreto puede estar relacionado con un grob de más de una manera.

* El concepto de "generaciones" es engañoso.

Por ejemplo, el grob `System` puede ser tanto un padre (sobre el lado Y) como un abuelo (dos veces en el lado X) de un grob `VerticalAlignment`.

Este macro imprime, en la consola, una representación textual de la genealogía de un grob.

Cuando se llama de esta forma:

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

Se genera la siguiente salida:

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

## Armónicos con puntillo

Los armónicos artificiales que usan la instrucción `\harmonic` no tienen puntillo. Para sobreescribir este comportamiento, fije la propiedad de contexto `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.
    }

## Rodear los objetos gráficos con rectángulos

Se puede sobreescribir la función `print-function` para trazar un rectángulo alrededor de un objeto gráfico arbitrario.

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

## Rodear diversos objetos con una circunferencia

La instrucción de marcado `\circle` traza circunferencias alrededor de varios objetos, por ejemplo las indicaciones de digitación. Para otros objetos pueden requerirse trucos específicos: este ejemplo muestra dos estrategias para las letras de ensayo y los 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)
    }

## Objeto personalizado de extensión de texto de matices dinámicos, postfijo

Funciones postfijas para la creación de objetos de extensión de texto personalizados. Los objetos de extensión deben comenzar en la primera nota del compás. Hay que utilizar -\mycresc, en caso contrario el comienzo del eobjeto de extensión se asignará a la nota siguiente.

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

## Objetos extensores de texto postfijos para dinámica

Los objetos de extensión \cresc, \dim y \decresc ahora se pueden redefinir como operadores postfijos y producir un solo objeto de extensión de texto. La definición de extensores personalizados también es fácil. Se pueden mezclar con facilidad los crescendi textuales y en forma de reguladores. \< y \> producen reguladores gráficos de forma predeterminada, \cresc etc. producen elementos extensores de texto 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)
    }

## Extender glissandos sobre repeticiones

Se puede simular un glissando que se extiende hasta el interior de varios bloques `\alternative` de primera y segunda vez mediante la adición de una nota de adorno oculta con un glissando al comienzo de cada bloque `\alternative`. La nota de adorno debe estar a la misma altura que la nota que da inicio al primer glissando. Esto se implementa aquí con una función musical que toma como argumento la altura de la nota de adorno.

Observe que en música polifónica la nota de adorno debe coincidir con las notas de adorno correspondientes en todas las otras voces.

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

## Ajuste fino de las líneas de pedal

Se puede alterar el aspecto de las líneas de pedal de varias formas.

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

## Forzar el desplazamiento horizontal de las notas

Cuando el motor de tipografiado no es capaz de todo, se puede usar la sintaxis siguiente para sobreescribir las decisiones de tipografía. Las unidades de medida que se usan aquí son espacios de pentagrama.

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

## Diagramas de posiciones de acorde, explicados y desarrollados

Eeste fragmento de código presenta muchas posibilidades para obtener diagramas de posiciones de acorde y cómo trucarlos.

    <<
      \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 corchetes personalizados

La propiedad `stencil` del grob `Flag` (el objeto gráfico corchete) se puede fijar a una función de Scheme personalizada que genere el glifo del corchete.

    #(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 por debajo de un objeto gráfico

Los objetos gráficos de columna de nota (los grobs `NoteColumn`) pueden ser sobrepasados por los glissandos.

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

## Reguladores con distintos estilos de línea

Los reguladores pueden imprimirse en uno cualquiera de los estilos de `line-interface`: discontinuo, punteado, línea, trino 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 horizontalmente indicaciones dinámicas personalizadas (p.ej. "sempre pp""piu f""subito p")

Algunas expresiones de matiz dinámico llevan texto adicional, como "sempre pp". Dado que los matices suelen ir centrados bajo la nota, el \pp se imprimiría mucho después de la nota a la que se aplica el matiz.

Para alinear correctamente el "sempre pp" en sentido horizontal, de manera que se alinee como si estuviese solamente el \pp, hay varios enfoques:

* Sencillamente usar `\once\override DynamicText.X-offset = #-9.2` antes de la nota que lleva el matiz, para desplazarlo manualmente a la posicion correcta. Inconveniente: hay que hacerlo manualmente cada vez que usamos esa indicación dinámica.

* Añadir algo de relleno (`#:hspace 7.1`) dentro de la definición de nuestra indicación dinámica personalizada, de forma que despues de que lilypond la ha centrado, ya esté alineada correctamente. Inconveniente: el relleno realmente ocupa ese espacio y no permite que se imprima ningún otro elemento de marcado o matiz dinámico en esa posición.

* Desplazar la inscripción dinámica `\once\override ... .X-offset = ..`. Inconveniente: ¡se necesita `\once\override` para cada una de las invocaciones!

* Fijar las dimensiones del texto adicional a cero (usando `#:with-dimensions '(0 . 0) '(0 . 0)`). Inconveniente: para LilyPond "sempre" no tiene dimensiones, por lo que podría imprimir otros elementos en su mismo lugar y producir colisiones (que no serían advertidas por el mecanismo de detección de colisiones). Asimismo, aparentemente hay algún espacio, y por tanto no es exactamente la misma alineación que sin el texto adicional.

* Añadir un desplazamiento explícito directamente dentro de la función de Scheme que produce el elemento dynamic-script.

* Fijar una alineación explícita dentro del dynamic-script. De forma predeterminada, esto no tendría ningún efecto, a no ser que fijásemos un valor para X-offset. Inconveniente: tenemos que dar un valor a `DynamicText.X-offset` ¡que se aplicaría a todos los textos de dinámica!. Asimismo, se alinea con el extremo derecho del texto adicional, no con el centro 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 }

## Cómo cambiar la posicion de un diagrama de posiciones

Si queremos mover un diagrama de posiciones de acorde, por ejemplo, para evitar la colisión, o situarlo entre dos notas, tenemos varias posibilidades:

1) modificar los valores de relleno #’padding o del desplazamiento adicional #’extra-offset (como se muestra en el primer ejemplo)

2) podemos añadir una voz invisible y adjuntar los diagramas de posiciones a las notas invisibles de esa voz (como se ve en el segundo ejemplo).

Si tenemos que mover el diagrama según una posición rítmica dentro del compás (en el ejemplo, la tercera parte del compás) es mejor el segundo ejemplo, porque el diagrama se alinea con el tercer pulso por sí solo.

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

## Insertar una cesura

Las marcas de cesura se pueden crear sobreescribiendo la propiedad `'text` del objeto `BreathingSign`. También está disponible una marca de cesura curva.

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

## Mantener el tamaño del símbolo en los cambios de clave

Cuando se produce un cambio de clave, el símbolo de clave se imprime a un tamaño menor que la clave inicial. Esto se puede ajustar con `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
    }

## Puntas de flecha para las líneas

Se pueden aplicar puntas de flecha a los elementos de extensión de texto y de línea (como 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
    }

## Hacer invisible un objeto con la propiedad ’transparent

Si se ajusta la propiedad `transparent` de un objeto, se imprime en “tinta invisible”: el objeto no se imprime pero se retienen todos sus otros comportamientos. El objeto aún ocupa espacio, participa en las colisiones y se le pueden unir ligaduras de expresión, ligaduras de unión y barras de corchea.

Este fragmento de código muestra cómo conectar diferentes voces usando ligaduras de unión. Normalmente las ligaduras de unión solamente conectan dos notas que estén en la misma voz. Mediante la introducción de una ligadura en una voz distinta y pintando de color blanco la primera plica hacia arriba dentro de esa voz, la ligadura parece cruzar de una voz a otra.

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

## Hacer que los glissandos se puedan dividir en el salto de línea

Si se ajusta la propiedad `breakable` al valor `#t` en combinación con `after-line-breaking`, podemos hacer que un glissando se divida en el salto de línea:

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

## Controlar manualmente las posiciones de las barras

Se pueden controlar manualmente las posiciones de las barras de corchea, sobreescribiendo el valor del parámetro `positions` del objeto gráfico `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ón Mensurstriche (líneas divisorias entre pentagramas)

La disposición «mensurstriche» en que las líneas divisorias no están dibujadas sobre los pentagramas, sino entre ellos, se puede conseguir con un `StaffGroup` en vez de un `ChoirStaff`. La línea divisoria sobre los pentagramas se borra usando `\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
    }

## Desplazar las notas con puntillo en polifonía

Cuando se puede una nota en la voz superior para evitar la colisión con una nota de otra voz, el comportamiento predeterminado es desplazar la nota superior a la derecha. Se puede cambiar usando la propiedad `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 }
    >>

## Desplazar ligaduras de expresión verticalmente

Se puede ajustar la posición vertical de una ligadura de expresión utilizando la propiedad `positions` del objeto `Slur`. La propiedad tiene dos parámetros, refiriéndose el primero al extremo izquierdo de la ligadura y el segundo al derecho. Los valores de los parámetros no se utilizan por parte de LilyPond para producir un desplazamiento exacto de la ligadura: más bien selecciona la colocación que mejor aspecto tiene, teniendo en cuenta los valores de los parámetros. Los valores positivos desplazan la ligadura hacia arriba, y son adecuados a notas que tienen las plicas hacia abajo. Los valores negativos desplazan las ligaduras bajas aún más hacia abajo.

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

## Anidado de grupos de pentagramas

Se puede utilizar la propiedad `systemStartDelimiterHierarchy` para crear grupos de pentagramas anidados de forma más compleja. La instrucción `\set StaffGroup.systemStartDelimiterHierarchy` toma una lista alfabética del número de pentagramas producidos. Se puede proporcionar antes de cada pentagrama un delimitador de comienzo de sistema. Se debe encerrar entre corchetes y admite tantos pentagramas como encierren las llaves. Se pueden omitir los elementos de la lista, pero el primer corchete siempre abarca todos los pentagramas. Las posibilidades son `SystemStartBar`, `SystemStartBracket`, `SystemStartBrace` y `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 }
    >>

## Overriding articulations by 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 and above 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: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 }
       >>

## Visibilidad del contador de repeticiones de tipo porcentaje

Se pueden mostrar los contadores de las repeticiones del tipo porcentaje a intervalos regulares mediante el establecimiento de la propiedad de contexto `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ímbolos de arpegio

Si necesitamos alargar o acortar un símbolo de arpegio, podemos modificar independientemente los extremos superior e 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 los silencios multicompás

A diferencia de los silencios normales, no existe una instrucción predefinida para modificar la posición predeterminada de un símbolo de silencio multicompás sobre el pentagrama, adjuntándolo a una nota, independientemente de cuál sea su forma. Sin embargo, en la música polifónica los silencios multicompás de las voces de numeración par e impar están separados verticalmente. La colocación de los silencios multicompás se puede controlar como se ve a continuación:

    \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 los elementos de marcado de texto por dentro de las ligaduras

Los elementos de marcado de texto deben tener la propiedad `outside-staff-priority` establecida al valor falso para que se impriman por dentro de las ligaduras de expresión.

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

## Imprimir números de compás dentro de rectángulos o circunferencias

Los números de compás también se pueden imprimir dentro de rectángulos o de circunferencias.

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

## Impresión de indicaciones metronómicas y letras de ensayo debajo del pentagrama

De forma predeterminada, las indicaciones metronómicas y las letras de ensayo se imprimen encima del pentagrama. Para colocarlas debajo del pentagrama, simplemente ajustamos adecuadamente la propiedad `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
    }

## Impresión de los nombres de las notas con o sin indicación de la octava

Se puede usar el contexto `NoteNames` para imprimir el valor textual de las notas. La propiedad `printOctaveNames` activa o desactiva la representación de la octava de las notas.

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

## Espaciado de las notas estrictamente proporcional

Si está establecido `strict-note-spacing`, el espaciado de las notas no queda influido por los compases o claves que pueda haber dentro de un sistema. En lugar de ello, se colocan justo antes de la nota que tiene lugar en el mismo momento temporal. Esto puede producir colisiones.

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

## Quitar las barras de compás entre los pentagramas de un StaffGroup PianoStaff o GrandStaff

De forma predeterminada, las líneas divisorias en los grupos StaffGroup, PianoStaff o GrandStaff se conectan entre los pentagramas. Se puede alterar este comportamiento 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
        }
      >>
    }

## Quitar la primera línea vacía

El primer pentagrama vacío también se puede suprimir de la partitura estableciendo la propiedad `remove-first` de `VerticalAxisGroup`. Esto se puede hacer globalmente dentro del bloque `\layout`, o localmente dentro del pentagrama concreto que se quiere suprimir. En este último caso, tenemos que especificar el contexto (`Staff` se aplica sólo al pentagrama actual) delante de la propiedad.

El pentagrama inferior del segundo grupo no se elimina, porque el ajuste sólo se aplica al pentagrama concreto dentro del que se escribe.

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

## Estilos de silencios

Los silencios se pueden imprimir en distintos estilos.

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

## Barras rítmicas

En las hojas guía de acordes o lead-sheets “sencillas”, a veces no se imprime realmente ninguna nota, y en su lugar se hace una notación que tiene solamente “patrones rítmicos” y acordes encima de los compases, dando la estructura de la canción song. Tal funcionalidad es útil, por ejemplo, al crear o transcribir la estructura de una canción y también si se quieren compartir las hojas guía con guitarristas o músicos de jazz. La forma estándar en que está contemplada esta funcionalidad empleando `\repeat percent` no es adecuada aquí porque el primer compás tendría que ser una nota o silencio normales. Este ejemplo muestra dos soluciones al problema, redefiniendo los silencios normales para que se impriman como barras inclinadas (si la duración de cada pulso no es una negra, sustituiremos el `r4` que aparece en las definiciones con un silencio de la duración adecuada).

    % 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 las cancelaciones de tonalidad de los cambios de armadura

De forma predeterminada, las alteraciones accidentales que se usan para las cancelaciones en las armaduras se colocan adyacentes a las que se usan para los cambios de tonalidad. Este comportamiento se puede cambiar sobreescribiendo la propiedad `'break-align-orders` del objeto gráfico `BreakAlignment`.

El valor de `'break-align-orders` es un vector de longitud 3, con listas entrecomilladas cuyos elementos con objets que se pueden dividir en un salto. Este ejemplo solo modifica la segunda lista, moviendo `key-cancellation` antes de `staff-bar`; modificando la segunda lista, el comportamiento de alineación de los saltos solo cambia en la mitad de un sistema, no al principio 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
    }

## Establecer el comportamiento de los reguladores en las barras de compás

Si la nota que da fin a un regulador cae sobre la primera parte de un compás, el regulador se detiene en la línea divisoria inmediatamente precedente. Se puede controlar este comportamiento sobreescribiendo la propiedad `'to-barline`.

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

## Fijar un separador entre los sistemas

Se pueden insertar separadores sistema entre los sistemas de una página. Se puede usar cualquier elemento de marcado, pero `\slashSeparator` está disponible como una elección predeterminada adecuada.

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

## Imprimir la misma articulación encima y debajo de la misma nota o acorde

De forma predeterminada, LilyPond no permite poner la misma articulación (p.ej., un acento, un calderón, un círculo de armónico, etc.) encima y debajo de la nota. Por ejemplo, c4_\fermata^\fermata imprime solamente el calderón inferior. El calderón superior sencillamente se ignora. Sin embargo, se pueden adosar inscripciones (de igual forma que las digitaciones) dentro de un acorde, lo que significa que es posible tener tantas articulaciones como se desee. Este enfoque tiene la ventaja de que ignora la plica y posiciona la articulación de forma relativa a la cabeza de la nota. Puede verse esto en el caso de los flageolets (indicaciones de armónico) que aparecen en el fragmento de código. Para recrear el comportamiento de las inscripciones fuera del acorde, se requiere ’add-stem-support. Así, la solución consiste en escribir la nota como un acorde y añadir las articulaciones dentro de los paréntesis en ángulo <...>. La dirección siempre será hacia arriba, pero podemos retocar esto por medio de una instrucción \tweak: `<c-\tweak dirección #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íneas de extensión para números de cuerda

Hacemos una línea extensora para las indicaciones de número de cuerda, motrando que una serie de notas se han de tocar sobre la misma cuerda.

    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 las advertencias sobre columnas de notas que chocan

Si se colocan sobre la misma posición notas de dos voces distintas con las plicas en la misma dirección, y ninguna de las voces tiene un desplazamiento o ambas tienen el mismo desplazamiento, aparece el mensaje de error ‘`advertencia: demasiadas columnas de notas en colisión; se ignora`’ aparece al compilar el archivo de LilyPond. Este mensaje se puede evitar fijando la propiedad `'ignore-collision` del objero `NoteColumn` al valor `#t`. Observe que esto no elimina solamente las advertencias, sino que hace que LilyPond deje de intentar resolver las colisiones en absoluto, por lo que pueden obtenerse resultados distintos de los esperados si no se usa con prudencia.

    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ón de compás puede encerrarse entre paréntesis.

    \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ón de compás entre paréntesis: método número 3

Otra forma de poner la indicación de compá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ón de compás imprimiendo sólo el numerador (en lugar de la fracción)

A veces, la indicación de compás no debe imprimir la fracción completa (p.ej. 7/4), sino sólo el numerador (7 en este caso). Esto se puede hacer fácilmente utilizando `\override Staff.TimeSignature.style = #'single-digit` para cambiar el estilo permanentemente. Usando `\revert Staff.TimeSignature.style`, se puede revertir el cambio. Para aplicar el estilo de un dígito único a una sola indicación de compás, utilice la instrucción `\override` y anteponga la instrucción `\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
    >>

## Trucaje de las propiedades de clave

La modificación del glifo de la clave, su posición o su octavación, no cambian ’per se’ la posición de las siguientes notas del pentagrama. Para conseguir armaduras de tonalidad sobre las líneas del pentagrama adecuadas, también debe especificarse `middleCClefPosition`, con valores positivos o negativos que mueven el `Do central` hacia arriba o hacia abajo, respectivamente, en relación con la línea central del pentagrama (usualmente la tercera).

Por ejemplo, la instrucción `\clef "treble_8"` equivale a un ajuste de `clefGlyph`, `clefPosition` (que controla la posición vertical de la clave sobre el pentagrama), `middleCPosition` y `clefTransposition`. Se imprime una clave cada vez que se modifica cualquiera de las propiedades excepto `middleCPosition`.

Los siguientes ejemplos muestran las posibilidades cuando se ajustan estas propiedades manualmente. En la primera línea, los cambios manuales preservan el posicionamiento relativo estándar de las claves y las notas, pero no lo hacen en la segunda línea.

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

## Trucar la disposición de las notas de adorno dentro de la música

La disposición de las expresiones de adorno se puede cambiar a lo largo de toda la música usando las funciones `add-grace-property` y `remove-grace-property`. El ejemplo siguiente borra la definición de la dirección de la plica para esta nota de adorno, de manera que las plicas no siemmpre apuntan hacia arriba, y cambia la forma predeterminada de las cabezas a aspas.

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

## Uso de estilos alternativos para los corchetes

Se pueden imprimir estilos alternativos del corchete o gancho de las corcheas y figuras menores, mediante la sobreescritura de la propiedad `stencil` del objeto `Flag`. Son valores válidos `modern-straight-flag` y `old-straight-flag` y `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
        }
      }
    }

## Utilizar ly:grob-object para acceder a los grobs con \tweak

Se puede acceder "lateralmente" a algunos grobs desde dentro de la función de callback de otro grob. Éstos se encuentran relacionados normalmente como "layout objects" (objetos de presentación) en la sección "Internal properties" (propiedades internas) de un interface de grob. Se usa la función ly:grob-object para acceder a estos grobs.

Se presentan más abajo como ejemplo algunas formas de addecer a grobs desde dentro de una función de callback de NoteHead, pero la técnica no se limita a las cabezas de nota. Sin embargo, la función de callback de NoteHead es especialmente importante, porque es la función de callback implícita que utiliza la instrucción `\tweak`.

La función de ejemplo que se define abajo ("display-grobs") no es probablemente tan útil, pero muestra que se está accediendo efectivamente a los grobs.

Salida de ejemplo 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
    }

## Uso del lenguaje PostScript para generar cabezas de nota de formas especiales

Cuando la cabeza de una nota con una forma especial no se puede generar fácilmente mediante elementos de marcado gráfico, puede emplearse código de PostScript para generar la forma. Este ejemplo muestra cómo se genera una cabeza en forma de paralelogramo.

    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
    }

## Uso de la instrucción \tweak para retocar objetos gráficos individuales

Con la instrucción de trucar `\tweak` todos los objetos gráficos se pueden retocar directamente. Aquí presentamos ejemplos de los tipos de retoque 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
    }

## Indicaciones dinámicas y textuales alineadas verticalmente

Todos los objetos `DynamicLineSpanner` (reguladores e indicaciones dinámicas de texto) se sitúan con su línea de referencia a una distancia de al menos `'staff-padding` del pentagrama, a no ser que otros elementos de notación los fuerce a colocarse a más distancia. Si se ajusta `'staff-padding` a un valor suficientemente grande, las indicaciones dinámicas quedarán alineadas.

Se usa una idea similar junto a \textLengthOn para alinear las inscripciones de texto a lo largo de su línea 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ón vertical de la letra y los compases de ossia

Este fragmento de código muestra el uso de las propiedades de contexto `alignBelowContext` y `alignAboveContext` para controlar la posición de la letra y los compases de 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]
            }
          }
        >>
      }
    >>

## Centrado vertical de las líneas de bajo cifrado emparejadas

Allí donde se utilicen líneas extensoras para el bajo cifrado mediante el establecimiento de `useBassFigureExtenders` al valor verdadero, las parejas de líneas extensoras congruentes se centran verticalmente si el valor de `figuredBassCenterContinuations` tiene el valor verdadero.

    <<
      \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 — Snippets v2.24.4 (rama estable).