lilypond-user
[Top][All Lists]
Advanced

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

Re: Tie settings question


From: David Nalesnik
Subject: Re: Tie settings question
Date: Tue, 25 Oct 2016 17:47:20 -0500

Hi Karol,


On Tue, Oct 25, 2016 at 5:15 PM, Karol Majewski <address@hidden> wrote:
> Here's full code. It's important to applay my tie settings.

OK, thank you.  That helps enormously.

Above, I mentioned moving the check for dot direction, and refactoring
the two if-statements for more compact and maintainable code.  This is
what I meant:

tweakTie =
#(lambda (grob)
   (let*
    ((ties
      (ly:grob-array->list
       (ly:grob-object grob 'ties)))
     (notehead
      (ly:spanner-bound
       (car ties) LEFT))
     (stem
      (ly:grob-object notehead 'stem))
     (flag
      (ly:grob-object stem 'flag))
     (dots
      (ly:grob-object notehead 'dot)))
    (if (> (length ties) 1)
        (begin
         (if (ly:grob? flag)
             (ly:grob-set-property! flag 'Y-extent
               (cons 4 0)))
         ; you set this below, at least partly...
         (for-each
          (lambda (tie)
            (ly:grob-set-nested-property! tie '(details skyline-padding) 5))
          ties)))
    (if (ly:grob? dots)
        (let ((dot-dir (ly:grob-property dots 'direction)))
          (for-each
           (lambda (tie)
             (let ((tie-dir (ly:grob-property tie 'direction)))
               (ly:grob-set-nested-property! tie '(details skyline-padding) 5)
               (ly:grob-set-property! tie 'Y-offset (* -0.25 dot-dir))))
           ties)))))


%%%%%

There seems to be some redundancy above. skyline-padding is set twice
for at least some of the ties.

Refactoring further...

tweakTie =
#(lambda (grob)
   (let*
    ((ties
      (ly:grob-array->list
       (ly:grob-object grob 'ties)))
     (notehead
      (ly:spanner-bound
       (car ties) LEFT))
     (stem
      (ly:grob-object notehead 'stem))
     (flag
      (ly:grob-object stem 'flag))
     (dots
      (ly:grob-object notehead 'dot))
     (dot-dir
      (if (ly:grob? dots)
          (ly:grob-property dots 'direction)
          #f)))

    (for-each
     (lambda (tie)
       ;; display line discussed below...
       (display dot-dir) (newline)

       (ly:grob-set-nested-property! tie '(details skyline-padding) 5)
       (if (ly:dir? dot-dir)
           (ly:grob-set-property! tie 'Y-offset (* -0.25 dot-dir))))

     ties)

    (if (and (> (length ties) 1)
             (ly:grob? flag))
        (ly:grob-set-property! flag 'Y-extent (cons 4 0)))))



\layout {
  \context {
    \Score

    \override Tie.details.height-limit = #1.25
    \override Tie.details.ratio = #0.25
    \override Tie.details.between-length-limit = #1
    \override Tie.details.wrong-direction-offset-penalty = #10
    \override Tie.details.min-length = #2
    \override Tie.details.min-length-penalty-factor = #30
    \override Tie.details.center-staff-line-clearance = #0.05
    \override Tie.details.tip-staff-line-clearance = #0.05
    \override Tie.details.staff-line-collision-penalty = #0
    \override Tie.details.dot-collision-clearance = #0
    \override Tie.details.dot-collision-penalty = #0
    \override Tie.details.note-head-gap = #0.15
    \override Tie.details.stem-gap = #0.15
    \override Tie.details.tie-column-monotonicity-penalty = #100
    \override Tie.details.tie-tie-collision-penalty = #25
    \override Tie.details.tie-tie-collision-distance = #0.5
    \override Tie.details.horizontal-distance-penalty-factor = #0
    \override Tie.details.same-dir-as-stem-penalty = #20
    \override Tie.details.vertical-distance-penalty-factor = #10
    \override Tie.details.intra-space-threshold = #0
    \override Tie.details.outer-tie-length-symmetry-penalty-factor = #0
    \override Tie.details.outer-tie-vertical-distance-symmetry-penalty-factor
= #0
    \override Tie.details.outer-tie-vertical-gap = #0
    \override Tie.details.single-tie-region-size = #4
    \override Tie.details.skyline-padding = #0.05 % or #5
    \override Tie.details.multi-tie-region-size = #1
    \override Tie.line-thickness = #0.25
    \override Tie.thickness = #2

    \override TieColumn.before-line-breaking = #tweakTie

  }
}

{
  \time 3/8
  f''4~ f''8~ f''4.~ f''4~ f''8
}

> In the following example the third tie should be lowered by 0.25.

It isn't, because apparently Dots don't have a direction set.  I added
a display line so you can see that the third tie has its direction set
to '().

I think you discarded the right method of determining direction.

In any case, hopefully my refactoring is of some use.

David



reply via email to

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