Descenders affecting line height calculation for lyrics in columns?

Dear list,

I've just discovered Lilypond. Playing, I stumbled on the following
snippet at
<lilypond.org/doc/v2.22/Documentation/notation/stanzas> for
displaying stanzas of lyrics in columns, and tried to use it. In the
song, there are some lines with descenders (p, g, q going below the
baseline). I show the effect here by inserting "q" in the left column.
Lilypond seems to calculate the "real" line height of the writing, not
some kind of nominal text line height, so that a line with descenders is
higher than a line without. Already with the four lines in the example,
this leads to perceivable vertical misalignment between the left and
right columns. With longer stanzas, it may look even worse.


(This is Lilypond 2.23.5, running Guile 2.2 on Fedora 35.)

Is this the expected behaviour? If so, what is the recommended way to
circumvent this: Using Lilypond from, e.g., LaTeX, and do the text
typesetting there? Or is there some tweak to line height calculation,
or a way to add "phantom" maximum underlength letters? I've spent some
time on the manuals (and the web), but couldn't find any solutions or
even discussions of this behaviour. (Maybe I am using the wrong mental
model and terminology.)


Secondly, the stanza commands seem to call for defining a two-argument
macro like columnstanza, but I got lost in the documentation on the
different ways and the different types of objects. I would be grateful
for a pointer on which kind of definition to use and how to define it.
(It feels as if it should be easy, but all attempts I made lead to type
errors or similar which are difficult to track in the manual. So maybe
it is not easy. Then just tell me. ;-).)


Grateful for any hints,
  Bernhard



#(set-default-paper-size "a6") % just to make alignment more obvious
melody = relative {
  c'4 c c c | d d d d
}

text = lyricmode {
  set stanza = "1." This is verse one.
  It has two lines.
}

score{ <<
    new Voice = "one" { melody }
    new Lyrics lyricsto "one" text
   >>
  layout { }
}

markup {
  fill-line {
    hspace #0.1 % moves the column off the left margin;
     % can be removed if space on the page is tight
     column {
      line { bold "2."
        column {
          "q This is verse two."
          "q It has two lines."
        }
      }
      combine null vspace #0.1 % adds vertical spacing between verses
      line { bold "3."
        column {
          "q This is verse three."
          "q It has two lines."
        }
      }
    }
    hspace #0.1 % adds horizontal spacing between columns;
    column {
      line { bold "4."
        column {
          "This is verse four."
          "It has two lines."
        }
      }
      combine null vspace #0.1 % adds vertical spacing between verses
      line { bold "5."
        column {
          "This is verse five."
          "It has two lines."
        }
      }
    }
  hspace #0.1 % gives some extra space on the right margin;
  % can be removed if page space is tight
  }
}

Read more here: Source link