lilypond-user
[Top][All Lists]
Advanced

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

Re: Having shortInstrumentName appear at start of score (instead of inst


From: Thomas Morley
Subject: Re: Having shortInstrumentName appear at start of score (instead of instrumentName)?
Date: Wed, 1 Apr 2015 00:54:06 +0200

2015-03-31 22:23 GMT+02:00 Nathan Ho <address@hidden>:
> On Tue, Mar 31, 2015 at 12:46 PM, Trevor Bača <address@hidden> 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



reply via email to

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