Thanks, Michael - that's a really nice solution. I wonder if it would be possible to create such a function which automatically puts the = sign over the barline, and the notes to its right and left.
Alasdair On Sun, 19 Nov 2023, 1:41 am Michael Werner, <reznae...@gmail.com> wrote: > Hi Alasdair, > > On Fri, Nov 17, 2023 at 9:28 AM Alasdair McAndrew <amc...@gmail.com> > wrote: > >> I'm typesetting some 16th century music which has a lot of time changes. >> And I'd like to add equivalences of notes across bar-lines, to indicate for >> example, that a quarter note in one bar is equal in time to a half note in >> the next bar. >> >> The sort of notation I want is in this snippet: >> >> >> https://lilypond.org/doc/v2.24/Documentation/snippets/rhythms#rhythms-creating-metronome-marks-in-markup-mode >> >> However, I want that equals sign to be aligned with the barline. I have >> two questions: (a) how can I do this? and (b) is there an easier way than >> the markup given in the snippet? >> > > In the time-honored tradition of "There's More Than One Way To Do It ™", > here's another option: > > \version "2.25.10" > > tempoChange = > #(define-music-function (alignValue firstNote secondNote) (number? > ly:duration? ly:duration?) > #{ > \tweak self-alignment-X #alignValue \textEndMark \markup { > \concat { > ( > \fontsize #-3 \general-align #Y #DOWN \note { #firstNote } #UP > " = " > \fontsize #-3 \general-align #Y #DOWN \note { #secondNote } #UP > ) > } } > #} ) > > music = \relative c'' { > c4 c c c | d d d d \tempoChange 0 4 2 | b a a b | d d d d | \break > d d d e | f f f f | a f e d | e e e e \tempoChange -0.15 2 8. | \break > e e a g | f f f f | e d d d | b b b b > \fine > } > > \new Staff { > \new Voice { > \music > } > } > > producing: > > [image: image.png] > > It's still using the code from the snippet you referenced (slightly > modified), but wrapped into a function. This way you can tuck the function > definition away somewhere (such as the top of your source file or off in a > separate include file, whatever works best for you) so that the function > code itself is out of the way, but can still be used with a single function > call. > > The first argument to the function call is an alignment value - 0 is > center, positive moves it left and negative moves it right.. The way the > code works, if the two notes are of the same size (such as a quarter note > and a half note) then the markup will be centered with an alignment value > of 0. But if one of the notes is larger (such as in the second example) > then the entire thing shifts over a bit. That's why in the second example > the first argument is -0.15 - that's just enough to put the markup centered > again. > > The second and third arguments are simply note durations. This function > can only handle single notes, so no triplets or anything like that. > > One other thing to note - this function uses the \textEndMark function. > There's also a \textMark function. The two work similarly, with the > exception of how they handle line breaks. The one I'm using here > (\textEndMark) puts the markup at the end of the system before the break. > The other one (\textMark) puts the markup at the beginning of the system > after the line break. So depending on which way you want things handled you > may or may not need to change which of the two you use. > -- > Michael > >