lilypond-user
[Top][All Lists]
Advanced

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

Re: Problem with conditionals in \layout


From: David Kastrup
Subject: Re: Problem with conditionals in \layout
Date: Sat, 02 Dec 2017 09:54:54 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.0.50 (gnu/linux)

Carl Sorensen <address@hidden> writes:

> From: John Schlomann <address@hidden>
> Date: Friday, December 1, 2017 at 1:02 PM
> To: <address@hidden>
> Subject: Problem with conditionals in layout
>
> I’m have a problem including conditionals in a \layout block. The following 
> code results in error, “syntax error, unexpected OUTPUT_DEF_IDENTIFIER”.
>
> The problem is that you are nesting layout blocks with this code,
> which is not allowed.

The problem rather is that the layout blocks are defined by copying
$defaultlayout at the time he makes his definitions.  It would make more
sense to define this kind of stuff with define-scheme-function, like

> According to the Notation Reference 4.2.1 you can have multiple layout
> blocks as top-level expressions, and they will all apply.  So move
> your variables \conditional* above the \score{} block:
>
>
> \version "2.18.2"
>
>
>
> #(define conditionalTimeSignature
>
>   (if #t
>
>    #{
>
>      \layout { \context { \Staff \remove "Time_signature_engraver" } }
>
>    #}
>
>   )
>
> )

conditionalTimeSignature =
(define-scheme-function (layout location) ()
  (if #t
    #{ \layout \context { \Staff \remove "Time_signature_engraver" } #}))

Though it probably can be called at top level only in some 2.19
version.  At any rate, calling \layout { ... } will derive from the
current layout definition, so if you use that, you have to store it in
some kind of function in order to have it executed only at the time of
use.

-- 
David Kastrup



reply via email to

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