Hi Andrew,
This came up as one of my queries a short while ago. It appears to be
a surprisingly tricky topic. Have a look back through the archives for
the full discussion. Here's the code I came up with. Hope this helps.
Andrew
%======
\version "2.19.82"
% manual staff hiding and showing .
% must be used with \RemoveEmptyStaves on.
hideStaffWithOnlyRests =
\set Staff.keepAliveInterfaces = #'()
This would tend to kill a staff no matter what its contents are. (Try
\layout {
\context {
\Staff
\RemoveAllEmptyStaves
}
}
\new Staff {
\repeat unfold 200 a4
\hideStaffWithOnlyRests
\repeat unfold 200 a4
}
to see the effect.)
That is actually useful in some situations... but not what the original
question asked for, I think.
Also, the logical is actually not that tricky: the keepAliveInterfaces
list determines what elements in a staff will force the staff to be
displayed. So if you want to see a staff where it contains only rests,
it suffices to add rest-interface to that list. This leads to your
definition of showStaffWithOnlyRests, but hideStaffWithOnlyRests should
restore the default list (as defined in ly/engraver-init.ly):
hideStaffWithOnlyRests =
\set Staff.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
)
(It would probably be better to turn these into functions that really
only add the rest-interface to the list resp. remove it, using some seme
construct.)
Lukas
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user