On Mon, 21 Jan 2019 at 22:33, David Kastrup <d...@gnu.org> wrote:

> Gianmaria Lari <gianmarial...@gmail.com> writes:
>
> > On Mon, 21 Jan 2019 at 14:57, Gianmaria Lari <gianmarial...@gmail.com>
> > wrote:
> >
> >>
> >>
> >> On Mon, 21 Jan 2019 at 13:02, Valentin Villenave <
> valen...@villenave.net>
> >> wrote:
> >>
> >>> On 1/21/19, Andrew Bernard <andrew.bern...@gmail.com> 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


I saw only two drawbacks (?):
1 You have to put this hide note in each line that is made of rests
2 There is some small rest alignment issue in the bar where you put the
hide note

In my case these two drawbacks were not a problem.

Here a complete (and simple) example that compiles.

\version "2.19.82"
stone = {
  \clef treble
  a1 b c' d' \break
  a1 b c' d' \break
  a1 b c' d' \break
}
sttwo = {
  \clef bass
  \hideNotes g4*0 R1*4 \unHideNotes
  f1 g a b \break
  f1 g a b \break
}
sttre = {
  \clef bass
  s1*4
  a1 b c' d'
  s1*4
}
\score {
  \new PianoStaff { <<
    \new Staff \with {instrumentName = #"S1" shortInstrumentName = #"S1"}
\stone
    \new Staff \with {instrumentName = #"S2" shortInstrumentName = #"S2"}
\sttwo
    \new Staff \with {instrumentName = #"S3" shortInstrumentName = #"S3"}
\sttre
  >> }
  \layout {
    \context {
      \PianoStaff
      \RemoveEmptyStaves
      \remove "Keep_alive_together_engraver"
      \override VerticalAxisGroup.remove-first = ##t
    }
  }
}
Thank you for everybody help.
g.
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to