Configuración de armadura de clave cambiada antes de volta en Lilypond

Estoy escribiendo la primera pieza de Mozart, K1 - Minuet and Trio. La estructura es esencialmente 4 repeticiones. Después de las dos primeras repeticiones, la armadura de clave cambia de sol mayor a do mayor.

He dividido la mano derecha en dos variables: rh-g y rh-c y estoy usando \key c \majoral principio de la segunda variable.

Sin embargo, por defecto, lilypond (2.23) añade los naturales en la nueva armadura de clave al final de la repetición anterior.

ingrese la descripción de la imagen aquí

¿Hay alguna manera de que los naturales aparezcan al comienzo de la siguiente sección donde normalmente estaría una armadura?

El código que estoy usando es:

\version "2.23"

\header {
  title = "Minuet and Trio"
  subtitle = "K1"
  composer = "Wolfgang Amadeus Mozart (1756-1791)"
  style = "Classical"
  license = "Public Domain"
  maintainer = "Tim Burgess"
  maintainerEmail = "timburgess@mac.com"
}

global = {
  \time 3/4
  \tempo 4 = 80
}

rh-g =  {
  \key g \major
  \relative g' {
    \repeat volta 2 {
      \partial 4 b'8(\mf g8 b,4)-. c4-. d4-. d4( c4)    a'8( fis8 a,4)-. b4-. c4-. c4( b4) b'8( g8 \break

      e4) g8( e8 cis4)  e8( cis8 a8 g8 fis4)  \tuplet 3/2 { b8( a8 g8 } fis4)-. e4-. | d2 \break
    }

    \repeat volta 2 {
      \partial 4 d'8(\mp b8 gis4)-. f'4-. e4-. d4( c4) c8( a8 fis4)-. e'4-. d4-. c4( b4) e8(\mf c8 \break
    
      a4) c8( a8 fis4) d8( fis8 a8 c8 b4) \tuplet 3/2 { e8( c8 a8 } g4)-. fis4-. g2 \break
    }
  }
}

rh-c =  {
  \key c \major
  \relative g' {
    % bar 18
    \repeat volta 2 {
      \partial 4 c8( g8 e4)-. e4-. d8( e8) e4( f4) d'8( b8 f4)-. f4-.  e8( d8) d4( e4) e'16( d c b \break

      a4 a'4) d,16( c b a g4 g'4) d16( b a g e'4 d4)-.  fis,4-. a4( g4) s4 \break
    }
  }
}

rh = {
  \clef "treble"
  \rh-g
  \rh-c
  \bar "|."
}

lh =  {
  \clef "bass"
  \relative g {
    \key g \major
    \partial 4 r4
    g4-. a4-. b4-. | b4( a4) r4 |
    fis4-. g4-. a4-. | a4( g4) r4 |
    g2 e4 | cis4 a4 d4 | g4 a4-. a,4-. | d4-. d,4-.

    \partial 4 r4
    e'4-. d'4-. c4-. | b4 a4 a8 fis8 | d4-. c'4-. b4-. | a4 g4 r4 |
    c2 a4 | fis4 d4 g4 | c4 d4-. d,4-. | g2

    \key c \major
    \partial 4 c,8 e8
    R2.*8

  }
}
Como aclaración, LilyPond está haciendo las cosas de acuerdo con la práctica estándar. ¿Hay alguna razón por la que necesite que su puntaje se desvíe de eso?
Solo preferencia personal. He visto partituras no públicas que han sido anotadas de esta manera.
Al igual que @Aaron, estoy desconcertado por esto. Hace la vida mucho más fácil para el músico si se mantiene la notación estándar cuando no están sucediendo cosas no estándar. La imagen que publicaste tiene el cambio escrito al final de la sección G mayor, lo cual es bueno. Luego, en la siguiente línea, donde normalmente sería una firma de clave, de hecho tiene la firma de clave, porque la firma de clave para Do mayor no es nada, ni sostenidos, ni bemoles, simplemente nada. Y nada es exactamente lo que has escrito. Por lo tanto, tiene la firma clave completamente escrita correctamente en esa imagen.
Los naturales que cancelan la armadura anterior hacen que el cambio sea muy obvio; sin ellos, sería muy fácil pasar por alto la falta de objetos punzantes al comienzo de la siguiente línea.

Respuestas (1)

Línea 475en ./usr/share/lilypond/current/scm/define-grobs.scmmuestra donde break-align-ordersse define. Esencialmente, controla el orden en que aparecerán ciertos elementos. En su diseño, agregue esto:

\layout {
  \context {
    \Score
      \override BreakAlignment.break-align-orders =
  #(make-vector 3 '(
                    left-edge
                    cue-end-clef
                    ambitus
                    breathing-sign
                    clef
                    cue-clef
                    staff-bar
                    key-cancellation
                    key-signature
                    time-signature
                    custos))
    }
}

Cambia el orden de estos dos:

                staff-bar
                key-cancellation

O, si no desea que esto ocurra siempre, utilícelo en una variable para \onceasegurarse de que solo ocurra una vez.

temp_change = \once \override Score.BreakAlignment.break-align-orders =
  ...

music = \relative c'' {
  g2 \temp_change \break
  ...
}