bug-lilypond
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Stem.stem-begin-position not giving desired output on beamed stems (


From: Thomas Morley
Subject: Re: Stem.stem-begin-position not giving desired output on beamed stems (tablature)
Date: Sun, 18 Dec 2016 12:43:51 +0100

Hi Carl,

2016-12-18 8:26 GMT+01:00 Carl Williams <address@hidden>:
> One more little adjustment, for anyone who will benefit from it.
> The previous version only overrode Beam.positions on the first line. After a
> line break they go back to how they were if by default.
> I don't quite understand why, but the solution was to move that section
> under a before-line-breaking section rather than after-line-breaking.

Then remove it there.

I missed to take 'beam-thickness into account. Good catch.
Your code can be shortened to the below, probably even more (depending
on your final goal)

beam-stem-height =
#(define-music-function (parser location start-in length-in)(number? number?)
  "Takes a list containing values for:
  - the stem-start in Y-direction
  - the stem-length
  Values can be positive or negative, depending on direction
  but may produce a warning if only one value is negative:
    'warning: weird stem size, check for narrow beams'
  "
  #{
    \override Stem.direction = #(if (positive? length-in) UP DOWN)
    \override Stem.stem-begin-position = #start-in
    \override Stem.length = #(abs length-in)
    \override Beam.after-line-breaking =
      #(lambda (grob)
        (let ((stems (ly:grob-array->list (ly:grob-object grob 'stems))))
          (for-each
            (lambda (stem)
              (ly:stem::calc-stem-begin-position stem)
              (ly:grob-set-property! stem 'length (abs length-in))
              (ly:grob-set-property! stem 'stem-begin-position start-in))
            stems)))
    \override Beam.before-line-breaking =
      #(lambda (grob)
        (let*
      ;; TODO returns 'direction always correctly?
          ((dir (ly:grob-property grob 'direction))
           (position
             (/ (+ (abs start-in)
                   (- (abs length-in)
                      (ly:grob-property grob 'beam-thickness)))
                (* dir 2))))
          (ly:grob-set-property! grob 'positions (cons position position))))
#})

Cheers,
  Harm

P.S.
Your code doesn't follow the recommended style, makes it harder to follow.
Please read
http://community.schemewiki.org/?scheme-style



reply via email to

[Prev in Thread] Current Thread [Next in Thread]