The following does what I want but requires explicit variables that have to be manually concatenated. There's got to be a way to reduce the overhead. After all, Scheme is the most powerful language in the known universe, right?
lyrfirst = \lyricmode { first two three four }
musfirst = \relative do' { do8 re mi fa }
lyrnext = \lyricmode { five six sev eight }
musnext = \relative do'' { sol la ti do }
% ...
sopmelody = \relative do {
\musfirst \musnext % ...
}
soplyrics = \lyricmode {
\lyrfirst \lyrnext % ...
}
\score {
<<
\new Voice = "Sop" {
\autoBeamOn
\sopmelody
}
\new Lyrics \lyricsto "Sop" { \soplyrics }
>>
}
Cheers,On Wed, Dec 15, 2010 at 10:41 AM, Jan Warchoł
<address@hidden> wrote:
2010/12/15 Michael Ellis <address@hidden>>
> Jan Warchol wrote "I don't know how it could be done, and i strongly recommend not doing
> this. Separating different types of content is in my opinion very
> beneficial"
> I agree that separating content is useful. As you point out, it allows one to easily recombine it in various formats. It's just that I prefer to have the computer do the work whenever possible. Let me see if I can clarify what I mean by that.
> Conceptually, I could write a preprocessor that would use special comment prefixes '%!T' and '%!!T' to take input like
> %!T These are lyr- rics
> %!!T do8 re mi fa
> %!T and a few more.
> %!!T sol la ti do
> and output the music and the lyrics in separate variable assignments
> \tenormelody = \relative do { do8 re mi fa sol la ti do }
> \tenorlyric = \lyricmode { These are ly-rics and a few more }
> and then use these in your template, right? I can code that up in Python in a heartbeat, but it's an unappealing solution for obvious reasons. Hence the query about how to do it with LilyPond and Scheme.
Ah, i understand. Yeah, this is a good idea. wish i could help with that :/
cheers,
Janek