lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Putting lyrics below its staff?


From: tisimst
Subject: Re: Putting lyrics below its staff?
Date: Thu, 21 May 2015 06:30:43 -0700 (MST)

Kaj,

On Thu, May 21, 2015 at 2:05 AM, Kaj [via Lilypond] <[hidden email]> wrote:
I am working on a piece of choir music. It consists of two parts, the first of which is written on one staff, and the second two staves. The upper staff in part two is a continuation of the staff in part one. All the staves are accompanied with lyrics. My wish is that this lyrics should be written below its respective staff. However, whatever I do, the lyrics for the lower staff in part two, which I denote C, is written above the staff, hence directly below the lyrics for the upper staff (B). I suspect there should be a simple solution for this, and in the handbook they say that the lyrics is normally written below the staff. To get it above the staff you would have to do some overrides.

In the code you can see the commented lines, which are part of all the tries I have done, but nothing seems to help. To me it almost looks as if the behaviour is hard coded, just because of putting the lyrics between the staves is the normal. After an experience like this I feel strengthened in a thought, grown in my head, that LilyPond will never ever be a tool for everybody. It is too complicated and inconsistent to be used by anybody else than the absolute top expert. Which is a pity, as it produces an excellent result.

This is the result of my efforts so far:

\version "2.18.2"

\paper { ragged-right = ##t }

mA = \relative c' { c4 d e f }
mB = \relative c'' { g4 a b c }
mC = \relative c' { c'4 b a8 g f4 }
mAB = \relative c' { c4 d e f g4 a b c }

tA = \lyricmode { A B C D }
tB = \lyricmode { E F G H }
tC = \lyricmode { i j k l m }
tAB = \lyricmode { A B C D E F G H }

xA = { s1*1 \break }
xB = { s1*1 }
xC = { s1*1 }

\score {
  \new ChoirStaff
  <<
    \new Staff = "sAB" {
      <<
        \new Voice = "vAB" { \mAB }
        {
          \new Voice = "vA" { \xA }
          <<
            \new Voice = "vB" { \xB }
            \new Staff = "sC" {
              \new Voice = "vC" { \mC }
            }
          >>
        }
      >>
    }
    \new Lyrics = "lAB" \lyricsto "vAB" { \tAB }
    \new Lyrics = "lC" \with {
%     alignBelowContext = #"sC"
%     \override VerticalAxisGroup #'staff-affinity = #UP
    }
    { \lyricsto "vC" { \tC } }
  >>
 
  \layout { indent = #0 }
}


which produces this:
--- (Image from LilyPond) ---
/Kaj

I think LilyPond is just getting confused by all the nested voices/staves. As Phil suggested, a little restructuring of your example score can bring a nice solution to light:

\version "2.18.2"

mA = \relative c' { 
  c4 d e f | \break 
  g a b c 
}
mB = \relative c'' { 
  s1 | 
  c4 b a8 g f4 
}
tA = \lyricmode { A B C D E F G H }
tB = \lyricmode { i j k l m }

\score {
  \new ChoirStaff <<
    \new Staff {
      \new Voice = "vA" \mA
    }
    \new Lyrics \lyricsto "vA" \tA
    \new Staff \with {
      \RemoveEmptyStaves
      \override VerticalAxisGroup.remove-first = ##t
    }{
      \new Voice = "vB" \mB
    }
    \new Lyrics \lyricsto "vB" \tB
  >>
  \layout {
    indent = 0
  }
}

There are a few things I'd point out:
  1. All \new Staff declarations are only within the ChoirStaff
  2. Each staff gets its own voice and the second voice gets a spacer rest before its notes.
  3. The second staff's empty measures are removed via two overrides \RemoveEmptyStaves and \override VerticalAxisGroup.remove-first = ##t
  4. Each set of Lyrics is placed immediately after its staff so there is no need to direct it above or below anything
I hope that this provides a clearer logic to how to construct a score that is quite obvious to what's happening (to the user) and relatively mistake-proof in interpretation (for LilyPond).

Regards,
Abraham


View this message in context: Re: Putting lyrics below its staff?
Sent from the User mailing list archive at Nabble.com.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]