"Неверное количество аргументов для # " при попытке выполнить фрагмент из документации Lilypond

Я пытаюсь использовать код из фрагмента, найденного в официальной документации «Отображение полей» (прокрутите вниз до «Известные проблемы и предупреждения»):

\version "2.18.2"

forget = #(define-music-function (music) (ly:music?) #{
  \accidentalStyle forget
  #music
  \accidentalStyle modern
#})
{
  \accidentalStyle modern
  \time 2/4
  \repeat volta 2 {
    c'2
  }
  \alternative {
     \repeat volta 1 { cis' }
     \repeat volta 2 { \forget c' }
  }
}

Когда я компилирую его, я получаю следующую ошибку:

Changing working directory to: `/tmp'
Processing `/tmp/11678868158475380898.ly'
Parsing.../usr/share/lilypond/2.18.2/scm/ly-syntax-constructors.scm:56:23: In expression (apply (ly:music-function-extract fun) parser ...):
/usr/share/lilypond/2.18.2/scm/ly-syntax-constructors.scm:56:23: Wrong number of arguments to #<procedure #f (music)>

Я получаю аналогичную ошибку при попытке использовать другие функции замены, например те, что представлены здесь . Я не знаком со схемой, поэтому я не могу отлаживать/анализировать, что я делаю неправильно.

Я использую Lilypond 2.18.2 на Raspberry Pi, если это имеет значение.

Ответы (2)

При использовании примеров из руководства для версии 2.23 для LilyPond версии 2.18 вы можете ожидать, что некоторые вещи не будут работать.

Как бы вы ни пришли к этой ссылке, попробуйте заменить v2.23строку в ее URL на v2.18и взять оттуда код примера.

Честно говоря, я не ожидал таких серьезных структурных изменений (учитывая, насколько уже взрослая Lilypond). Действительно, пришлось заменить (music)на (parser location music)и теперь работает.

Стоит отметить, что код в руководстве LilyPond выводит результаты на печать непосредственно в процессе создания файлов документации в формате HTML и PDF. Это означает, что нет никакого кода с напечатанными результатами, который "случайно" не смог бы скомпилироваться абсолютно как есть с версией, соответствующей руководству. Что может случиться, так это то, что напечатанные результаты отличаются от того, что вы ожидаете от текстового описания: в этом случае это может быть ошибка документации. Но не может случиться так, что он вообще не скомпилируется или выдаст другой визуальный результат, если вы используете правильную версию.

Вы также изменили содержимое \alternative, заменив его чем-то синтаксически допустимым для 2.18, но контекстуально бессмысленным, что привело к абсурдному печатному результату.

Да, спасибо за предупреждение. Вот что произойдет, если вы несколько раз попробуете что-нибудь, прежде чем отправить свой код на Stack Exchange... Я подумал, что Lilypond может не распознать основной блок как музыкальное выражение, поскольку ему не хватает команды \relative. (Я знал об абсолютной нотации, но подумал, что вам также нужно будет объявить это конкретно.)