lilypond-user
[Top][All Lists]
Advanced

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

Re: print bass staff not always


From: David Kastrup
Subject: Re: print bass staff not always
Date: Wed, 23 Jan 2019 14:52:59 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux)

Gianmaria Lari <address@hidden> writes:

> On Mon, 21 Jan 2019 at 22:33, David Kastrup <address@hidden> wrote:
>
>> Gianmaria Lari <address@hidden> writes:
>>
>> > On Mon, 21 Jan 2019 at 14:57, Gianmaria Lari <address@hidden>
>> > wrote:
>> >
>> >>
>> >>
>> >> On Mon, 21 Jan 2019 at 13:02, Valentin Villenave <
>> address@hidden>
>> >> wrote:
>> >>
>> >>> On 1/21/19, Andrew Bernard <address@hidden> wrote:
>> >>> > Not sure how to do it with PianoStaff.
>> >>>
>> >>> That’s because of the Keep_alive_together engraver. Your layout block
>> >>> should look like:
>> >>>
>> >>> \layout {
>> >>>     \context {
>> >>>       \PianoStaff
>> >>>       \RemoveEmptyStaves
>> >>>       \remove "Keep_alive_together_engraver"
>> >>>       \override VerticalAxisGroup.remove-first = ##t
>> >>>     }
>> >>> }
>> >>>
>> >>> That being said, I have never seen a piano part where only one of the
>> >>> hands is printed when the other doesn’t play. (Vibraphone and marimba
>> >>> parts, maybe.) That’s why we added this feature in the first place.
>> >>>
>> >> [...]
>> >
>> > Valentin, your solution works well if the staff is made of rests (r) or
>> > skips (s). Is it possible to print the staff if it contains rests but
>> avoid
>> > to print it if it contains skip?
>>
>> [NR:]
>>
>> A.20 Context modification identifiers
>> =====================================
>>
>> The following commands are defined for use as context modifications
>> within a ‘\layout’ or ‘\with’ block.
>>
>> ‘RemoveAllEmptyStaves’
>>      Remove staves which are considered to be empty according to the
>>      list of interfaces set by ‘keepAliveInterfaces’, including those in
>>      the first system.
>>         • Sets grob property ‘remove-empty’ in ‘*note
>>           (lilypond-internals)VerticalAxisGroup::’ to ‘#t’.
>>         • Sets grob property ‘remove-first’ in ‘*note
>>           (lilypond-internals)VerticalAxisGroup::’ to ‘#t’.
>>
>> ‘RemoveEmptyStaves’
>>      Remove staves which are considered to be empty according to the
>>      list of interfaces set by ‘keepAliveInterfaces’.
>>         • Sets grob property ‘remove-empty’ in ‘*note
>>           (lilypond-internals)VerticalAxisGroup::’ to ‘#t’.
>>
>> [IR:]
>>
>> 2.2.5 Axis_group_engraver
>> -------------------------
>>
>> Group all objects created in this context in a ‘VerticalAxisGroup’
>> spanner.
>>
>>    Properties (read)
>>
>>      ‘currentCommandColumn’ (graphical (layout) object)
>>           Grob that is X-parent to all current breakable (clef, key
>>           signature, etc.)  items.
>>
>>      ‘hasAxisGroup’ (boolean)
>>           True if the current context is contained in an axis group.
>>
>>      ‘keepAliveInterfaces’ (list)
>>           A list of symbols, signifying grob interfaces that are worth
>>           keeping a staff with ‘remove-empty’ set around for.
>>
>>    Properties (write)
>>
>>      ‘hasAxisGroup’ (boolean)
>>           True if the current context is contained in an axis group.
>>
>>    This engraver creates the following layout object(s):
>>
>>    *note VerticalAxisGroup::.
>>
>>    ‘Axis_group_engraver’ is part of the following context(s): *note
>> ChordNames::, *note DrumStaff::, *note Dynamics::, *note FiguredBass::,
>> *note FretBoards::, *note GregorianTranscriptionStaff::, *note
>> KievanStaff::, *note Lyrics::, *note MensuralStaff::, *note NoteNames::,
>> *note OneStaff::, *note PetrucciStaff::, *note RhythmicStaff::, *note
>> Staff::, *note TabStaff:: and *note VaticanaStaff::.
>>
>> [ly/engraver-init.ly in definition of Score]
>>
>>   keepAliveInterfaces = #'(
>>     bass-figure-interface
>>     chord-name-interface
>>     cluster-beacon-interface
>>     fret-diagram-interface
>>     lyric-syllable-interface
>>     note-head-interface
>>     tab-note-head-interface
>>     lyric-interface
>>     percent-repeat-item-interface
>>     percent-repeat-interface
>>
>>     ;; need this, as stanza numbers are items, and appear only once.
>>     stanza-number-interface
>>   )
>>
>> So probably you likely want to add the rest-interface to that list of
>> interfaces, probably in Staff context.
>>
>> --
>> David Kastrup
>>
>
> I post here another solution that's not clean as David solution. It's a
> simple escamotage.
>
> To make lilypond print anyway a staff only containing rests I put in the
> staff a zero length note and hide it like this:
>
>
> \hideNotes g4*0  R1*4 \unHideNotes \break

That does not look simpler than

\new Staff \with {
  keepAliveInterfaces = #'(
     rest-interface
     bass-figure-interface
     chord-name-interface
     cluster-beacon-interface
     fret-diagram-interface
     lyric-syllable-interface
     note-head-interface
     tab-note-head-interface
     lyric-interface
     percent-repeat-item-interface
     percent-repeat-interface

     ;; need this, as stanza numbers are items, and appear only once.
     stanza-number-interface
   )
} ...

-- 
David Kastrup



reply via email to

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