lilypond-user
[Top][All Lists]
Advanced

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

Re: Tuplet bracket and cross staff


From: Thomas Morley
Subject: Re: Tuplet bracket and cross staff
Date: Sun, 26 Jun 2016 22:06:36 +0200

2016-06-26 14:24 GMT+02:00 David Nalesnik <address@hidden>:
> Hi Harm,
>
> On Sun, Jun 26, 2016 at 3:53 AM, Thomas Morley <address@hidden> wrote:
>> 2016-06-26 5:00 GMT+02:00 Andrew Bernard <address@hidden>:
>>>  Hi Matteo,
>>>
>>> I have a tuplet angle function that somebody (I cannot recall who)
>>> sent me some time ago. I use it heavily and extensively and I can say
>>> it has been tested by me to the limit - it works well.
>>>
>>> Using this code you just say \tupletAngles 1 0 or similar and that's
>>> all you need. Put it is a file tuplet-angles.ily and include it. Using
>>> \tupletAngles 0 0 is very handy for straigthening up tuplets when you
>>> don't want lilypond to angle them.
>>>
>>> Here it is. [Surprised this is not more well known.]
>>>
>>> Andrew
>>
>> Looking in the archives:
>> http://lilypond.1069038.n5.nabble.com/angle-of-a-tuplet-bracket-td55019.html#a55023
>> :)
>>
>
> A very useful function!

Glad it's still of some use.

> It occurs to me that you could override 'positions directly without
> consulting the stencil, instead of as a side-effect:

Indeed, much more elegant.

>
> %% ===========================================
> tupletAngles =
> #(define-music-function (y-off angl)(number? number?)
>    "
>  y-off a (possible) offset in Y-direction
>  angl is supposed to be the angle of the TupletBracket in degrees,
>  "
>    #{
>      \once\override TupletBracket #'positions =
>      #(lambda (grob)
>         (let* ((pos (ly:tuplet-bracket::calc-positions grob))
>                (y-length (interval-length pos))
>                (x-length (interval-length
> (ly:tuplet-bracket::calc-x-positions grob)))
>                (alpha (degrees->radians angl))
>                (dir (ly:grob-property grob 'direction))
>                (new-start (+ (if (= dir 1)
>                                  (max (car pos)(cdr pos))
>                                  (min (car pos)(cdr pos)))
>                             y-off))
>                (new-y (* x-length (tan alpha))))
>           (cons new-start (+ new-start new-y))))
>    #})
>
> horizontalTuplets =
> \override TupletBracket  #'positions =
> #(lambda (grob)
>    (let* ((pos (ly:tuplet-bracket::calc-positions grob))
>           (dir (ly:grob-property grob 'direction))
>           (new-pos (if (= dir 1)
>                        (max (car pos)(cdr pos))
>                        (min (car pos)(cdr pos)))))
>      (cons new-pos new-pos)))
>
> %% ===========================================
>
> (For newer versions, maybe it would be helpful to work in the
> grob-transformer function?)
>
> --DN

I've to admit I forgot about grob-transformer, before you mentioned it.

David K put up some examples replying to user requests, but I think it
should be documented more widely, maybe a snippet in
/Documentation/snippets will do it already or additionally(?) an entry
in the extending-manual.

Thanks for the reminder,
  Harm



reply via email to

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