On 2015-05-21 15:30, tisimst wrote:
Kaj,

On Thu, May 21, 2015 at 2:05 AM, Kaj [via Lilypond] <[hidden email] </user/SendEmail.jtp?type=node&node=176853&i=0>> 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:/

    /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? <http://lilypond.1069038.n5.nabble.com/Putting-lyrics-below-its-staff-tp176837p176853.html> Sent from the User mailing list archive <http://lilypond.1069038.n5.nabble.com/User-f3.html> at Nabble.com.

Phil and Abraham

Thank you for your comments, and for the example showing a solution to my problem. At least it solves this much simplified example. However I get an impression it being a "fix" for just this, so I made an, a wee more complicated, but never the less much realistic example. Sorry, of course it will occupy a lot of valuable space on this mailing list, but to illustrate my thought I see no other way to go. It shows a case with several regions with note systems containing more than one staff, but with regions between them with just one staff. Generally there could of course also be a base system with a number of staves, more than one, which is expanded with excess staves. It follows a quite simple algorithm, inspired from the description of ossia staves (NR 1.6.2). At every place, where an extra staff is wanted, you include a "\new Staff" command inside marks for simultanous music (<< >>). The top staff in all systems is however one single, though broken at special positions. This is obvious from the observation that only the new staves get a time signature as, for the top staff, no change is done. By removing the \break in the music definitions, mA..mD, one can clearly see, that it in fact is one single sequence of measures.

The example shows, that LilyPond perfectly understands the implied structure and it also understands which lyric belongs to which note. So that is not the problem. A minor issue is that the lyrics for the top staff is broken into separate lines, one for each individual "\new Lyrics". This can certainly be solved by a clever definition of the string for this staff (and maybe every staff). But the main issue is, that at least I have not found any method to put the text below the respective staff, exept for the top staff, despite this would be the normal behaviour according to the manual. And that was my wish by calling for assistance on this mailing list.

Here is the new example:

\version "2.18.2"

% The next line does not belong to the task, but
% just to get shorter music lines in the printout.
\paper { ragged-right = ##t }

% Music definitions, mA..mD for the  top staff:
mA = \relative c' { c4 c c c \break }
mB = \relative c' { d4 d d d \break }
mC = \relative c' { e4 e e e \break }
mD = \relative c' { f4 f f f \break }

mE = \relative c''' { g4 g g g }
mF = \relative c''' { a4 a a a }
mG = \relative c''' { b4 b b b }

% Lyrics for each part of the staves:
tA = \lyricmode { A A A A }
tB = \lyricmode { B B B B }
tC = \lyricmode { C C C C }
tD = \lyricmode { D D D D }
tE = \lyricmode { E E E E }
tF = \lyricmode { F F F F }
tG = \lyricmode { G G G G }

\score {
  \new ChoirStaff
  <<
    {
      \new Staff = "sAB" {
        <<
          {
            <<
              \new Voice = "vA" { \mA }
            >>
            <<
              \new Voice = "vB" { \mB }
              \new Staff = "sB" {
                \new Voice = "vE" { \mE }
              }
            >>
            <<
              \new Voice = "vC" { \mC }
            >>
            <<
              \new Voice = "vD" { \mD }
              \new Staff = "sF" <<
                \new Voice = "vF" { \mF }
              >>
              \new Staff = "sG" <<
                \new Voice = "vG" { \mG }
              >>
            >>
          }
        >>
      }
    }
      \new Lyrics = "lA" \lyricsto "vA" { \tA }
      \new Lyrics = "lB" \lyricsto "vB" { \tB }
      \new Lyrics = "lC" \lyricsto "vC" { \tC }
      \new Lyrics = "lD" \lyricsto "vD" { \tD }
      \new Lyrics = "lE" \lyricsto "vE" { \tE }
      \new Lyrics = "lF" \lyricsto "vF" { \tF }
      \new Lyrics = "lG" \lyricsto "vG" { \tG }
  >>

  \layout { indent = #0 }
}



/Kaj


_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to