Мне не хватает чего-то простого, я часами искал документы безрезультатно. Иногда LilyPond может сильно разочаровывать.
Посмотри на эту картинку:
Очевидно, что ppp пересекается с тактовой чертой. Согласно документации, я пытался использовать DynamicText.extra-spacing-width
, но это не дало никакого эффекта. Вот код:
\version "2.22.1"
\language "italiano"
common = {
\key sol \minor
\time 4/4
\tempo "Largo [Широко]"
}
right = \relative do'' {
\key sol \major
sol8 (fad re mi sol fad re4) |
sol8 (fad re mib sol fad re4)
}
left = \relative do' {
\key sol \major
sol,8 (re' si' re,) sol, (re' do' re,) |
sol, (re' sib' re,) sol, (re' do' re,) |
}
dynamics = {
s1 |
\override DynamicText.extra-spacing-width = #'(-1 . 1)
s8 \ppp s8 s8 s8 s8 s8 s4
}
\score {
\new PianoStaff <<
\new Staff = "right" \right
\new Dynamics \dynamics
\new Staff = "left" { \clef bass \left }
>>
}
Если я перемещаюсь \override ...
прямо перед \ppp
, он не перекрывается, но LilyPond жалуется на «Unattached AbsoluteDynamicEvent».
Я часто с этим сталкиваюсь. Я считаю, что использование X-смещения работает:
dynamics = {
s1 |
\override DynamicText.X-offset = 0
s8 \ppp s8 s8 s8 s8 s8 s4
}
Это похоже на ошибку для меня. Для extra-spacing-width
работы оба объекта, которые должны избегать друг друга, должны иметь некоторую ширину и некоторую высоту. Вы можете визуализировать «линии горизонта», которые LilyPond использует для дистанцирования, используя
#(ly:set-option 'debug-skylines)
\layout {
\context {
\Score
\override PaperColumn.stencil = #ly:separation-item::print
\override NonMusicalPaperColumn.stencil = #ly:separation-item::print
}
}
(ожидается, что нотоносцы нижнего нотоносца сдвинуты по вертикали на некоторую величину; горизонтальные линии горизонта строятся до разрыва строки, когда у нас есть только оценка расстояния между двумя нотоносцами).
Это дает:
Вы можете видеть, что проблема в том, что SpanBar не получает линии горизонта; это потому, что у него нет высоты, поэтому интервал, на котором считается, что он сталкивается, неизвестен.
На данный момент обходной путь кажется
\layout {
\context {
\Score
\override SpanBar.Y-extent = #axis-group-interface::height
\override SpanBar.meta.object-callbacks.pure-Y-common =
#ly:axis-group-interface::calc-pure-y-common
\override SpanBar.meta.object-callbacks.pure-relevant-grobs =
#ly:axis-group-interface::calc-pure-relevant-grobs
}
}
(должна быть причина, по которой его нет в текущем коде, поэтому имейте в виду, что это может иметь плохие последствия в случаях, которые я не рассматривал).
\version "2.23.4" \layout { \context { \Score \override BarLine.bar-extent = #'(-10 . 10) \override Parentheses.font-size = 10 } } \new StaffGroup << { c1\parenthesize\< 1\! } { c1 1 }
>>
фасет