输出 score 块的 Lilypond 宏



我有以下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 { } }

显然,globalSopranoAltoTenorBass定义每次都会改变,但score块保持不变。

我想在方案宏中考虑该块。然而,我尝试过的最简单的定义,

#(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)它不产生任何输出。如果我尝试在(Choral)定义中放置一个layout { }块,百合池会产生以下错误:error: syntax error, unexpected layout .

有没有一种简单的方法来编写一个宏来生成带有附加layoutscore块?

为什么是方案宏?你可以只使用 \include(这就像将文件的内容粘贴到你放置它的行中)。因此,您可以使用相同的分数块文件:

% myScoreBlock.ly file
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 { }
}

包含在具有相同变量的任何其他文件中:

% example of a piece
version "2.19.54"
global = { time 2/4 }
Soprano = relative { d2 }
Alto = relative { f2 }
Tenor = relative { e2 }
Bass = relative { g2 }
include "myScoreBlock.ly"

减小输入大小的另一个选项是使用内置模板。还有一个内置的 SATB 分数模板。

相关内容

  • 没有找到相关文章

最新更新