Hi Harm & hi Nathan,

Incredible. I'm shocked that this do-able.

Harm, the solution of overriding the after-line-breaking property on the
Instrument grob with a lambda especially blows my mind. Nathan, thank you
for expanding my understanding of context construction with a single
example.

Integrated into my score and it works perfectly.

Very much appreciated.

Trevor.

On Tue, Mar 31, 2015 at 6:54 PM, Thomas Morley <thomasmorle...@gmail.com>
wrote:

> 2015-03-31 22:23 GMT+02:00 Nathan Ho <when.possi...@gmail.com>:
> > On Tue, Mar 31, 2015 at 12:46 PM, Trevor Bača <trevorb...@gmail.com>
> wrote:
> >>
> >> Hi,
> >>
> >> Let's say that I have a stylesheet that sets instrumentName values and
> >> shortInstrumentName values for a bunch of contexts in the normal way:
> >>
> >>     \context {
> >>         \Staff
> >>         ...
> >>         instrumentName = \markup { Flute }
> >>         shortInstrumentName = \markup { Fl. }
> >>     }
> >>     \context {
> >>         \Staff
> >>         ...
> >>         instrumentName = \markup { Oboe }
> >>         shortInstrumentName = \markup { Ob. }
> >>     }
> >>     ...
> >>
> >> QUESTION: is there a way to have the shortInstrumentName values appear
> at
> >> the start of the score (meaning that the instrumentName values will
> never
> >> appear)?
> >>
> >> The question looks pathological. (Why would you set a value for
> >> instrumentName if you don't want instrumentName to appear in the
> score?) But
> >> the motivation is as follows. I have a complex score that I've broken
> into
> >> multiple chunks (meaning separate LilyPond files with separate score
> >> blocks). All chunks \include the same stylesheet. But I want
> instrumentName
> >> to appear at the start of only chunk 1 (because chunk 1 is the start of
> the
> >> actual sore). For chunks 2, 3, ... I'd like shortInstrumentName to
> appear at
> >> the start of each "score" (because each non-first "score" is actually
> >> modeling subsequent parts of the one actual score).
> >>
> >> I can't imagine that there would be a setting for this. But is there
> some
> >> sort of Scheme wizardry that can be put at the beginning of each of the
> >> non-first score chunks to say "set instrumentName to the value of
> >> shortInstrumentName"?
> >
> >
> > This is pretty nasty but it does what you're trying to accomplish.
> >
> > shortInstrAsInstr = #(lambda (context)
> >
> >                        (ly:context-set-property! context
> >
> >                          'instrumentName (ly:context-property context
> > 'shortInstrumentName)) '())
> >
> >
> > \new Staff \with {
> >
> >   instrumentName = "Viola"
> >
> >   shortInstrumentName = "Vla."
> >
> >   \consists \shortInstrAsInstr
> >
> > } {
> >
> >   c1 c1 \break c1 c1
> >
> > }
> >
> >
> > Regards,
> >
> > Nathan
>
>
> Less nasty:
>
> \version "2.19.17"
>
> \layout {
>     \context {
>     \Staff
>     \override InstrumentName.after-line-breaking =
>     #(lambda (grob)
>       (ly:grob-set-property! grob 'long-text
>           (ly:grob-property grob 'text)))
>     }
> }
>
>    \new Staff
>    \with {
>      instrumentName = "Flute"
>      shortInstrumentName = "Fl."
>    }
>    { c''1 }
>    \new Staff
>    \with {
>         instrumentName = "Oboe"
>         shortInstrumentName = "Ob."
>    }
>    { d''1 }
>
>
> HTH,
>   Harm
>



-- 
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