Le sam. 22 déc. 2018 à 09:59, Aaron Hill <lilyp...@hillvisions.com> a
écrit :
> [...]
> This one looks funny at first, but the difference is the use of the
> grave as opposed to the apostrophe.  This sets up a quasi-quoting mode
> that behaves nearly identical to normal quoting, except we can use a
> comma to "unquote".  And here the variables will be evaluated as
> expected.

E.g. :

\version "2.18"
#(define-markup-command (double-box layout props xoff yoff) (number?
number?)
  (interpret-markup layout props
    (markup
      (#:with-dimensions (cons 0 0) (cons 0 0)
        (#:path 0.3 `(
          (moveto ,xoff ,yoff)
          (lineto ,(+ xoff 2) ,(+ yoff 4))
          (moveto ,(+ xoff 1) ,yoff)
          (lineto ,(+ xoff 3) ,(+ yoff 4))))))))
{
 a2^\markup\double-box #5 #-2 a
}

Cheers,
Pierre


Le sam. 22 déc. 2018 à 09:59, Aaron Hill <lilyp...@hillvisions.com> a
écrit :

> On 2018-12-21 8:15 pm, Mike Stickles wrote:
> > But when I try to implement the numbers, I get errors no matter what I
> > do. This (while it doesn't work) shows what I'm trying to get to:
> >
> > #(define-markup-command (double-box layout props xoff yoff) (number?
> > number?)
> >   (interpret-markup layout props
> >     #{
> >         \markup {
> >             \with-dimensions #'(0 . 0) #'(0 . 0)
> >             \path #0.3 #'((moveto xoff yoff) (lineto (+ xoff 2) (+
> > yoff 4)) (moveto (+ xoff 1) yoff) (lineto (+ xoff 3) (+ yoff 4)))
> >         }
> >     #}
> > ))
> >
> >
> > Any ideas on what I'm doing wrong?
>
> You are hitting an common stumbling block in Scheme regarding quoting.
> Urs has a great Scheme introduction book[1] online that would be good
> reviewing as it sounds like you may be relatively new to the language.
>
> [1]: https://scheme-book.ursliska.de/
>
> \path needs a list of commands, where an individual command consists of
> a symbol (defining the particular command) and then its arguments, which
> are typically just numbers.
>
> To construct a suitable \path argument in Scheme, we use the list
> function:
>
>      (list ((quote moveto) 1 2) ((quote lineto) 3 4))
>
> This is the explicit list construction technique, and we are also using
> the explicit invocation of quote.  We need quote here because "moveto"
> and "lineto" are symbols.  We do not want the value behind the symbols,
> just the symbols as things on their own.
>
> Scheme (technically LISP) developed a number of shorthands for common
> constructions.  You can construct a list more succinctly this way:
>
>      '((moveto 1 2) (lineto 3 4))
>
> The leading quote puts us in quote mode so that we can simply type
> "moveto" by itself.  We also no longer need to say list explicitly, as
> we'll end up with a list.  The numbers are technically being quoted
> here, but a quoted number literal works.
>
> But what if we need a variable?  We cannot use the same construction,
> because our variables will end up quoted rather than using the value
> behind the name.  One solution is to go back to the more explicit
> invocation:
>
>      (list ('moveto a b) ('lineto c d))
>
> Here we are still using the shortcut quote for the symbols, but
> everything else will be resolved properly in this form.  This is a
> perfectly acceptable option, but some folks prefer the shorthand of
> quoting.  The alternate solution is quasi-quoting:
>
>      `((moveto ,a ,b) (lineto ,c ,d))
>
> This one looks funny at first, but the difference is the use of the
> grave as opposed to the apostrophe.  This sets up a quasi-quoting mode
> that behaves nearly identical to normal quoting, except we can use a
> comma to "unquote".  And here the variables will be evaluated as
> expected.
>
>
> -- Aaron Hill
>
> _______________________________________________
> lilypond-user mailing list
> lilypond-user@gnu.org
> https://lists.gnu.org/mailman/listinfo/lilypond-user
>
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to