restNumberThreshold

Begonnen von Arnold, Dienstag, 26. November 2019, 11:25

« vorheriges - nächstes »

Arnold

Hallo zusammen,

bisher habe ich das Context-Property restNumberThreshold benutzt, um die Darstellung der Zahl 1 über der Ganztaktpause auch taktweise zu steuern.
Aber in der 2.19.83 kommt ein anderes Ergebnis heraus als noch in der 2.18.2.
%{
  RestNumberThreshold was read at 'left edge' in 2.18.2,
  now it's read at 'right edge' in 2.19.83

  Should be (and was in 2.18.2, 2.19.13):
    Count number '1' over rest in measures 2, 4 and 7
    NO count number over rest in measures 3, 5 and 6

  As is (in 2.19.39, 2.19.54, 2.19.80 - 2.19.83):
    Count number '1' over rest in measures 3, 6 and 7
    NO count number over rest in measures 2, 4 and 5
%}
\version "2.18.2"
%-PREPROCESS: select_lilypond_version 2 18 2
%-PREPROCESS: select_lilypond_version 2 19 13
%-PREPROCESS: select_lilypond_version 2 19 39
%-PREPROCESS: select_lilypond_version 2 19 54
%-PREPROCESS: select_lilypond_version 2 19 80
%-PREPROCESS: select_lilypond_version 2 19 81
%-PREPROCESS: select_lilypond_version 2 19 82
%PREPROCESS: select_lilypond_version 2 19 83

{
  \set Score.restNumberThreshold = #0
  \set Score.barNumberVisibility = #all-bar-numbers-visible
  \override Score.BarNumber.break-visibility = #all-visible

  g'1

  R1

  \set Staff.restNumberThreshold = #1
  R1\fermataMarkup
  \unset Staff.restNumberThreshold

  R1

  << { \voiceTwo
    \set Staff.restNumberThreshold = #1
    R1*2
    \unset Staff.restNumberThreshold
  } \new CueVoice { \voiceOne
    b''1 a''
  } >> \oneVoice

  R1
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\score {

  \new Staff {
    \set Score.restNumberThreshold = #0
    \set Score.barNumberVisibility = #all-bar-numbers-visible
    \override Score.BarNumber.break-visibility = #all-visible

    g'1

    R1

    \tweak MultiMeasureRestNumber.stencil ##f R1\fermataMarkup

    R1

    << { \voiceTwo
      \tweak MultiMeasureRestNumber.stencil ##f R1*2
    } \new CueVoice { \voiceOne
      b''1 a''
    } >> \oneVoice

    R1
  }

  \header {
    piece = \markup {
      "1. Workaround:"
      \typewriter "\\tweak MultiMeasureRestNumber.stencil ##f"
    }
  }
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\score {

  \new Staff {
    \set Score.restNumberThreshold = #0
    \set Score.barNumberVisibility = #all-bar-numbers-visible
    \override Score.BarNumber.break-visibility = #all-visible

    g'1

    R1

    \once \override MultiMeasureRestNumber.stencil = ##f
    R1\fermataMarkup

    R1

    << { \voiceTwo
      \override MultiMeasureRestNumber.stencil = ##f
      R1*2
      \revert MultiMeasureRestNumber.stencil
    } \new CueVoice { \voiceOne
      b''1 a''
    } >> \oneVoice

    R1
  }

  \header {
    piece = \markup {
      "2. Workaround:"
      \italic "(" \typewriter "\\once" \italic ")"
      \typewriter "\\override MultiMeasureRestNumber.stencil = ##f"
      \italic "(und"
      \typewriter "\\revert ..."
      \italic ")"
    }
  }
}

Mir scheint, daß der Kontext nicht mehr »zu Anfang der Pause« gelesen wird, sondern in den neueren Versionen »zu Ende der Pause«.

Bei den Issues habe ich nach »restNumberThreshold« gesucht, aber so viele Treffer bekommen (die laut Überschrift damit nichts zu tun haben können), daß ich darauf verzichtete, alle x-hundert Issues anzusehen.

Kennt jemand dazu das Issue - oder ist es ein neues.
Oder ist es gar kein »Bug«, sondern soll ein »neues Feature« sein, oder gar eine neue »Design Philosiphie«?
Dann müßte ich alle vorhandenen Quelltexte, wenn ich sie wiederverwenden will, auf den Stencil-Override umstellen.

Arnold

Malte

Hallo Arnold,

danke für den Hinweis! Diesen Fehler hat Harm am 27.12. in der Diskussion zu Issue 5251 gemeldet, ich habe ihn daraufhin gefixt. Bisher ist der Fix nur in master bzw. 2.21.0 enthalten, nicht aber im stable/2.20-branch, deshalb auch nicht in 2.19.83.

Was wohl weder Harm noch David K. noch mir aufgefallen ist, ist, daß der Fehler erst mit 2.19 auftaucht, genauer gesagt irgendwo zwischen 2.19.27 und 2.19.30.

Das macht ihn aber zu einer regression, weshalb ich dafür plädieren werde, den Fix noch per cherry-pick in Version 2.19.84 bzw. 2.20.0 aufzunehmen.

Viele Grüße
Malte

Malte

Der Fehler tritt das erste Mal in 2.19.28 auf, ich habe issue 4594 als Ursache im Verdacht. Leider liegen Ursache und Fix beide im C++-Code, du müßtest also eine Version ≤2.19.27 verwenden, auf eine fehlerfreie Version warten oder selbst kompilieren.