LilyPond - Повторите с частичным измерением в конце

Это демонстрирует проблему:

\relative c' {
    c4 d e f
    d e
    \repeat volta 2 { 
        f g
        a, b c d
    }
    \alternative {
        {
            e2
        }
        {
            e2~ e2
        }
    }
}

И вот картинка:изображение из кода выше

Мне нужно, чтобы первая концовка была на полтакта, а вторая на целый такт, чтобы музыкально получилось. Опубликованный пример см. В Idumea from the Sacred Harp. Хотя это в 3/2, идея та же:

Идумея из «Священной арфы»

Судя по всему, LilyPond рассматривает вторую концовку как вторую половину такта, начинающегося в первой концовке. Думаю, я не ожидаю, что у LilyPond будет больше здравого смысла; было бы очень тонко сделать все правильно, но как я могу убедить Лилипонд поступить правильно здесь?

Начало повторения в середине такта, не являющегося ритмом пьесы, несколько странно как для lilypond, так и для читателей-людей. Вы уверены, что не хотите смещать метку повтора на конец следующего такта и повторять их в конце секции повторения 1? Также я настоятельно рекомендую использовать штриховые символы в исходниках lilypond для проверки.
Я уверен, что смещение знака повторения неприемлемо. См. пример, указанный в вопросе, и многие другие примеры из этой книги. Спасибо за предложение символа бара; Я постараюсь не забыть взять его!

Ответы (1)

Ну, это работает:

\relative c' {
    c4 d e f
    d e
    \repeat volta 2 {
            f g
        a, b c d
    }
    \alternative {
        {
            e2
        }
        {
            \set Timing.measureLength = #(ly:make-moment 6/4)
            e2~ e2
        }
    }
}

изображение из кода выше

(И, конечно, вы можете вернуть это e2~ e2обратно в e1.)

Да, это работает, но единственный ли это способ? Есть ли способ для lilypond увидеть, что первый конечный такт заканчивается второй половиной такта 2, а не вторым окончанием?
Обратите внимание, что в версии "2.19.81" код исходного вопроса дает прямой результат этого ответа. Таким образом, нет необходимости настраивать MeasureLength, если вы используете версию для разработки.