lilypond-user
[Top][All Lists]
Advanced

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

Re: Selectively override padding of glissando lines in chords?


From: David Nalesnik
Subject: Re: Selectively override padding of glissando lines in chords?
Date: Mon, 27 Oct 2014 13:09:56 -0500

Hi Dominic,

On Mon, Oct 27, 2014 at 12:50 PM, Dominic <address@hidden> wrote:
I am a little closer to my goal. I have come up with the following music
function:

/glissIndexPadHack =
        #(define-music-function
                (parser location index additionalpad normalpad)
                (number? number? number?)
                #{
                \once \override Glissando.bound-details =
                #(lambda (grob) (if (eq? (ly:grob-property grob
'glissando-index) #'index)
                                        '(
                                                (right  (attach-dir . -1)
                                                                (end-on-accidental . #t)
                                                                (padding . 0.5))
                                                (left   (attach-dir . 1)
                                                                (padding . *#'additionalpad*))
                                        )
                                        '(
                                                (right  (attach-dir . -1)
                                                                (end-on-accidental . #t)
                                                                (padding . 0.5))
                                                (left   (attach-dir . 1)
                                                                (padding . *#'normalpad*))
                                        )
                                ))
                #})/

Just one snag! If I replace the variables in bold (above) with literal
values, e.g. 3 and 2, the code compiles and functions perfectly. But if I
compile it as shown above, it seems like my variables are not being
interpreted correctly. So I guess I must have made a syntactical error -
wrong combination of # ' $ characters, perhaps? I tried various combinations
of these characters, and some of them cause the compile to fail, some allow
it to compile, but none allows it to function.

What is the proper way to achieve this? Basically, I want to have individual
control over the bound-details.left.padding values of glissando lines within
a single chord.

Thanks for any help!

(I am using Lilypond 2.19.15)


You have to use "quasiquoting" to insert the evaluated variables into your literal lists.

See http://www.gnu.org/software/guile/docs/docs-1.8/guile-ref/_expression_-Syntax.html#index-quasiquote-2199.

(Note the backquote--easy to mistake for an apostrophe!)

 \version "2.19.15"

glissIndexPadHack =
#(define-music-function
  (parser location index additionalpad normalpad)
  (number? number? number?)
  #{
    \once \override Glissando.bound-details =
    #(lambda (grob) (if (eq? (ly:grob-property grob
                               'glissando-index) index)
                        `(
                           (right  (attach-dir . -1)
                             (end-on-accidental . #t)
                             (padding . 0.5))
                           (left   (attach-dir . 1)
                             (padding . ,additionalpad))
                           )
                        `(
                           (right  (attach-dir . -1)
                             (end-on-accidental . #t)
                             (padding . 0.5))
                           (left   (attach-dir . 1)
                             (padding . ,normalpad))
                           )
                        ))
  #})

{
  \glissIndexPadHack 0 2 1 <aes'' ges f d>2. \glissando <f d cis b>4
}

%%%%%%%%
Best,
David

reply via email to

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