Как параметризовать текст в повторно используемом разделе заметок Lilypond?

Вот короткий фрагмент Lilypond, который, как мне кажется, выражает намерение того, что я хочу сделать.

verseNotes = \relative c' {
    d^\markup { \verseText } d d d16 d d8 a r4 |
    cis8 cis cis cis16 cis cis8 a r4 |
}

verseSection = \relative c' {
    \repeat volta 2 {
        \verseNotes
    }
    gis,1 |
    gis4. b8~b2 |
    \repeat volta 3 {
        verseText = "Verse (repeat 2x)"
        \verseNotes
    }
}

\relative c' {
    verseText = "Verse"
    \verseSection
}

Это, конечно, ошибки.

Я думаю, что причина в чем-то вроде verseNotesпривязки во время анализа и \verseTextотсутствия ценности в то время. Я хотел бы повторно использовать переменную verseNotes, но с другими значениями verseText.

Я думаю, что мне нужен «динамический» эквивалент какой-то функции, которой я передаю текстовый параметр. Я вижу различные разделы в документации Lilypond, выражающие вещи в Scheme, но это, вероятно, последнее, что я хочу делать при вводе музыки.

Ответы (2)

Да, вы правы — вы должны объявить переменную перед ее использованием. Надеюсь это поможет:

VerseText = "Стих"

    verseNotes = \относительный c' {
        d8^\markup { \verseText } dd d16 d d8 a r4 |
        цис8 цис цис цис16 цис цис8 а r4 |
    }

    verseSection = \relative c' {
        \повторить вольта 2 {
            \verseПримечания
        }
        гис'1 |
        гис4. b8~b2 |
    }       

    \счет {
     \новый посох \verseSection
    }

Дальнейшее решение Питера, 7 ноября 2013 г.:

verseNotes = \относительный c' {
    d8 дд d16 d d8 a r4 |
    цис8 цис цис цис16 цис цис8 а r4 |
}

verseSection = \relative c' {
    \override Score.RehearsalMark #'self-alignment-X = #LEFT
    \mark \markup { \normalsize "Стих" }
    \повторить вольта 2 {
        \verseПримечания
    }

    гис'1 |
    гис4. b8~b2 |
    \mark \markup { \normalsize "Стих (повторить 2 раза)" }
    \повторить вольта 3 {
        \verseПримечания
    }
}

\счет {
    \новый посох \verseSection
}
Я вижу различные разделы в документации Lilypond, выражающие вещи в Scheme, но это, вероятно, последнее, что я хочу делать при вводе музыки.

Впрочем, лучше привыкнуть. На чистом уровне LilyPond вы можете назначать только статические музыкальные выражения. Хотя можно внести некоторые изменения в тех, кто использует \tag, на самом деле это не параметризация.

Обычно вам не нужно «выражать материал» при вводе музыки и наоборот: вполне возможно написать Scheme для схематических вещей (а именно параметризации) и музыку для музыкальных вещей, используя ... #{разумно #}.

В этом случае это будет выглядеть (после небольших исправлений октавы, длительности и контекста) примерно так:

стихПримечания =
#(определить-музыкальную-функцию (парсер расположение verseText) (разметка?)
  #{
    \относительный с' {
      d8^\markup { #verseText } dd d16 d d8 a r4 |
      цис8 цис цис цис16 цис цис8 а r4 |
    }
  #})

Раздел стихов =
#(определить-музыкальную-функцию (парсер расположение verseText) (разметка?)
  #{
     \относительный с' {
       \повторить вольта 2 {
          \verseNotes #verseText
       }
       гис1 |
       гис4. b8~b2 |
       \повторить вольта 3 {
          \verseNotes "Стих (повторить 2 раза)"
       }
     }
  #})

\относительный с' {
    \new Staff \verseРаздел "Стих"
}

Как видите, код Scheme сжимается в отдельные строки, которые достаточно легко выучить наизусть и которые вызывают умеренное раздражение.

Спасибо! Это действительно полезно и так трудно найти!