lilypond-user
[Top][All Lists]
Advanced

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

Re: print change of clef after barline


From: Thomas Morley
Subject: Re: print change of clef after barline
Date: Sun, 1 Jun 2014 12:09:40 +0200

2014-06-01 11:32 GMT+02:00 James <address@hidden>:
> On 01/06/14 10:29, Thomas Morley wrote:
>>
>> 2014-06-01 10:23 GMT+02:00 David Kastrup <address@hidden>:
>>>
>>> Damian leGassick <address@hidden> writes:
>>>
>>>> On 31 May 2014, at 22:12, Thomas Morley wrote:
>>>>>
>>>>> Did you look into
>>>>> IR 3.1.22 BreakAlignment ->break-align-orders ?
>>>>>
>>>>> Or NR A.17 Layout properties ->break-align-orders
>>>>
>>>> what is not clear is this bit:
>>>>
>>>> The format is a vector of length 3, where each element is one order
>>>> for end-of-line, middle of line, and start-of-line, respectively.
>>>>      \override Score.BreakAlignment #'break-align-orders =
>>>>        #(make-vector 3 '(
>>>>         span-bar
>>>>         breathing-sign
>>>>         staff-bar
>>>>         clef
>>>>         key-cancellation
>>>>         key-signature
>>>>         time-signature))
>>>>
>>>> has only one order,
>>>
>>> No.
>>>
>>>   -- Scheme Procedure: make-vector len [fill]
>>>   -- C Function: scm_make_vector (len, fill)
>>>       Return a newly allocated vector of LEN elements.  If a second
>>>       argument is given, then each position is initialized to FILL.
>>>       Otherwise the initial contents of each position is unspecified.
>>>
>>>> suggesting that it acts on end-of-line only, but it also affects
>>>> middle of line and also changes the spacing at start of line
>>>>
>>>> I couldn't work out form the docs how to do the override just for
>>>> middle of line (which is what I want), or how to do a vector with a
>>>> different orders for end/middle/start respectively
>>>
>>> By specifying three different vectors instead of creating one vector
>>> with three equal elements.
>>>
>>> --
>>> David Kastrup
>>
>> @Damian
>>
>> David explained it already, though, here a bit more demonstrative:
>>
>> Look at:
>>
>> guile> (use-modules (ice-9 pretty-print))
>> guile> (pretty-print (make-vector 3 '(
>>         span-bar
>>         breathing-sign
>>         staff-bar
>>         clef
>>         key-cancellation
>>         key-signature
>>         time-signature)))
>>
>> It returns:
>>
>> #((span-bar
>>      breathing-sign
>>      staff-bar
>>      clef
>>      key-cancellation
>>      key-signature
>>      time-signature)
>>    (span-bar
>>      breathing-sign
>>      staff-bar
>>      clef
>>      key-cancellation
>>      key-signature
>>      time-signature)
>>    (span-bar
>>      breathing-sign
>>      staff-bar
>>      clef
>>      key-cancellation
>>      key-signature
>>      time-signature))
>>
>> Now it should be clear why this affects end-of-line, middle of line
>> and start-of-line in the same manner.
>> To get different settings you can't use (make-vector 3 '( ... )), but
>> you have to specify each entry in the vector differently.
>>
>> @David
>> If an experienced user like Damian stumbles across it, it might be
>> worth clearifying it in NR/IR.
>> What do you think?
>
> Yes, even I could follow that.
>
> We could use this example and one that shows how to write it for specifying
> different vectors. I assume from reading this it would be
>
> ((make-vector 1 '( ... )),
> (make-vector 2 '( ... )),
> (make-vector 3 '( ... )),)


Not exactly.

Here some crazy settings for time-signature:

    #(
   ;; end of line: time-signature right before key-signature
       (span-bar
        breathing-sign
        staff-bar
        clef
        key-cancellation
        time-signature
        key-signature)
   ;; middle of line: time-signature right before staff-bar
      (span-bar
        breathing-sign
        time-signature
        staff-bar
        clef
        key-cancellation
        key-signature)
   ;; start of line: time-signature right before clef
      (span-bar
        breathing-sign
        staff-bar
        time-signature
        clef
        key-cancellation
        key-signature))

Though, applying this would return warnings:
  No spacing entry from TimeSignature to `clef'
  No spacing entry from TimeSignature to `key-signature'
which can be resolved with additional overrides for TimeSignature.space-alist


Here a compilable snippet:

\version "2.19.6"

{
  \override Score.BreakAlignment #'break-align-orders =
    ##(
   ;; end of line: time-signature right before key-signature
       (span-bar
        breathing-sign
        staff-bar
        clef
        key-cancellation
        time-signature
        key-signature)
   ;; middle of line: time-signature before staff-bar
      (span-bar
        breathing-sign
        time-signature
        staff-bar
        clef
        key-cancellation
        key-signature)
   ;; start of line: time-signature before clef
      (span-bar
        breathing-sign
        staff-bar
        time-signature
        clef
        key-cancellation
        key-signature))
  \override Score.TimeSignature.space-alist.clef = #'(extra-space . 1)
  \override Score.TimeSignature.space-alist.key-signature = #'(extra-space . 1)

  \key c \minor
  \time 2/2
  c''1
  \key cis \minor
  \time 4/4
  d''
  \break
  \key c \minor
  \time 8/8
  e''
}


Cheers,
  Harm



reply via email to

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