Как я могу включить Ossia без создания пустого пространства?

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

Вот пример (действительно, мелодичная композиция):

\version "2.18.2"

ossia = \new Staff = "ossia" \with {
  \remove "Time_signature_engraver"
  fontSize = #-2
  \override StaffSymbol #'staff-space = #(magstep -2)
  \override Clef #'transparent = ##t
  \override KeySignature #'stencil = ##f
} {
  \key b \major
  \override Staff.BarLine #'allow-span-bar = ##f
  \stopStaff
  s2.*100  % ???
}

treble = \new Staff = "treble" {
  \clef treble
  \key b \major
  \relative c' {
    \repeat unfold 10 { b8 cis dis fis dis cis }
    b4 dis fis |
    b4
    <<
      { dis, fis }
      \context Staff = "ossia" {
        \startStaff \tuplet 3/2 { dis8 b dis } fis4 \stopStaff
      }
    >> |
    b2. |
  }
}

bass = \new Staff = "bass" {
  \clef bass
  \key b \major
  \relative c {
    \repeat unfold 12 { fis,4 fis4 fis4 | }
    b2.
  }
}

pianoStaff = \new PianoStaff {
  \compressFullBarRests
  \time 3/4
  <<
    \ossia
    \treble
    \bass
  >>
}

\paper {
  #(set-paper-size "letter")
  indent = 25\mm
  short-indent = 5\mm
}

\score {
  << \pianoStaff >>
  % This changes nothing:
  % \layout { \context { \Staff \RemoveEmptyStaves } }
}

Вот вывод (PNG-изображение, 85 КБ).

Некоторые интересные вещи, чтобы отметить:

  • Если я удалю s2.*100 в строке 13 (отмечено % ???), или измените значение на что-то меньше 12, персонал ossia отображает совершенно неправильно. Он появляется под басовым ключом, включает в себя ключ и временную подпись и находится в ключе C (т. Е. Визуализированные ноты включают случайные). По сути, похоже, что он не заметил, что ossia Персонал существует и создал новый. Я подозреваю, что это связано с тем, что персонал ossia должен проходить дальше каждой точки, где он используется, то есть при смене контекста персонала можно идти "назад во времени", но не вперед. Я не очень понимаю это, но я могу с этим смириться, так как это, кажется, не имеет внутреннего эффекта, пока \compressFullBarRests включен.

  • Я включил размер бумаги в MWE, чтобы обеспечить согласованные размеры в разных системах.

  • Как я отметил в счете, добавив \RemoveEmptyStaves не удаляет пустые посохи.

Мой вопрос: как я могу сохранить визуализацию персонала ossia, как это делается в этом примере (маленький и над скрипичным ключом), не добавляя пустое место во всех предыдущих системах?

1 ответ

\RemoveEmptyStaves не работает, потому что посохи находятся в PianoStaff, поэтому вы должны добавить \remove "Keep_alive_together_engraver" в блок макета. Вот минимальный пример слегка измененного фрагмента документации:

\version "2.18.2"

\new PianoStaff
<<
  \new Staff = "ossia" \with {
    \remove "Time_signature_engraver"
    \hide Clef
    fontSize = #-3
    \override StaffSymbol.staff-space = #(magstep -3)
    \override StaffSymbol.thickness = #(magstep -3)
  } \relative c'' {
    R1*3
    c4 e8 d c2
  }
  \new Staff \relative c' {
    c4 b c2
    e4 f e2
    g4 a g2 \break
    c4 b c2
    g4 a g2
    e4 d c2
  }
>>

\layout {
  \context {
    \Staff \RemoveEmptyStaves
    \override VerticalAxisGroup.remove-first = ##t
  }
  \context {
    \PianoStaff
    \remove "Keep_alive_together_engraver"
  }
}

Ваш пример довольно большой, а не настоящий MWE. s2.*100 не имеет никакого смысла для меня. Я предлагаю вам представить меньший пример.

Другие вопросы по тегам