Jean Abou Samra <j...@abou-samra.fr> writes:

> I believe this exhibits a bug:
>
> \version "2.23.14"
>
> {
>   \new Staff { c'1 }
>   \new Devnull { s1 }
> }
>
>
> I would have expected the staff to stop after one measure.
>
> Does anyone see a reason for this behavior being correct,
> or am I right that it is another bug similar to the “temporary
> staff not ending” bug fixed by Dan in 74af697126?

It is documented behavior.  "Keeping contexts alive" starts with it:

    Contexts are usually terminated at the first musical moment in which
    they have nothing to do.  So ‘Voice’ contexts die as soon as they
    contain no events, ‘Staff’ contexts die as soon as all the ‘Voice’
    contexts within them contain no events, etc.  This can cause
    difficulties if earlier contexts which have died have to be
    referenced, for example, when changing staves with ‘\change’
    commands, associating lyrics with a voice with ‘\lyricsto’ commands,
    or when adding further musical events to an earlier context.

       There is an exception to this general rule: inside of an ‘{...}’
    construct (sequential music), the construct’s notion of the “current
    context” will descend whenever an element of the sequence ends in a
    subcontext of the previous current context.  This avoids spurious
    creation of implicit contexts in a number of situations but means
    that the first context descended into will be kept alive until the
    end of the expression.

       In contrast, the contexts of a ‘<<...>>’ construct’s
    (simultaneous music) expression are not carried forth, so enclosing
    a context creating command in an extra pair of ‘<<...>>’ will keep
    the context from persisting through all of the enclosing ‘{...}’
    sequence.

You can either enclose your Staff in << ... >> or you can end its visual
impact using \stopStaff .

-- 
David Kastrup

Reply via email to