On 2018-10-11 1:22 am, Sebastian Käppler wrote:
Hello,

I wonder if it is possible to return markup AND score from a single scheme
function, something like this:

example = #(define-scheme-function (parser location) ()
#{
    \markup "Test"
    \score {
       c'4
    }
#}
)

I created some scripts for teaching and want to include task-markup before each score. Using markup and my functions outside of scheme works, but I
couldn't get  it to work from a single function.

Seems to be that the parser cannot figure out what is meant by #{ \markup ... \score ... #} even though both of those items are permitted to appear at the top-level. With #{ \markup ... #} or #{ \score ... #}, the parser appears to do the right thing.

While there is probably some clever trick that permits #{ \markup ... \score ... #} to parse correctly, I am not seeing it. So, here are two potential options: either nest the score within the markup or vice versa:

%%%%
\version "2.19.82"

\markup "Hello, World!" \score { { a'4 b' g'2 } }

scoreInsideMarkup =
  #(define-scheme-function (label notes) (string? ly:music?)
    #{ \markup { \column { $label \score { $notes } } } #})

markupInsideScore =
  #(define-scheme-function (label notes) (string? ly:music?)
    #{ \score { { \tweak X-offset #(/ -15 1.7573)
       \mark \markup \fontsize #-2 $label $notes } } #})

\scoreInsideMarkup "Hello, World!" { a'4 b' g'2 }
\markupInsideScore "Hello, World!" { a'4 b' g'2 }
%%%%

Note that when using a RehearsalMark, a suitable adjustment to the alignment and font size is needed to match the appearance of the other two.


-- Aaron Hill

_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to