[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: TabStaff.keepAliveInterfaces
From: |
Thomas Morley |
Subject: |
Re: TabStaff.keepAliveInterfaces |
Date: |
Sat, 2 Nov 2019 14:05:45 +0100 |
Am Sa., 2. Nov. 2019 um 12:59 Uhr schrieb Thomas Morley
<address@hidden>:
>
> Am Sa., 2. Nov. 2019 um 09:41 Uhr schrieb Malte Meyn <address@hidden>:
> >
> > Hi list,
> >
> > what am I (or what is LilyPond) doing wrong here?
> >
> > %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> >
> > \version "2.19.83"
> >
> > bla = { \repeat unfold 100 e'4 }
> > git = {
> > \set TabStaff.keepAliveInterfaces = #'()
> > R1*10
> > \repeat unfold 60 c'4
> > }
> >
> > <<
> > \new Staff \bla
> > \new Staff \with { \RemoveAllEmptyStaves } \git
> > \new TabStaff \with { \RemoveAllEmptyStaves } \git
> > >>
> >
> > %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> >
> > A stub for the first TabStaff is printed (clef and short staff lines). If I
> > • don’t \set TabStaff.keepAliveInterfaces or
> > • \set Staff.keepAliveInterfaces = #'() too
> > the TabStaff is hidden as expected. Seems like the \set TabStaff… partly
> > revives the TabStaff from being hidden. But why does the \set Staff…
> > have an effect at all?
> >
> > Cheers,
> > Malte
> >
>
> Hi Malte,
>
> you initiate TabStaff last, thus there is no TabStaff at the time \set
> TabStaff is read (in Staff). So LilyPond creates a TabStaff herself.
>
> (1)
> You could use that autogenerated TabStaff. Though, because then the
> TabStaff is already there a \with comes too late, so you need to go
> for score-layout.
> Makes for:
>
> bla = { \repeat unfold 100 e'4 f'1}
> git = {
> \set TabStaff.keepAliveInterfaces = #'()
> R1*10
> \repeat unfold 60 c'4
> \break
> \unset TabStaff.keepAliveInterfaces
> d'1
> }
>
> \score {
> <<
> \new Staff \bla
> \new Staff \with { \RemoveAllEmptyStaves } \git
> \context TabStaff \git
> >>
> \layout {
> \context {
> \TabStaff
> \RemoveAllEmptyStaves
> }
> }
> }
>
> Though, fiddling with autogenerated contexts is not really nice...
>
> (2)
> You could initiate the TabStaff before Staff and align it properly.
> Makes for:
>
> bla = { \repeat unfold 100 e'4 f'1}
> git = {
> \set TabStaff.keepAliveInterfaces = #'()
> R1*10
> \repeat unfold 60 c'4
> \break
> \unset TabStaff.keepAliveInterfaces
> d'1
> }
>
> <<
> \new Staff \bla
> \new TabStaff = "tab" \with { \RemoveAllEmptyStaves } \git
> \new Staff \with { alignAboveContext = "tab" \RemoveAllEmptyStaves } \git
> >>
>
> Though, speaking only for me, I don't like this ordering and it feels
> very much like a workaround. Well, it _is_ a workaround ;)
>
> I'd go for:
> (3)
> _Limit_ the \set TabStaff to this context.
> Makes for:
>
> %% A simple \set TabStaff applied right at the start of some music will
> %% probably causesome spurious TabStaff, because the meant TabStaff is
> %% probably not (fully) initiated at that timestep.
> %% Thus better make sure the \set is limited to TabStaff
> %% Lateron it would not be a problem.
> removeTabStaff =
> \applyContext
> #(lambda (ctx)
> (if (eq? (ly:context-name ctx) 'TabStaff)
> (ly:context-set-property! ctx 'keepAliveInterfaces '())))
>
> %% Unset keepAliveInterfaces in TabStaff (now the settings from Score apply)
> unsetRemoveTabStaff = \unset TabStaff.keepAliveInterfaces
Better use below to avoid spurtous TabStaff, if TabStaff is not
initiated at all or commented or deleted.
%% Unset keepAliveInterfaces in TabStaff (now the settings from Score apply)
unsetRemoveTabStaff =
\applyContext
#(lambda (ctx)
(if (eq? (ly:context-name ctx) 'TabStaff)
(ly:context-unset-property ctx 'keepAliveInterfaces)))
Cheers,
Harm
>
> bla = { \repeat unfold 100 e'4 f'1}
> git = {
> \removeTabStaff
> R1*10
> \repeat unfold 60 c'4
> \break
> \unsetRemoveTabStaff
> d'1
> }
>
> <<
> \new Staff \bla
> \new Staff \with { \RemoveAllEmptyStaves } \git
> \new TabStaff \with { \RemoveAllEmptyStaves }\git
> >>
>
>
> HTH,
> Harm