Hey, Jakob!

On Tue, May 23, 2023 at 8:57 AM Jakob Pedersen <jak...@vivaldi.net> wrote:

> Dear Abraham and Xavier
>
> Thank you for this! I must have read the documentation wrong.
>
> That – unfortunately – causes new problems, because my project is in
> different files and scores in different bookparts.
>
> I'm getting a warning: set-global-staff-size: not in toplevel scope error
> when compiling. That's with the size set in the top-level doc layout block.
> Same if I add it to the actual score document.
>
> If I add anything to the actual score layout block, it ignores my
> top-level document layout, which isn't practical, but can be fixed, I
> suppose, by editing the score files.
>
> Have I organised my score badly? I have attached my top-level document and
> a score document.
>
> My apologies for not including this in the first email. I didn't think it
> could be a problem with the file(s) structure.
>
> Best wishes,
> Jakob
>
> On 23.05.2023 15.58, Abraham Lee wrote:
>
> Hi, Jakob!
>
> On Tue, May 23, 2023 at 7:44 AM Jakob Pedersen <jak...@vivaldi.net> wrote:
>
>> Greetings!
>>
>> I'm writing some chorales for playing hymns on the organ. I've chosen a
>> larger staff size to improve readability.
>>
>> Having adjusted #(layout-set-staff-size ##) to 26, I'm noticing some
>> less-than-fortunate side effects.
>>
>> The key signature is very, very close to the clef, and the notes are too
>> close to the bar line.
>>
>>
>>
>> Is there an elegant way to adjust this to the larger staff size?
>>
>> A minimal example:
>>
>> \version "2.24.1"
>> \language "deutsch"
>>
>> global = {
>>   \key f \major
>>   \time 3/2
>> }
>>
>> rightOne = \relative c' {
>>   \global
>> f4 g f2 c | d4 e f2 a |
>> }
>>
>> rightTwo = \relative c' {
>>   \global
>> c2 c a | b a c |
>> }
>>
>> leftOne = \relative c {
>>   \global
>> a'4 g a2 a | f4 g c,2 f |
>> }
>>
>> leftTwo = \relative c {
>>   \global
>> f4 e f2 f | b,4 g f2 f |
>> }
>>
>> \score {
>>   \new PianoStaff <<
>>     \new Staff = "right" <<
>>       \new Voice = "soprano" {
>>         \voiceOne << \rightOne >>
>>       }
>>       \new Voice = "alto" {
>>         \voiceTwo << \rightTwo >>
>>       }
>>     >>
>>     \new Staff = "left" <<
>>       \clef bass
>>       \new Voice = "tenor" {
>>         \voiceOne << \leftOne >>
>>       }
>>       \new Voice = "bass" {
>>         \voiceTwo << \leftTwo >>
>>       }
>>     >>
>>   >>
>>
>>   \layout {
>>     #(layout-set-staff-size 26)
>>   }
>>
>> }
>>
>>
>> Best wishes,
>>
>> Jakob
>>
>
> layout-set-staff-size is intended to resize an individual staff within a
> group of others at a default size. In your case, you've resized (but not
> respaced) all the Staffs relative to the implicit default 20 pt staff
> height, which is why things got cramped. What you want to do instead is put
> this command near the top of your file:
>
> #(set-global-staff-size 26)
>
> This changes the default staff size and respaces accordingly. By doing
> this, you can then remove the layout-set-staff-size command completely as
> it is no longer necessary.
>
> Hope that helps,
> Abraham
>
>
>
I looked at your files and obviously I didn't explain the solution very
well lol. Let me try again. And in fairness, the manual doesn't fully
explain any of the usage details I explain below.

The set-global-staff-size command does have some conditions and
implications for use. As you discovered, it's a "top level" command,
meaning that it can only be applied to an entire \book and not to an
individual \bookpart or \score. Also, it needs to be called outside any
\layout block.

So, here's how I would restructure the files you provided:

%<-----------------------------------scorebook.ly------------------------------------------
\version "2.24.1"

#(set-global-staff-size 26)  % <----- put it here

\header {
  tagline = ##f
}

\include "hymn.ly"

\paper {
  #(set-paper-size "a4landscape")
}

\layout {
  indent = 0.0
  \context {
    \Score
    \remove "Bar_number_engraver"
  }
  % don't put it here
}

% A hymn begins here
% \bookpart { ... etc. }

% This hymn begins here
  \bookpart {

    \header {
      title = "123. This a hymn"
      composer = \markup { \vspace #1.5 Something German ~1550 }
    }

    \hymnscore

  }

% Another hymn begins here
% \bookpart { ... etc. }

%<-----------------------------------hymn.ly------------------------------------------

\version "2.24.1"
\language "deutsch"

global = {
  \key f \major
  \time 3/2
}

rightOne = \relative c' {
  \global
f4 g f2 c | d4 e f2 a |
}

rightTwo = \relative c' {
  \global
c2 c a | b a c |
}

leftOne = \relative c {
  \global
a'4 g a2 a | f4 g c,2 f |
}

leftTwo = \relative c {
  \global
f4 e f2 f | b,4 g f2 f |
}

hymnscore = \score {
  \new PianoStaff <<
    \new Staff = "right" <<
      \new Voice = "soprano" {
        \voiceOne << \rightOne >>
      }
      \new Voice = "alto" {
        \voiceTwo << \rightTwo >>
      }
    >>
    \new Staff = "left" <<
      \clef bass
      \new Voice = "tenor" {
        \voiceOne << \leftOne >>
      }
      \new Voice = "bass" {
        \voiceTwo << \leftTwo >>
      }
    >>
  >>

  \layout {
    % don't put it here either, or anywhere else in this file
  }
}

%<------------------------------------------------------------------------------------------------

Some other things to note about using set-global-staff-size as you continue
to expand the hymnal with multiple sections (not that you'll likely have a
score with this drastically different staff sizes, but just for example):

1. This DOES NOT work (the last call takes precedence because they're both
within the same implicit \book):

#(set-global-staff-size 26)
\score { ... }

#(set-global-staff-size 13)
\score { ... }

2. This DOES NOT work either (same reason as #1, they're both implicitly
within the same \book, so that last call gets applied to both):

#(set-global-staff-size 26)
\bookpart {
  \score { ... }
}

#(set-global-staff-size 13)
\bookpart {
  \score { ... }
}

3. This DOES work because they're in separate \book blocks (but now you
have separate output files instead of them being in the same one):

#(set-global-staff-size 26)
\book {
  \score { ... }
}

#(set-global-staff-size 13)
\book {
  \score { ... }
}

I hope that has made it more clear about when/how/why to use this command.

Best,
Abraham

@Devs (if any are reading through this), to the point of the OP's original
question, and related to what's described in Section 2 of
https://lilypond.org/doc/v2.24/Documentation/notation/setting-the-staff-size,
this is not entirely accurate to say you can use layout-set-staff-size for
individual scores. I mean, yes, layout-set-staff-size can be used, but the
layout engine still horizontally spaces things as if it was whatever the
global staff size is (as shown by the OP's picture). For small size
changes, or decreasing the size, like changing it to 18 vs a global 20,
then it's not so noticeable, but a big change, or going up in size, like
changing it to 26 with a global 20, then the spacing issue becomes
considerably more apparent. I am not a Dev and I have no idea what's
required to fix this behavior, but not being able to cleanly adjust the
staff size of individual book parts or scores within the same \book is a
long-standing complaint I've had. I've worked around it by creating
separate \book blocks and then spliced them together later, but it's a
hassle. Why not just have it do the right/expected thing from the
beginning? Thanks for all you do! LP continues to be my go-to engraver and
I thank you for keeping it running!

Reply via email to