Hi Thomas,
thank you for the consideration!
Am 26.02.19 um 12:02 schrieb Thomas Morley:
Am Mo., 25. Feb. 2019 um 13:14 Uhr schrieb Urs Liska <li...@openlilylib.org>:
...
\version "2.19.82"
\include "oll-core/package.ily"
Hi Urs,
because of my limited time I can't keep track what's going on oll.
Thus all your example code is limited to oll-users, I'd recommend to
break it doing to core-lilypond-functionality while asking here,
otherwise only those oll-users have a chance to compile your surely
nice code.
Well, I must admit I found this too complicated in this case, especially
given that in the end I'll make it available somewhere in openLilyLib
anyway.
That said, I probably can imagine what the not-core-functions do ;)
Why not going for bound-padding instead of minimum-length.
I wasn't aware that multimeasure rests are spanners and that I could use
bound-padding.
Here a sketch:
foo =
\override MultiMeasureRest.before-line-breaking =
#(lambda (grob)
(let* ((vag (ly:grob-parent grob Y)) ;; VerticalAxisGroup
(vag-elts-array (ly:grob-object vag 'elements))
(vag-elts-ls
(if (ly:grob-array? vag-elts-array)
(ly:grob-array->list vag-elts-array)
'()))
(mm-grobs
(filter
(lambda (elt)
(and
(equal? (ly:grob-parent elt X) grob)
(grob::has-interface elt 'multi-measure-interface)))
vag-elts-ls)))
(if (pair? mm-grobs)
(let* ((mmr-stil-x-length
(interval-length
(ly:stencil-extent
(ly:multi-measure-rest::print grob) X)))
(mm-text-stil-x-lengths
(map
(lambda (mm)
(ly:stencil-extent
(grob-interpret-markup
mm
(ly:grob-property mm 'text))
X))
mm-grobs))
(max-text-x-length
(apply max (map cdr mm-text-stil-x-lengths)))
(half-x-diff
(/ (abs (- mmr-stil-x-length max-text-x-length)) 2)))
(ly:grob-set-property! grob 'bound-padding half-x-diff)))))
{
\foo
R1
\key bes \major
R1
\key b \major
\time 16/16
R1^"very very long"_"not short either"
R^"very very very long"_"not really short either"
}
I must admit that this doesn't seem to properly work when applied to my
code.
Do I understand correctly that bound-padding ensures padding to the
right and left of the given (spanner) grob. So when the rest (or my
in-place replacement with arbitrary markup) has a width of, say, 4 staff
spaces, and bound-padding is set to, say, 10, then my measure is
guaranteed to be (at least) 24 staff spaces wide?
I can successfully map your code to mine, determining a bound-padding
value of half the difference between the wider markup and the stencil
within the staff. However, without any additional padding I notice that
the measures are usually *wider* than necessary, even forcing the music
to run off the staff to the right.
The attached images show that the effective padding is very different in
different measures. And when I subtract some manual offset I end up some
measures still having generous padding while others already have the
markup overlap the barlines.
So I have the impresstion that - while solving the original issue of
measure-start elements - bound-padding is still not sufficiently
reliable/manageable for my issue.
Urs
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user