Hi Pierre & David,

These solutions are quite amazing, and I've been able to make both work
perfectly for what I want.

I'll document my understanding below for later readers of thread trying to
finesse results.

First I had to go read about the \shape command from David's solution ...

http://lilypond.org/doc/v2.19/Documentation/notation/modifying-shapes#index-_005cshape

... which is easier to use than I would've imagined. The four pairs in ...

    \shape #'((-1.5 . 0) (-1 . 0) (-0.5 . 0) (0 . 0)) RepeatTie

... set the four control points that govern, er, shape the repeat-tie. And
changing just the negative size of the leftmost value ...

    \shape #'((-2.5 . 0) (-1 . 0) (-0.5 . 0) (0 . 0)) RepeatTie

... gives exact control over the graphic length of the repeat.

Then I digested Pierre's successive refinements to his repeatTieExtend
function ...

  repeatTieExtend =
  #(define-music-function (parser location arg-repeat-tie-extend) (number?)
    #{
        -\tweak X-extent #(cons (/ (+ arg-repeat-tie-extend 4) -1) 0)
        -\tweak details.note-head-gap #(/ arg-repeat-tie-extend -1)
        -\tweak extra-offset #(cons (/ arg-repeat-tie-extend -1) 0)
        -\tweak head-direction #1
        \laissezVibrer
    #})

... which made me realize that everything I'm wanting to do can be
controlled by overrides to the RepeatTie (or, equivalently, LaissezVibrer)
grob.

After some experimentation, I found that just these three overrides ...

   \override RepeatTie.details.note-head-gap = -0.5
   \override RepeatTie.extra-offset = #'(-0.5 . 0)
   \override RepeatTie.X-extent = ##f

... do exactly what I want.

(Turning off X-extent makes repeat-ties work nicely with complex rhythms
and proportional spacing.)

Equivalently, these two overrides ...

   \shape #'((-1.5 . 0) (-1 . 0) (-0.5 . 0) (0 . 0)) RepeatTie
   \override RepeatTie.X-extent = ##f

... also do exactly what I want.

(These settings are now inserted in a global stylesheet for the score.)

The only mystery in any of these settings are the negative values ...

   \override RepeatTie.details.note-head-gap = -0.5
   \override RepeatTie.extra-offset = #'(-0.5 . 0)

... which don't function exactly the way you might expect when you start
changing them from, say, -0.25 to -0.5 to -1.5 to -2.5 and so on. But,
happily, the values of -0.25 and -0.5 work very well.

Thank you both very much. Both solutions give me what I was looking for and
are producing beautiful output.

Trevor.



On Wed, Apr 1, 2015 at 3:51 AM, Pierre Perol-Schneider <
pierre.schneider.pa...@gmail.com> wrote:

> Oops, X-extent forgotten, so here again:
>
>   repeatTieExtend =
>   #(define-music-function (parser location arg-repeat-tie-extend) (number?)
>     #{
>         -\tweak X-extent #(cons (/ (+ arg-repeat-tie-extend 4) -1) 0)
>         -\tweak details.note-head-gap #(/ arg-repeat-tie-extend -1)
>         -\tweak extra-offset #(cons (/ arg-repeat-tie-extend -1) 0)
>         -\tweak head-direction #1
>         \laissezVibrer
>     #})
>
>   {
>     c2\repeatTie
>     c''2 ^\repeatTieExtend #2
>     a'2 _\repeatTieExtend #5
>     c'2 _\repeatTieExtend #7
>   }
>
> Cheers,
> Pierre
>
> 2015-04-01 9:27 GMT+02:00 Pierre Perol-Schneider <
> pierre.schneider.pa...@gmail.com>:
>
>> ... or even:
>>
>>   \version "2.18.2"
>>
>>   repeatTieExtend =
>>   #(define-music-function (parser location arg-repeat-tie-extend)
>> (number?)
>>     #{
>>         -\tweak X-extent #'(0 . 0)
>>         -\tweak details.note-head-gap #(/ arg-repeat-tie-extend -1)
>>         -\tweak extra-offset #(cons (/ arg-repeat-tie-extend -1) 0)
>>         -\tweak head-direction #1
>>         \laissezVibrer
>>     #})
>>
>>   {
>>     c2\repeatTie
>>     c''2 ^\repeatTieExtend #2
>>     a'2 _\repeatTieExtend #5
>>     c'2 _\repeatTieExtend #7
>>   }
>>
>> Cheers,
>> Pierre
>>
>> 2015-04-01 9:05 GMT+02:00 Pierre Perol-Schneider <
>> pierre.schneider.pa...@gmail.com>:
>>
>>> Hi Trevor et All,
>>>
>>> How about:
>>>
>>>   \version "2.18.2"
>>>
>>>   extendRT =
>>>   #(define-music-function (parser location arg-extend) (number?)
>>>   #{
>>>     \once \override LaissezVibrerTie.X-extent = #'(0 . 0)
>>>     \once \override LaissezVibrerTie.details.note-head-gap = #(/
>>> arg-extend -1)
>>>     \once \override LaissezVibrerTie.extra-offset = #(cons (/ arg-extend
>>> -1) 0)
>>>     \once \override LaissezVibrerTie.head-direction = #1
>>>   #})
>>>
>>>   {
>>>       c2\repeatTie
>>>       \extendRT #2 c''2 \laissezVibrer
>>>       \extendRT #5 a'2 \laissezVibrer
>>>       \extendRT #7 c'2 \laissezVibrer
>>>   }
>>>
>>> HTH,
>>> Pierre
>>>
>>> 2015-04-01 6:00 GMT+02:00 David Nalesnik <david.nales...@gmail.com>:
>>>
>>>>
>>>>
>>>> On Tue, Mar 31, 2015 at 10:53 PM, David Nalesnik <
>>>> david.nales...@gmail.com> wrote:
>>>>>
>>>>>
>>>>> The property 'minimum-length doesn't seem to have an effect
>>>>>
>>>>
>>>> Seems like it ought to...  RepeatTie and LaissezVibrerTie as well.
>>>>
>>>> \override RepeatTie.minimum-length = #5 % does nothing alone
>>>>
>>>> \override RepeatTie.springs-and-rods = #ly:spanner::set-spacing-rods
>>>>
>>>>
>>>> causes a crash, as does the same overrides of LaissezVibrerTie
>>>>
>>>> DN
>>>>
>>>> _______________________________________________
>>>> lilypond-user mailing list
>>>> lilypond-user@gnu.org
>>>> https://lists.gnu.org/mailman/listinfo/lilypond-user
>>>>
>>>>
>>>
>>
>


-- 
Trevor Bača
trevorb...@gmail.com
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to