Am Sa., 12. Okt. 2024 um 20:33 Uhr schrieb Cameron Hall <camerongh...@cox.net>:
>
> In this example, I have function called "scorePart" that returns a
> staff that I use to make parts in the score, and this works. I have
> another function called "standalonePart" that returns a bookpart, which
> I'd like to use to print individual instrument parts. However, when I
> attempt to use it I get an error complaining about bad expression type.
> What is going on here that it will accept a staff but not a bookpart?
>
> Thanks,
> Cameron
>
> %%%
> \version "2.24.4"
> \header { title = "Example" }
>
> flute.name = "Flute"
> flute.key = c'
> flute.music = \fixed c'' { \key c \major c4 d e d c1 }
>
> trumpet.name = "B♭ Trumpet"
> trumpet.key = bes
> trumpet.music = \fixed c' { \key c \major c4 d c b, c1 }
>
> scorePart =
> #(define-scheme-function (instrument) (alist?)
>   #{
>     \new Staff
>     \with { instrumentName = #(ly:assoc-get 'name instrument) }
>     { #(ly:assoc-get 'music instrument) }
>   #}
> )
>
> standalonePart =
> #(define-scheme-function (instrument) (alist?)
>   #{
>     \bookpart {
>       \header { instrument = #(ly:assoc-get 'name instrument) }
>       \score {
>         \new Staff
>         \transpose #(ly:assoc-get 'key instrument) c'
>         #(ly:assoc-get 'music instrument)
>       }
>     }
>   #}
> )
>
> % Score book
> \book {
>   \header { instrument = "Concert Pitch Score" }
>   \score {
>     <<
>       \scorePart \flute
>       \scorePart \trumpet
>     >>
>   }
> }
>
> % Book containing all parts
> \book {
>   \standalonePart \flute
>   \standalonePart \trumpet
> }
> %%%
>

Hi Cameron,

iirc, there are some problems with bookpart...
Anyway, you could do:

%%%

\version "2.24.4"
\header { title = "Example" }

flute.name = "Flute"
flute.key = c'
flute.music = \fixed c'' { \key c \major c4 d e d c1 }

trumpet.name = "B♭ Trumpet"
trumpet.key = bes
trumpet.music = \fixed c' { \key c \major c4 d c b, c1 }

#(define (add-bookpart book-part)
"Add bookpart @var{book-part} to current-book or toplevel-bookparts"
;; See also: `collect-bookpart-for-book` in lily-library.scm
  (let* ((user-book (ly:parser-lookup '$current-book)))
    (if user-book
        (ly:book-add-bookpart! user-book book-part)
        (ly:parser-define!
          'toplevel-bookparts
          (cons book-part (ly:parser-lookup 'toplevel-bookparts))))))

scorePart =
#(define-scheme-function (instrument) (alist?)
  #{
    \new Staff
    \with { instrumentName = #(ly:assoc-get 'name instrument) }
    { #(ly:assoc-get 'music instrument) }
  #})

standalonePart =
#(define-void-function (instrument) (alist?)
 (add-bookpart
  #{
    \bookpart {
      \header { instrument = #(ly:assoc-get 'name instrument) }
      \score {
        \new Staff
        \transpose #(ly:assoc-get 'key instrument) c'
        #(ly:assoc-get 'music instrument)
      }
    }
  #}))

% Score book
\book {
  \header { instrument = "Concert Pitch Score" }
  \score {
    <<
      \scorePart \flute
      \scorePart \trumpet
    >>
  }
}

% Book containing all parts
\book {
  \standalonePart \flute
  \standalonePart \trumpet
}
%%%


Cheers,
  Harm

Reply via email to