In Lilypond I am trying to add a mark into the lyrics that looks like a tie or a slur, to indicate that the singer should not take a breath at that point in the music. I believe the technical term is a "lyric liaison" but I could be mistaken. Here's an example that I photographed:
In this example, the singer should not breathe in bar 2, indicated by a "slur" mark spanning from the end of the word "high" to the start of the word "in".
I found that you can use the "~" character to insert an elision into the lyrics, but this is primarily used to assign two words to the same note. I then tried to trick Lilypond into doing what I wanted by eliding the word "high" to a space, which is almost correct, but the alignment is off. The slur starts before the end of the word "high" and stops in the space between "high" and "in".
\relative {
\key bes \major
\time 2/2
bes'4 bes c8 bes a g | f2. f4 | g bes bes a | bes2 bes
}
\addlyrics {Ding dong! mer -- ri -- ly on high~ in heav'n the bells are ring -- ing:}
Putting the space and the tilde the other way around produces a similar effect: just as wrong but in the opposite direction.
What am I doing wrong?
Update 01 March 23
I seem to be getting somewhere but now I'm getting thwarted and frustrated by a lack of understanding of Scheme syntax.
I've been able to kludge a curved path into the lyrics and then muck about with the alignment to realign the text syllable back up with the note.
\version "2.22.1"
#(define-markup-command (liaise layout props text) (markup?)
"Put a liaison mark after syllable in lyric text"
(interpret-markup layout props
#{
\markup {
#text
\override #'(filled . #t)
\path #0.10 #'(
(moveto 0 0)
(curveto 2 -1 4 -1 6 0)
(curveto 4 -0.9 2 -0.9 0 0)
)
}
#}
)
)
\relative c' { c4 d e f | g2 a}
\addlyrics { one two three four
\once \override LyricText.self-alignment-X = #-0.8
\markup \liaise five
six }
This achieves the following result:
But there are still a few things that I can't quite work out.
- I would like to make the
\once \override LyricText.self-alignment-X = #-0.8
bit adjustable in the markup function, but I can't figure out a) how to put this line into the function without throwing errors or b) how to make the#-0.8
bit a user-definable parameter or property. - I would like to be able to have the user adjust the length of the curve manually, which means I also need to calculate 1/3 and 2/3 of the length in order to put in the control points in the
curveto
commands, but again, I haven't the foggiest how to do this and any attempt I make just results in syntax errors.
Any help?