LilyPond snippets: Spacing

# Spacing

Spacing issues

## Adjusting lyrics vertical spacing

This snippet shows how to bring the lyrics line closer to the staff.

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

      % Reducing the minimum space below the staff and above the lyrics:
      \new Staff {
        \new Voice = melody \relative c' {
          c4 d e f
          g4 f e d
          c1
        }
      }
      \new Lyrics \with {
        \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #'((basic-distance . 1))
      }
      \lyricsto melody { aa aa aa aa aa aa aa aa aa }
    >>

## Allowing fingerings to be printed inside the staff

By default, vertically oriented fingerings are positioned outside the staff. However, this behavior can be canceled. Note: you must use a chord construct <>, even if it is only a single note.

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

## Page label

Page labels may be placed inside music or at top-level, and referred to in markups.

    #(set-default-paper-size "a6")

    #(define-markup-command (toc-line layout props label text)
      (symbol? markup?)
      (interpret-markup layout props
       (markup #:fill-line (text #:page-ref label "8" "?"))))

    \book {
      \markup \huge \fill-line { \null Title Page \null }

      \pageBreak

      \label #'toc
      \markup \column {
        \large \fill-line { \null Table of contents \null }
        \toc-line #'toc "Table of contents"
        \toc-line #'firstScore "First Score"
        \toc-line #'markA "Mark A"
        \toc-line #'markB "Mark B"
        \toc-line #'markC "Mark C"
        \toc-line #'unknown "Unknown label"
      }

      \pageBreak

      \label #'firstScore
      \score {
        \new Staff \relative c' {
          c2 c
          \mark \markup {
            A (page \concat { \page-ref #'markA "0" "?" ) }
          } \label #'markA
          c2 c
          \pageBreak
          \mark "B" \label #'markB
          d2 d
          d2 d
          \once \override Score.RehearsalMark #'break-visibility =
            #begin-of-line-invisible
          \mark "C" \label #'markC
        }
        \header { piece = "First score" }
      }
    }

## Proportional strict notespacing

If `strict-note-spacing` is set spacing of notes is not influenced by bars or clefs within a system. Rather, they are placed just before the note that occurs at the same time. This may cause collisions.

    \relative c'' <<
      \override Score.SpacingSpanner #'strict-note-spacing = ##t
      \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
      \new Staff {
        c8[ c \clef alto c c \grace { d16 } c8 c] c4
        c2 \grace { c16[ c16] } c2
      }
      \new Staff {
        c2 \times 2/3 { c8 \clef bass cis,, c } c4
        c1
      }
    >>

## Vertically aligned dynamics and textscripts

By setting the `'Y-extent` property to a suitable value, all `DynamicLineSpanner` objects (hairpins and dynamic texts) can be aligned to a common reference point, regardless of their actual extent. This way, every element will be vertically aligned, thus producing a more pleasing output.

The same idea is used to align the text scripts along their baseline.

    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 = #2.0
      \override DynamicLineSpanner #'Y-extent = #'(-1.5 . 1.5)
      \override TextScript #'Y-extent = #'(-1.5 . 1.5)
      \music
    }

## Vertically aligning ossias and lyrics

This snippet demonstrates the use of the context properties `alignBelowContext` and `alignAboveContext` to control the positioning of lyrics and ossias.

    \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"
          } {
            \times 4/6 {
              \override TextScript #'padding = #3
              c8[^"ossia above" d e d e f]
            }
          }
        >>
      }
    >>

#### LilyPond — Snippets