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

Reply via email to