Hi Aaron. It's not Y-offset that has not to be used. It's the combination \offset + Y-offset.
\override SomeGrob.Y-offset can be used (with a ruler, in an uncomfortably way) \offset Y-offset is nonsense. See my reply to Carl, and his reply to me. HTH Paolo On Thu, Jan 16, 2020 at 12:46 AM Aaron Hill <lilyp...@hillvisions.com> wrote: > On 2020-01-15 1:57 pm, Paolo Prete wrote: > > I quote Carl's words: > > > > "So offset applies to the *estimated* position, and then the spacing > > engine > > works on the offset+estimated postion and ends up putting things where > > it > > thinks they belong" > > > > I checked that with the examples made before and it seems absolutely > > true. > > > > Then: you have to offset an estimated position. How could you do that > > if > > you don't know this estimated position? > > \offset is a simple tool that merely adds a number to a number. Well to > be fair, it has some complexity behind the scenes as it can handle > offsetting numbers, pairs of numbers, and lists of numbers. The problem > is unlikely with \offset; rather, it is the property you are modifying > not having the final say. > > Consider: Y-offset is a desired distance between the reference points of > a grob and its parent. OttavaBrackets use a procedure to determine this > initial desired distance. And because Y-axis spacing issues are tricky, > the unpure-pure container system exists to assist. The pure value is an > estimate used before line breaking, and the unpure value consulted after > line breaking. > > But even with the issues of unpure-pure containers aside, Y-offset is > not the sole arbiter of positioning a bracket. You can see this here: > > %%%% > \version "2.19.83" > > visualizeYOffset = #(define-music-function (grob-path) (symbol-list?) > (define (proc grob) > (let* ((orig (ly:grob-property grob 'stencil)) > (yoff (ly:grob-property grob 'Y-offset)) > (y (- yoff)) > (sten (grob-interpret-markup grob #{ \markup > \with-dimensions-from \stencil #orig > \overlay { > \stencil #orig > \with-color #red \path #0.1 #`( > (moveto -1 0) (lineto 1 0) > (moveto 0 0) (lineto 0 ,y) > (moveto -0.4 -1) (lineto 0 0) (lineto 0.4 -1) > (moveto -1 ,y) (lineto 1 ,y)) > \translate #(cons -0.8 (/ y 2)) > \general-align #X #RIGHT \vcenter \rotate #90 > \whiteout \pad-around #0.2 > \with-color #red \normal-text \fontsize #-6 > \line { Y-offset: #(format #f "~,3f" yoff) } > } #}))) > (ly:grob-set-property! grob 'layer 1000) > (ly:grob-set-property! grob 'stencil sten))) > #{ \override $grob-path .after-line-breaking = #proc #}) > > notes = \fixed c''' { \ottava 1 a8( 8) \ottava 0 a,4 } > > { > \visualizeYOffset Staff.OttavaBracket > > \notes > \once \offset Y-offset 0.4 Staff.OttavaBracket > \notes > \once \override Staff.OttavaBracket.Y-offset = 6 > \notes > \once \offset Y-offset 1.6 Staff.OttavaBracket > \notes > \once \override Staff.OttavaBracket.outside-staff-padding = 1 > \notes > } > %%%% > > The slur exerts influence on the final bracket position that goes beyond > the bracket's Y-offset. The first \offset is not enough to overcome > this; but the explicit value and larger \offset are enough to show that > modifying Y-offset can work. > > The alternate approach would be to not use Y-offset at all but rather > control something like outside-staff-padding, as shown in the final > example. > > > -- Aaron Hill