Макрос Lilypond, который выводит блок \ Score
У меня есть следующий исходный файл 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 { }
блок в (Choral)
Определение lilypond выдает следующую ошибку: error: syntax error, unexpected \layout
,
Есть ли простой способ написать макрос, который производит \score
блок с прикрепленным \layout
?
1 ответ
Почему макрос Scheme? Вы можете просто использовать \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.