Okay, so I've been fairly successful in implementing and tweaking. I'm
working  on the complementary function, to output a regular score with
stacked verses for book layout. Here is my re-arrangement:

#(define
(make-my-scores parser location lyrics)
(if (not (null? lyrics))
 (let* (
#{ \new Lyrics \lyricsto "sopranoAlto" { $(car lyrics) }  #}
      (make-my-scores parser location (cdr lyrics))
)
 )
)
)

seqVerses =
#(define-void-function (parser location up down title composer passage
meter lyricist copyright lyrics)
 (ly:music? ly:music? string? string? string? scheme? scheme? scheme? list?)
(let*
(
 (score
#{
        \score {
<<
 \new Staff="top" { $up }
  #(make-my-scores parser location lyrics)
\new Staff="bottom" { $down \pageBreak }
          >>
}
      #}
)
 )
      (add-score parser score)
)
)

If I leave out #(make-my-scores parser location lyrics) in the main
seqVerses function, I get the music just fine. However, when I add this, I
get guile errors. What am I missing here? I'm sure there's something
obvious that just isn't coming to mind.

Thanks,
Carl


On Wed, May 8, 2013 at 11:32 PM, Jay Anderson <horndud...@gmail.com> wrote:

> On Wed, May 8, 2013 at 12:27 PM, Carl Peterson <carlopeter...@gmail.com>
> wrote:
> > If something doesn't already exist, I suppose the question would be
> whether
> > there's a way to accomplish this by Scheme?
>
> Yes, I do something similar. This might help get you started:
>
> ========================================
> \version "2.17.16"
>
> #(define (make-my-scores parser location up down lyrics verse)
>   (if (not (null? lyrics))
>     (let* ((verseStr (string-append (number->string verse) "."))
>            (score
>       #{
>         \score
>         {
>           <<
>             \new Staff="top" { \new Voice="soprano" { \clef treble $up } }
>             \new Staff="bottom" { \new Voice="tenor" { \clef bass $down } }
>             \new Lyrics \with { alignAboveContext = "bottom" }
> \lyricsto "soprano" { \set stanza = $verseStr $(car lyrics) }
>           >>
>         }
>       #}))
>       (add-score parser score)
>       (make-my-scores parser location up down (cdr lyrics) (+ verse 1)))))
>
> seqVerses =
> #(define-void-function (parser location up down lyrics) (ly:music?
> ly:music? list?)
>   (make-my-scores parser location up down lyrics 1))
>
> soprano = \relative c' { c4 c c c | }
> tenor = \relative c { c4 c c c | }
> verseOne = \lyricmode { a b c d }
> verseTwo = \lyricmode { e f g h }
>
> \seqVerses \soprano \tenor #(list verseOne verseTwo)
>
> ========================================
>
> I think you're better off writing two separate functions instead of a
> big if/else block: one for one score with multiple verses and another,
> like the above, for multiple scores each with one verse.
>
> -----Jay
>
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to