我有以下 Lilypond 源文件,其中包含以下形式的几个块:
global = \relative { ... }
Soprano = \relative { ... }
Alto = \relative { ... } % ditto Tenor, Bass
\score { \new StaffGroup <<
\new Staff << \clef "G" \global \Soprano >>
\new Staff << \clef "G" \global \Alto >>
\new Staff << \clef "G_8" \global \Tenor >>
\new Staff << \clef "F" \global \Bass >>
>> \layout { } }
显然global
, Soprano
, Alto
, Tenor
,Bass
定义每次都会改变,但\score
块保持不变。
我想在 Scheme 宏中考虑该块。但是,我尝试过的最简单的定义,
#(define (Choral) (ly:make-score #{ \new StaffGroup <<
\new Staff << \clef "G" \global \Soprano >>
\new Staff << \clef "G" \global \Alto >>
\new Staff << \clef "G_8" \global \Tenor >>
\new Staff << \clef "F" \global \Bass >>
>> #} ))
有以下不便之处:(1)它必须被调用#(Choral)
而不是更自然的\Choral
,更糟糕的是,(2)它不会产生任何输出。如果我尝试\layout { }
在定义 lilypond 中放置一个块,(Choral)
则会产生以下错误:error: syntax error, unexpected \layout
.
有没有一种简单的方法来编写一个产生\score
附加块的宏\layout
?