On Thu, Sep 1, 2011 at 2:30 PM, harm6
<address@hidden> wrote:
Hi David,
don't know anything about the error:
ERROR: In procedure ly:grob-object:
ERROR: Wrong type argument in position 1 (expecting Grob): ()
This error-warning must be an error! :)
My only guess is that the property I'm calling on to locate everything on a line isn't set until a later stage in the layout process, after X-offsets have been considered.
How about:
\version "2.14.2"
#(define (bounding-coords grob-coord bar-coords end-coord)
(if (null? (cdr bar-coords))
(cons (car bar-coords) end-coord)
(if (and (< (car bar-coords) grob-coord)
(> (cadr bar-coords) grob-coord))
(cons (car bar-coords)(cadr bar-coords))
(bounding-coords grob-coord (cdr bar-coords) end-coord))))
#(define (center-on-measure grob)
(let* ((sys (ly:grob-system grob))
(array (ly:grob-object sys 'all-elements))
(grob-coord (interval-center (ly:grob-extent grob sys X)))
(grob-name (lambda (x) (assq-ref (ly:grob-property x 'meta)
'name)))
(bars (filter (lambda (x) (eq? 'NonMusicalPaperColumn (grob-name
x)))
(ly:grob-array->list array)))
(bar-coords (sort (map (lambda (x) (interval-center
(ly:grob-extent x sys X))) bars) <))
(bounds (bounding-coords grob-coord bar-coords (cdr
(ly:grob-extent sys sys X)))))
(ly:grob-translate-axis! grob (- (- grob-coord (/ (+ (car bounds) (cdr
bounds)) 2))) X)
))
{
\override TextScript #'after-line-breaking = #center-on-measure
\repeat unfold 10 { s1_"|"^"|" }
s2_"|"^"|"
}
I like this variation, because after using it I can still tweak the position of the text with an override of 'extra-offset. For reasons I don't understand, though, overrides of 'Y-offset have no effect after your function is called (they do in the version I posted). (Overrides of 'padding work in either case.)
Thank you for your ideas!
David