lilypond-user
[Top][All Lists]
Advanced

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

Re: Combining \markup and \override in a variable


From: David Kastrup
Subject: Re: Combining \markup and \override in a variable
Date: Sat, 19 Nov 2016 19:58:26 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1.50 (gnu/linux)

David Sumbler <address@hidden> writes:

> On Sat, 2016-11-19 at 00:27 +0100, Simon Albrecht wrote:
>> On 18.11.2016 22:41, David Sumbler wrote:
>> > 
>> > I need to study this (and the previous answer) to see if I can
>> > fathom
>> > out the logic of it all.
>> \tweak is a music function (which means it returns music) and it
>> also 
>> takes music as its third argument. The dash turns a markup into a 
>> post-event, which is music.
>> 
>> HTH, Simon
>
> I find this very confusing.
>
> \tweak returns music, yet it requires a hyphen in front of it.

Music comes in two flavors: post events, and "proper" music expressions.
Post events are what you can tack onto single notes or chords: most
articulations, subscripts, superscripts.

A \tweak can return either.  Unfortunately LilyPond's syntax for parsing
music function arguments differs depending on which it is, so LilyPond
needs to know whether the result of a \tweak will be a post event.

This means you need to put a - in front of it.  The frustrating thing is
that this resolution is only needed for the call itself when in a larger
music expression but not for assignments.  So all of

redf = \tweak color #red \f
greenf = -\tweak color #green \f

{ c1\redf c1\greenf }

is fine while

{ c1\tweak color #red \f }

does not work but

{ c1-\tweak color #green \f }

does.  It might be more consistent if

redf = \tweak color #red \f

also raised an error.  But I think that ship has sailed.  The long-term
goal should be that

c1\tweak color #red \f

works fine.  However, it is quite different from

c1 \tweak color #red d1

And the real clincher actually is

\displayMusic c1 \tweak \color #red \f

\displayMusic has to wait for \tweak to return a value before it can
decide whether the returned value is a post-event belonging to c1 or a
separate music expression.

>  And markup is not music, but a hyphen turns it into music.

Not just any old music but a post-event.

>  This seems to indicate that \tweak itself is not music,

It is always music, but whether this music is a post-event or not needs
to be established early enough for LilyPond to parse the rest.

> but merely returns music - but with the hyphen the \tweak itself
> becomes music.  Or perhaps not!

> What constitutes music, so far as Lilypond is concerned?

Markups cannot occur in music expressions in isolation (well, in
\notemode.  They are fine for \lyricmode).  But -\markup ... is a text
script in \notemode, and text scripts are music expressions and post
events.

- introduces _any_ post-event actually but it is often redundant.  You
can write c1-\f-(-3 and it is only the 3 that actually needs the - (in
order to identify it as a fingering rather than a note length,
incidentally an invalid one).

So - is needed to turn numbers into post-events, or for turning markups
into post-events, or for giving LilyPond advance notice that a music
function call is going to return a post-event (LilyPond will mess up in
music expressions if its expectation of post-event or not turns out to
be wrong when the music function call returns something other than
expected).

-- 
David Kastrup



reply via email to

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