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