Originally created by: *anonymous
Originally created by: PhilEHol...@googlemail.com
Reported by Xavier Scheuer:
RehearsalMark at begin of line should not be printed above the Clef but instead like if there was an "invisible" BarLine just before the note (i.e. after Clef and KeySignature).
[Verified as the same in 2.12.3 and 2.13.24]
\score {
\relative c' {
\repeat unfold 8 c1 \break
\mark \default
\repeat unfold 8 c1
}
}
Originally posted by: percival.music.ca@gmail.com
This has been discussed a bit on -devel; do we have a solid reference that supports this claim?
Originally posted by: x.sche...@gmail.com
The fact that I have *never* seen a RehearsalMark placed like that
in existing score, maybe (also have a look on IMSLP)?
Or the fact that it used to have a "shift" for RehearsalMark in
LilyPond before would suggest that it should be the intended behaviour?
Please also see the intersting messages (and ideas to solve this issue)
by Neil Puttock here:
http://lists.gnu.org/archive/html/bug-lilypond/2010-06/msg00125.html
Originally posted by: x.sche...@gmail.com
And again I do not agree with the chosen priority level.
Since
1. it can affect *every* existing lilypond score, and
2. since it is an issue that definitely make lilypond scores
_not_ look like "professional-looking" scores (as well as the
current "about-to-be-solved" tempo placement),
I would suggest at least "Priority-Medium", instead of "Priority-Low".
PS: OK, I'm not very objective... It is actually one of my top
"Most Annoying Bugs" in LilyPond. ;-D
Originally posted by: percival.music.ca@gmail.com
I repeat, do you have a solid reference? (hint: "I looked at a bunch of scores" is not a solid reference)
Also, we don't second-guess medium/low priorities; there's no functional difference between them anyway. If you're seriously annoyed by this issue, then either start working on a patch or offer a bounty. And find a reputable engraving reference (hint: we have a bibliography of such sources) to back up your claim.
Originally posted by: reinhold...@gmail.com
Gardner Read does not mention anything about rehearsal marks at the beginning of a line... (he only says that alternatively bar numbers might be used, and they should go above/immedately to the RIGHT of the clef. he even gives an example that a bar number to the left of the clef is INCORRECT...)
On the other hand, looking at a bunch of scores with rehearsal marks, they show the following behaviour:
-) Beethoven's 9th by Breitkopf: mark centered at the right end of the key signature
-) Haydn's Jahreszeiten by Universal Edition: mark just above the key signature (to the right of the clef)
-) Gounod's Messe Solennelle by Edition Peters: Mark above the first note (to the right of the key signature)
-) Beethoven's Missa solemnis by Breitkopf: Mark centered on a "virtual" bar line between the key signature and a possible time signature or the next note.
-) Mahler's 8th by Universal Edition: Mark centered on a "virtul" bar line after the key signature
-) Puccini's Il Tabarro by Ricordi: Mark between the piano and the vocal staves right above the clef.
So, Ricordi's Il Tabarro is the only score that shows the same behavior as LilyPond currently does. All other scores show the mark at least after the clef, most of the times also after the key signature...
Cheers,
Reinhold
Originally posted by: PhilEHol...@googlemail.com
FWIW I'm currently looking at a Chappell score of "The Gondoliers" in C, so no key sig, and the rehearsal mark appears to the right of the clef, where a key sig might be, so +1 for this being incorrectly rendered in LilyPond.
Originally posted by: x.sche...@gmail.com
Anyway, can't we use Neil's
RehearsalMark #'X-offset = #shift-right-at-line-begin
or
RehearsalMark #'after-line-breaking =
#(lambda (grob)
;; apply shift
(shift-right-at-line-begin grob)
;; call default callback
(ly:side-position-interface::move-to-extremal-staff grob))
as a solution (at least temporary)?
It is indeed better than current behaviour, although there is no clear
"solid reference" or "common practice", as pointed by Reinhold's list
(BTW thank you Reinhold).
Cheers,
Xavier
Originally posted by: x.sche...@gmail.com
See also Neil's improved workaround, which places the RehearsalMark
after the key signature, and do not add a further shift to begin repeat
bar at begin of line.
Kind of perfect workaround!
\layout {
\context {
\Score
\override RehearsalMark #'after-line-breaking =
#(lambda (grob)
(let* ((parent (ly:grob-parent grob X))
(elts (ly:grob-array->list (ly:grob-object parent 'elements)))
(symbols (filter identity (map (lambda (elt)
(ly:grob-property elt
'break-align-symbol #f))
elts))))
(and (= (ly:item-break-dir grob) RIGHT)
(not (memq 'staff-bar symbols))
(ly:grob-translate-axis! grob (interval-length
(ly:grob-extent parent parent X)) X))
(ly:side-position-interface::move-to-extremal-staff grob)))
}
}
http://lists.gnu.org/archive/html/lilypond-user/2011-08/msg00131.html
Originally posted by: x.sche...@gmail.com
Is there something wrong with Neil's code that prevents it to be
actually implemented as LilyPond's default behavior?
Originally posted by: k-ohara5...@oco.net
The code in comment #8 moves the rehearsal mark after it has been placed according to the options described at <http://lilypond.org/doc/v2.16/Documentation/notation/aligning-objects#using-the-break_002dalignable_002dinterface> so putting comment #8 workaround in LilyPond would make the options described in that section of the documentation rather useless.
Better to use the documented method for the workaround:
\layout { \context { \Score
\override Clef #'break-align-anchor-alignment = #RIGHT
\override KeySignature #'break-align-anchor-alignment = #RIGHT
\override RehearsalMark #'break-align-symbols = #'(staff-bar key-signature clef)
}}
Originally posted by: k-ohara5...@oco.net
The common practice that we want LilyPond to produce by default is described in comment 5 above.
Of these examples, only two are described as putting the mark on the [virtual' bar line. IMSLP.org has these scores; the full scores on imslp.org show no rehearsal marks, but the parts do. The last five start-of-line rehearsal marks in the violin and viola parts are shown in the attached images. In cases where the rehearsal mark would overlap a tempo indication, the rehearsal mark is shifted up. The marks are placed by hand, and move a bit for the best fit, but I would say the nominal position is centered over the right edge of the time signature.
LilyPond produce that placement since version 2.14 by adjusting the defaults as shown at the top of issue 3279.
Originally posted by: x.sche...@gmail.com
I would clearly prefer RehearsalMark to be placed above the "virtual"
bar line at line break as default behaviour.
Out of the six examples given by Reinhold, 2 uses this practice (so it
is non negligible), one put Mark above the first note and 2 above the
key signature (BTW the compromise between first note and key signature
would be the virtual bar line).
And the main reason I'm pushing for this is that this has a logical
justification: RehearsalMarks are placed above the bar line (in the
middle of a line) or "where the bar line would be" at line breaks.
If you want to make an exception for RehearsalMarks at line breaks and
align them on the key signature by default, I'm fine, as soon as it is
also possible to override this and choose to align on the bar line.
The example "Puccini's Il Tabarro by Ricordi" should not count as
"above the clef". The first part is in C major (same key signature
for all the instruments in the score), and number "2" is indeed above
the clef in order to avoid the tempo indication above time signature
change. But see number 7, 12, 13, 14, 17, 18, 19, 20 and 24
the placement is non consistent during the piece.
When there is a key signature it is usually placed at the right side
of it (virtual bar line ?) -> 13, 14, 18;
sometimes above the key signature (avoid tempo collision) -> 17
Sometimes it is above the first note (or even more to the right)
-> 19, 20.
Collision avoidance between RehearsalMark and tempo indications also
fluctuates: sometimes Mark above tempo (13, 20), sometimes Mark shifted
left and tempo shifted right (17, 24), sometimes a mix of the
2 solutions (7).
Thank you.
Originally posted by: k-ohara5...@oco.net
After the fix for issue 3279 that should appear in version 2.17.17,
the rehearsal marks will be placed over the right edge of the key-signature. The positioning uses the documented for break-alignable-interface; so you can, for example, have the mark to go to the right of a time-signature as well.
The workaround in comment 8 assumed that the default was the extreme left, so it needs to be amended. Now it need only move the mark a small amount, 1-staff-space, to the right of the default position, when it is at the beginning of a line :
\override Score.RehearsalMark #'after-line-breaking = #
(lambda (grob)
(let* ((parent (ly:grob-parent grob X))
(elts (ly:grob-array->list (ly:grob-object parent 'elements)))
(symbols (filter identity (map (lambda (elt)
(ly:grob-property elt
'break-align-symbol #f))
elts))))
(and (= (ly:item-break-dir grob) RIGHT)
(not (memq 'staff-bar symbols))
(ly:grob-translate-axis! grob 1.0 X))
(ly:side-position-interface::move-to-extremal-staff grob)))
The documentation implies that there is a way to set the options so that LilyPond would do exactly what this issue asks, to position the mark "if no objects in the list are visible" <http://lilypond.org/doc/v2.17/Documentation/notation/aligning-objects#using-the-break_002dalignable_002dinterface>. But in fact, if there is no object for the mark to align to, it moves all the way to the left.
Also, a regression test 'input/regression/prefatory-empty-spacing.ly' says:
"The [rehearsal mark at begin-of-line] A is atop an invisible barline.
The barline, although invisible, is also translated because it is the last one
of the break alignment."
See https://sourceforge.net/p/testlilyissues/issues/5621 for a quick alignment improvement.