LilyPond snippets: Editorial annotations

# Editorial annotations

Editorial annotations

## Añadir digitaciones a la partitura

Se pueden escribir instrucciones de digitación usando una sintaxis muy sencilla.

    \relative c'' {
      c4-1 d-2 f-4 e-3
    }

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

## Permitir que las digitaciones se impriman dentro del pentagrama

Las cifras de digitación orientadas verticalmente se colocan de forma predeterminada fuera del pentagrama. Sin embargo, este comportamiento se puede cancelar. Hay que prestar atención en situaciones en las que las digitaciones y las plicas están en la misma dirección: por defecto, las digitaciones solo evitan la colisión con plicas unidas por una barra. Se puede cambiar este ajuste para no evitar ninguna plica o evitarlas todas; el ejemplo siguiente muestra las dos copciones, así como la manera de volver al comportamiento predeteminado.

    \relative c' {
      <c-1 e-2 g-3 b-5>2
      \override Fingering.staff-padding = #'()
      <c-1 e-2 g-3 b-5>4 g'-0
      a8[-1 b]-2 g-0 r
      \override Fingering.add-stem-support = ##f
      a[-1 b]-2 g-0 r
      \override Fingering.add-stem-support = ##t
      a[-1 b]-2 g-0 r
      \override Fingering.add-stem-support = #only-if-beamed
      a[-1 b]-2 g-0 r
    }

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

## Aplicar estilos de cabeza según la nota de la escala

La propiedad `shapeNoteStyles` se puede usar para definir varios estilos de cabezas de nota para cada grado de la escala (según esté establecido por la armadura o por la propiedad `tonic`). Esta propiedad requiere un conjunto de símbolos, que pueden ser puramente arbitrarios (se permiten expresiones geométricas como `triangle`, triángulo, `cross`, aspas, y `xcircle`, círculo con aspas) o basados en una antigua tradición americana de grabado (ciertos nombres de nota latinos trambién se permiten).

Dicho esto, para imitar antiguos cancioneros americanos, existen varios estilos predefinidos de cabezas de nota disponibles a través de instrucciones de abreviatura como `\aikenHeads` o `\sacredHarpHeads`.

Este ejemplo muestra distintas formas de obtener cabezas de notas con forma, y muestra la capacidad de transportar una melodía sin perder la correspondencia entre las funciones armónicas y los estilos de cabezas de nota.

    fragment = {
      \key c \major
      c2 d
      e2 f
      g2 a
      b2 c
    }

    \new Staff {
      \transpose c d
      \relative c' {
        \set shapeNoteStyles = ##(do re mi fa
                                   #f la ti)
        \fragment
      }

      \break

      \relative c' {
        \set shapeNoteStyles = ##(cross triangle fa #f
                                   mensural xcircle diamond)
        \fragment
      }
    }

## Poner en blanco las líneas del pentagrama utilizando la instrucción \whiteout

La instrucción `\whiteout` intercala un rectángulo blanco debajo de un elemento de marcado. Este rectángulo blanco no tapa a ningún otro objeto gráfico, puesto que las líneas del pentagrama están en una capa inferior a la de la mayor parte de los otros objetos.

    \layout {
      ragged-right = ##f
    }

    \relative c' {
      \override TextScript.extra-offset = #'(2 . 4)
      c2-\markup { \whiteout \pad-markup #0.5 "middle C" } c
    }

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

## Modificar el aspecto continuo de una ligadura de expresión a punteado o intermitente

Se puede cambiar el aspecto de las ligaduras de expresión de continuas a punteadas o intermitentes.

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

## Colorear las notas según su altura

Es posible colorear la cabeza de las notas dependiendo de su altura y/o de su nombre: la función que se usa en este ejemplo hace posible incluso distinguir los armónicos.

    %Association list of pitches to colors.
    #(define color-mapping
       (list
        (cons (ly:make-pitch 0 0 NATURAL) (x11-color 'red))
        (cons (ly:make-pitch 0 0 SHARP) (x11-color 'green))
        (cons (ly:make-pitch 0 1 FLAT) (x11-color 'green))
        (cons (ly:make-pitch 0 2 NATURAL) (x11-color 'red))
        (cons (ly:make-pitch 0 2 SHARP) (x11-color 'green))
        (cons (ly:make-pitch 0 3 FLAT) (x11-color 'red))
        (cons (ly:make-pitch 0 3 NATURAL) (x11-color 'green))
        (cons (ly:make-pitch 0 4 SHARP) (x11-color 'red))
        (cons (ly:make-pitch 0 5 NATURAL) (x11-color 'green))
        (cons (ly:make-pitch 0 5 FLAT) (x11-color 'red))
        (cons (ly:make-pitch 0 6 SHARP) (x11-color 'red))
        (cons (ly:make-pitch 0 1 NATURAL) (x11-color 'blue))
        (cons (ly:make-pitch 0 3 SHARP) (x11-color 'blue))
        (cons (ly:make-pitch 0 4 FLAT) (x11-color 'blue))
        (cons (ly:make-pitch 0 5 SHARP) (x11-color 'blue))
        (cons (ly:make-pitch 0 6 FLAT) (x11-color 'blue))))

    %Compare pitch and alteration (not octave).
    #(define (pitch-equals? p1 p2)
       (and
        (= (ly:pitch-alteration p1) (ly:pitch-alteration p2))
        (= (ly:pitch-notename p1) (ly:pitch-notename p2))))

    #(define (pitch-to-color pitch)
       (let ((color (assoc pitch color-mapping pitch-equals?)))
         (if color
             (cdr color))))

    #(define (color-notehead grob)
       (pitch-to-color
        (ly:event-property (event-cause grob) 'pitch)))

    \score {
      \new Staff \relative c' {
        \override NoteHead.color = #color-notehead
        c8 b d dis ees f g aes
      }
    }

## Controlar la colocación de las digitaciones de acordes

Se puede controlar con precisión la colocación de los números de digitación. Para que se tenga en cuenta la orientación de las digitaciones, se debe utilizar dentro de una construcción de acorde <> aunque sea una sola nota. Se puede establecer la orientación para los números de cuerda y las digitaciones de la mano derecha de una forma similar.

    \relative c' {
      \set fingeringOrientations = #'(left)
      <c-1 e-3 a-5>4
      \set fingeringOrientations = #'(down)
      <c-1 e-3 a-5>4
      \set fingeringOrientations = #'(down right up)
      <c-1 e-3 a-5>4
      \set fingeringOrientations = #'(up)
      <c-1 e-3 a-5>4
      \set fingeringOrientations = #'(left)
      <c-1>2
      \set fingeringOrientations = #'(down)
      <e-3>2
      \set stringNumberOrientations = #'(up left down)
      <f\3 a\2 c\1>1
      \set strokeFingerOrientations = #'(down right up)
      <c\rightHandFinger #1 e\rightHandFinger #2 c'\rightHandFinger #4 >
    }

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

## Crear pentagramas en blanco

Para crear pentagramas en blanco, genere compases vacíos y después elimine el grabador de números de compás `Bar_number_engraver` del contexto `Score`, y los grabadores de la indicación de compás `Time_signature_engraver`, de la clave `Clef_engraver` y de los compases `Bar_engraver` del contexto de `Staff`.

    #(set-global-staff-size 20)

    \score {
      {
        \repeat unfold 12 { s1 \break }
      }
      \layout {
        indent = 0\in
        \context {
          \Staff
          \remove "Time_signature_engraver"
          \remove "Clef_engraver"
          \remove "Bar_engraver"
        }
        \context {
          \Score
          \remove "Bar_number_engraver"
        }
      }
    }

    % uncomment these lines for "letter" size
    %{
    \paper {
      #(set-paper-size "letter")
      ragged-last-bottom = ##f
      line-width = 7.5\in
      left-margin = 0.5\in
      bottom-margin = 0.25\in
      top-margin = 0.25\in
    }
    %}

    % uncomment these lines for "A4" size
    %{
    \paper {
      #(set-paper-size "a4")
      ragged-last-bottom = ##f
      line-width = 180
      left-margin = 15
      bottom-margin = 10
      top-margin = 10
    }
    %}

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

## Dirección predeterminada de las plicas sobre la tercera línea del pentagrama

La dirección predeterminada de las plicas sobre la tercera línea del pentagrama está determinada por la propiedad `neutral-direction` del objeto `Stem`.

    \relative c'' {
      a4 b c b
      \override Stem.neutral-direction = #up
      a4 b c b
      \override Stem.neutral-direction = #down
      a4 b c b
    }

## Different font size settings for instrumentName and shortInstrumentName

Choose different font sizes for instrumentName and shortInstrumentName as a context override.

    InstrumentNameFontSize =
    #(define-music-function (font-size-pair)(pair?)
    "Sets the @code{font-size} of @code{InstrumentName}.
    The font-size for the initial @code{instrumentName} is taken from the first
    value in @var{font-size-pair}.  @code{shortInstrumentName} will get the second
    value of @var{font-size-pair}.
    "

    ;; This code could be changed/extended to set different values for each
    ;; occurance of `shortInstrumentName'

    #{
      \override InstrumentName.after-line-breaking =
        #(lambda (grob)
           (let* ((orig (ly:grob-original grob))
                  (siblings (if (ly:grob? orig)
                                (ly:spanner-broken-into orig)
                                '())))
             (if (pair? siblings)
                 (begin
                   (ly:grob-set-property!
                     (car siblings)
                     'font-size
                     (car font-size-pair))
                   (for-each
                     (lambda (g)
                       (ly:grob-set-property! g 'font-size (cdr font-size-pair)))
                     (cdr siblings))))))
    #})

    \layout {
      \context {
        \Staff
        \InstrumentNameFontSize #'(6 . -3)
      }
    }

    \new StaffGroup <<
      \new Staff
         \with {
           instrumentName = "Flute"
           shortInstrumentName = "Fl."
         }
         { c''1 \break c'' \break c'' }
      \new Staff
       \with {
         instrumentName = "Violin"
         shortInstrumentName = "Vl."
       }
       { c''1 \break c'' \break c'' }
    >>

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

## Trazar circunferencias alrededor de la cabeza de las notas

He aquí cómo rodear una nota con una circunferencia.

    circle =
    \once \override NoteHead.stencil = #(lambda (grob)
        (let* ((note (ly:note-head::print grob))
               (combo-stencil (ly:stencil-add
                   note
                   (circle-stencil note 0.1 0.8))))
              (ly:make-stencil (ly:stencil-expr combo-stencil)
                (ly:stencil-extent note X)
                (ly:stencil-extent note Y))))

    { \circle c'' }

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

## Empotrar PostScript nativo dentro de un bloque \markup

Se puede insertar códico PostScript directamente dentro de un bloque `\markup`.

    % PostScript is a registered trademark of Adobe Systems Inc.

    \relative c'' {
      a4-\markup { \postscript "3 4 moveto 5 3 rlineto stroke" }
      -\markup { \postscript "[ 0 1 ] 0 setdash 3 5 moveto 5 -3 rlineto stroke " }

      b4-\markup { \postscript "3 4 moveto 0 0 1 2 8 4 20 3.5 rcurveto stroke" }
      s2
      a'1
    }

## Líneas de rejilla: modificar su aspecto

Se puede cambiar el aspecto de las líneas de rejilla sobreescribiendo algunas de sus propiedades.

    \score {
      \new ChoirStaff <<
        \new Staff {
          \relative c'' {
            \stemUp
            c'4. d8 e8 f g4
          }
        }
        \new Staff {
          \relative c {
            % this moves them up one staff space from the default position
            \override Score.GridLine.extra-offset = #'(0.0 . 1.0)
            \stemDown
            \clef bass
            \once \override Score.GridLine.thickness = #5.0
            c4
            \once \override Score.GridLine.thickness = #1.0
            g'4
            \once \override Score.GridLine.thickness = #3.0
            f4
            \once \override Score.GridLine.thickness = #5.0
            e4
          }
        }
      >>
      \layout {
        \context {
          \Staff
          % set up grids
          \consists "Grid_point_engraver"
          % set the grid interval to one quarter note
          gridInterval = #(ly:make-moment 1/4)
        }
        \context {
          \Score
          \consists "Grid_line_span_engraver"
          % this moves them to the right half a staff space
          \override NoteColumn.X-offset = #-0.5
        }
      }
    }

## Líneas de rejilla: destacar ritmos y la relación temporal entre notas

Se pueden trazar líneas verticales normales entre pentagramas para mostrar la relación entre notas; sin embargo, en caso de música monofónica, podemos hacer invisible el segundo pentagrama, y que las líneas sean más cortas, como en este fragmento de código.

    \score {
      \new ChoirStaff {
        \relative c'' <<
          \new Staff {
            \time 12/8
            \stemUp
            c4. d8 e8 f g4 f8 e8. d16 c8
          }
          \new Staff {
            % hides staff and notes so that only the grid lines are visible
            \hideNotes
            \hide Staff.BarLine
            \override Staff.StaffSymbol.line-count = #0
            \hide Staff.TimeSignature
            \hide Staff.Clef

            % dummy notes to force regular note spacing
            \once  \override Score.GridLine.thickness = #4.0
            c8 c c
            \once  \override Score.GridLine.thickness = #3.0
            c8 c c
            \once  \override Score.GridLine.thickness = #4.0
            c8 c c
            \once  \override Score.GridLine.thickness = #3.0
            c8 c c
          }
        >>
      }
      \layout {
        \context {
          \Score
          \consists "Grid_line_span_engraver"
          % center grid lines horizontally below note heads
          \override NoteColumn.X-offset = #-0.5
        }
        \context {
          \Staff
          \consists "Grid_point_engraver"
          gridInterval = #(ly:make-moment 1/8)
          % set line length and positioning:
          % two staff spaces above center line on hidden staff
          % to four spaces below center line on visible staff
          \override GridPoint.Y-extent = #'(2 . -4)
        }
        ragged-right = ##t
      }
    }

## Hammer on and pull off

Hammer-on and pull-off can be obtained using slurs.

    \new TabStaff {
      \relative c' {
        d4( e\2)
        a( g)
      }
    }

## Hammer on and pull off using chords

When using hammer-on or pull-off with chorded notes, only a single arc is drawn. However “double arcs” are possible by setting the `doubleSlurs` property to `#t`.

    \new TabStaff {
      \relative c' {
        % chord hammer-on and pull-off
        \set doubleSlurs = ##t
        <g' b>8( <a c> <g b>)
      }
    }

## Hammer on and pull off using voices

The arc of hammer-on and pull-off is upwards in voices one and three and downwards in voices two and four:

    \new TabStaff {
      \relative c' {
        << { \voiceOne g2( a) }
        \\ { \voiceTwo a,( b) }
        >> \oneVoice
      }
    }

## Hacer unas líneas del pentagrama más gruesas que las otras

Se puede engrosar una línea del pentagrama con fines pedagógicos (p.ej. la tercera línea o la de la clave de Sol). Esto se puede conseguir añadiendo más líneas muy cerca de la línea que se quiere destacar, utilizando la propiedad `line-positions` del objeto `StaffSymbol`.

    {
      \override Staff.StaffSymbol.line-positions =
        #'(-4 -2 -0.2 0 0.2 2 4)
      d'4 e' f' g'
    }

## Marking notes of spoken parts with a cross on the stem (Sprechstimme)

This example shows how to put crosses on stems. Mark the beginning of a spoken section with the `\speakOn` keyword, and end it with the `\speakOff` keyword.

    speakOn = {
      \override Stem.stencil =
        #(lambda (grob)
           (let* ((x-parent (ly:grob-parent grob X))
                  (is-rest? (ly:grob? (ly:grob-object x-parent 'rest))))
             (if is-rest?
                 empty-stencil
                 (ly:stencil-combine-at-edge
                  (ly:stem::print grob)
                  Y
                  (- (ly:grob-property grob 'direction))
                  (grob-interpret-markup grob
                                         (markup #:center-align #:fontsize -4
                                                 #:musicglyph "noteheads.s2cross"))
                  -2.3))))
    }

    speakOff = {
      \revert Stem.stencil
      \revert Flag.stencil
    }

    \score {
      \new Staff {
        \relative c'' {
          a4 b a c
          \speakOn
          g4 f r g
          b4 r d e
          \speakOff
          c4 a g f
        }
      }
    }

## Contador de compases

Este fragmento de código proporciona una solución alternativa a la producción de contadores de compás utilizando repeticiones transparentes de tipo porcentaje.

    <<
      \context Voice = "foo" {
        \clef bass
        c4 r g r
        c4 r g r
        c4 r g r
        c4 r g r
      }
      \context Voice = "foo" {
        \set countPercentRepeats = ##t
        \hide PercentRepeat
        \override PercentRepeatCounter.staff-padding = #1
        \repeat percent 4 { s1 }
      }
    >>

## Measure spanner

Measure spanners are an alternate way to print annotated brackets. As opposed to horizontal brackets, they extend between two bar lines rather than two notes. The text is displayed in the center of the bracket.

    \paper { tagline = ##f }

    \layout {
      \context {
        \Staff
        \consists Measure_spanner_engraver
      }
    }

    <<
      \new Staff \relative c'' {
        \key d \minor
        R1*2
        \tweak text "Answer"
        \startMeasureSpanner
        \tuplet 3/2 8 {
          a16[ b c] d[ c b]  c[ d e] f[ e d]
        }
        e8 a gis g
        fis f e d~ d c b e
        \stopMeasureSpanner
      }
      \new Staff \relative c' {
        \key d \minor
        \tweak text "Subject"
        \tweak direction #DOWN
        \startMeasureSpanner
        \tuplet 3/2 8 {
          d16[ e f] g[ f e] f[ g a] bes[ a g]
        }
        a8 d cis c
        b bes a g~ g f e a
        \stopMeasureSpanner
        \tweak text "Counter-subject"
        \tweak direction #DOWN
        \startMeasureSpanner
        f8 e a r r16 b, c d e fis g e
        a gis a b c fis, b a gis e a4 g8
        \stopMeasureSpanner
      }
    >>

## Numerar grupos de compases

Este fragmento de código muestra el uso del grabador `Measure_counter_engraver` para numerar grupos de compases sucesivos. Se puede numerar cualquier período de compases tanto si tiene repeticiones como si no.

Se debe añadir el grabador al contexto adecuado. Aquí se usa un contexto `Staff`; otra posibilidad sería un contexto `Dynamics`.

El contador se inicia con `\startMeasureCount` y finaliza con `\stopMeasureCount`. La numeración comienza con `1`, de forma predeterminada, pero se puede modificar este comportamiento sobreescribiendo la propiedad `count-from`.

Cuando un compás se extiende más allá de un salto de línea, el número aparece dos veces, la segunda vez entre paréntesis.

    \layout {
      \context {
        \Staff
        \consists #Measure_counter_engraver
      }
    }

    \new Staff {
      \startMeasureCount
      \repeat unfold 7 {
        c'4 d' e' f'
      }
      \stopMeasureCount
      \bar "||"
      g'4 f' e' d'
      \override Staff.MeasureCounter.count-from = #2
      \startMeasureCount
      \repeat unfold 5 {
        g'4 f' e' d'
      }
      g'4 f'
      \bar ""
      \break
      e'4 d'
      \repeat unfold 7 {
        g'4 f' e' d'
      }
      \stopMeasureCount
    }

## Posicionamiento preciso de indicaciones de digitación

Generalmente, las opciones disponibles para la digitación de los acordes funciona bien de forma predeterminada, pero si una de las indicaciones precisa colocarse de forma más exacta puede usarse el truco siguiente. Esto es especialmente útil para corregir el posicionado cuando están presentes intervalos de segunda.

    \relative c' {
      \set fingeringOrientations = #'(left)
      <c-1 d-2 a'-5>4
      <c-1 d-\tweak extra-offset #'(0 . 0.2)-2 a'-5>4
      \set fingeringOrientations = #'(down)
      <c-1 d-2 a'-5>4
      <c-\tweak extra-offset #'(0 . -1.1)-1
       d-\tweak extra-offset #'(-1.2 . -1.8)-2 a'-5>4
      \set fingeringOrientations = #'(down right up)
      <c-1 d-\tweak extra-offset #'(-0.3 . 0)-2 a'-5>4
      <c-1 d-\tweak extra-offset #'(-1 . 1.2)-2 a'-5>4
      \set fingeringOrientations = #'(up)
      <c-1 d-\tweak extra-offset #'(0 . 1.1)-2
       a'-\tweak extra-offset #'(0 . 1)-5>4
      <c-1 d-\tweak extra-offset #'(-1.2 . 1.5)-2
       a'-\tweak extra-offset #'(0 . 1.4)-5>4
    }

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

## Impresión de texto de derecha a izquierda

Es posible imprimir texto de derecha a izquierda en un elemento de marcado, como se muestra aquí.

    {
      b1^\markup {
        \line { i n g i r u m i m u s n o c t e }
      }
      f'_\markup {
        \override #'(text-direction . -1)
        \line { i n g i r u m i m u s n o c t e }
      }
    }

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

## 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 propiedad whiteout

Se puede imprimir cualquier objeto gráfico sobre un fondo blanco para enmascarar parte de los objetos que están por debajo. Esto puede ser útil para mejorar el aspecto de las colisiones en situaciones complejas cuando no es práctico reposicionar los objetos. Es necesario establecer explícitamente la propiedad de capa (`layer`) para controlar qué objetos resultan enmascarados por el fondo blanco.

En este ejemplo, la colisión de la ligadura de unión con la indicación de compás resulta mejorada enmascarando la parte de la ligadura que cruza a la indicación de compás mediante el establecimiento de la propiedad `whiteout` de `TimeSignature`. Para hacer esto, se mueve `TimeSignature` a una capa por encima de `Tie`, que se deja en la capa predeterminada de 1, y `StaffSymbol` se mueve a una capa por encima de `TimeSignature` de manera que no resulte enmascarada.

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

#### LilyPond — Snippets v2.24.4 (rama estable).