Couper une portée de piano

Bonjour à tout le monde!

Je cherche à interrompre une portée de piano au milieu d'une ligne afin d'y
insérer le texte «Da Capo e poi minore» pour ensuite la reprendre après le
texte.
Avec un code (ci-dessous) que j'avais récupéré je ne me rappelle plus où
(probablement ici-même…) je suis parvenu à mes fins mais avec deux points
que je trouve gênants et que je n'arrive pas à modifier:
1. le PianoStaff qui démarre après la «cassure» n'a plus d'accolade et
2. les clés de sol et de fa sont placées à l'extrême début des portées, sans
que les lignes ne dépassent à gauche…

Comment «récupérer» l'accolade (et la barre de mesure initiale) et faire en
sorte que les clefs aient le même aspect qu'au début d'une portée «normale»?

\version "2.22.0"

\new PianoStaff <<
  \relative c' {
    \new Staff {
      \repeat unfold 4 <e g c>1
      % Séparation
      \cadenzaOn \stopStaff
      \once \override TextScript #'word-space = #1.5
      \once \override TextScript #'X-offset = #1
      \once \override TextScript #'Y-offset = #-3
      s2*0^
  
      \markup { \center-column {
        \override #'(font-name . "Garamond Premr Pro Smbd") {
          \fontsize #2 \line {Da Capo}
          \vspace #0.5
          \line {e poi Minore}
        }
      }}
  
      \repeat unfold 4 {
        s4 s4
        \bar ""
      }
      % Resume bar count and show staff lines again
      \startStaff \cadenzaOff
      \time 2/4
      \key c \minor
      \override Staff.TimeSignature #'stencil = ##f
      \once \override Staff.KeySignature #'break-visibility =
#end-of-line-invisible
      \once \override Staff.Clef #'break-visibility = #end-of-line-invisible
      % Suite
      \repeat unfold 4 <es g c>1
    }
  }
  \relative c {
    \new Staff {
      \clef bass
      \repeat unfold 4 <e g c>1
      % Séparation
      \cadenzaOn \stopStaff
      \once \override TextScript #'word-space = #1.5
      \once \override TextScript #'X-offset = #1
      \once \override TextScript #'Y-offset = #-15
      s2*0
  
      \repeat unfold 4 {
        s4 s4
        \bar ""
      }
      % Resume bar count and show staff lines again
      \startStaff \cadenzaOff
      \time 2/4
      \key c \minor
      \override Staff.TimeSignature #'stencil = ##f
      \once \override Staff.KeySignature #'break-visibility =
#end-of-line-invisible
      \once \override Staff.Clef #'break-visibility = #end-of-line-invisible
      % Suite
      \repeat unfold 4 <es g c>1
    }
  }

···

-----
Cordialement

Bernard
--
Sent from: http://lilypond-french-users.1298960.n2.nabble.com/

Salut Bernard,

Est-ce que l’exemple joint peut t’aider?

JM

SplitSystemOnOneLine.ly (12.6 KB)

Bonjour Jacques!

et merci de te pencher sur mon problème. Mais si j'ai bien compris ton code,
il faut, après avoir effectué la «cassure», à chaque fin de ligne "\breaker"
celle-ci et au début de la suivante, refaire toute la construction de ce
début de ligne (accolade, barre initiale, clef et tutti quanti…)? C'est bien
ça?

···

-----
Cordialement

Bernard
--
Sent from: http://lilypond-french-users.1298960.n2.nabble.com/

Bonjour Jacques!

et merci de te pencher sur mon problème. Mais si j'ai bien compris ton code,
il faut, après avoir effectué la «cassure», à chaque fin de ligne "\breaker"
celle-ci et au début de la suivante, refaire toute la construction de ce
début de ligne (accolade, barre initiale, clef et tutti quanti…)? C'est bien
ça?

Bonjour,

C'est ce que j'en comprends. Voici une version de mon cru, davantage
taillée sur mesure que le code généraliste de Harm, qui ne le
nécessite pas.

Cordialement,
Jean

\version "2.23.1"

#(define (get-having-interface grobs interface)
(filter
(lambda (g)
(grob::has-interface g interface))
grobs))

#(define (relative-translation grob other axis)
(let ((refpoint (ly:grob-common-refpoint grob other axis)))
(- (ly:grob-relative-coordinate grob refpoint axis)
(ly:grob-relative-coordinate other refpoint axis))))

#(define (relative-stencil grob other)
(ly:stencil-translate
(ly:grob-property grob 'stencil)
(cons
(relative-translation grob other X)
(relative-translation grob other Y))))

#(define (fake-system-start grob)
(let* ((original-stencil (ly:span-bar::print grob))
(sys (ly:grob-system grob))
(elements-array (ly:grob-object sys 'elements))
(elements (ly:grob-array->list elements-array))
(system-starts (filter (lambda (g)
(grob::has-interface g 'system-start-delimiter-interface))
elements)))
(if (null? system-starts)
original-stencil
(let* ((one-system-star-bar
(or (find (lambda (g)
(eq? 'bar-line (ly:grob-property g 'style)))
system-starts)
(begin
(ly:warning "Cannot find system start bar to align to")
(first system-starts))))
(system-start-stencil
(apply ly:stencil-add
(map
(lambda (g)
(relative-stencil g one-system-star-bar))
system-starts))))
(ly:stencil-add system-start-stencil original-stencil)))))

text =
\tweak word-space 1.5
\tweak font-name "Garamond Premr Pro Smbd"
\mark
\markup {
\center-column {
\fontsize #2 \line { Da Capo }
\vspace #0.5
\line { e poi Minore }
}
}

filler = {
\stopStaff
\once \textLengthOn
<>^\markup {
" " % ?
\with-dimensions #'(-10 . 10) #'(-1 . 1)
" "
}
s1
\text
s1
\once \omit Staff.TimeSignature
\once \override Score.BreakAlignment.break-align-orders =
#(make-vector 3 '(staff-bar
clef
key-signature))
\once \override PianoStaff.SpanBar.stencil = #fake-system-start
\once \override Staff.KeySignature.break-visibility = #end-of-line-invisible
\once \override Staff.Clef.break-visibility = #end-of-line-invisible
\startStaff
}

\new PianoStaff <<
\relative c' {
\new Staff {
\repeat unfold 4 <e g c>1
\filler
\time 2/4
\key c \minor
\repeat unfold 4 <es g c>1
}
}
\relative c {
\new Staff {
\clef bass
\repeat unfold 4 <e g c>1
\filler
\time 2/4
\key c \minor
\repeat unfold 4 <es g c>1
}
}

···

Le 22/03/2021 à 18:19, Bernard Meylan a écrit :
>>

Magnifique, merci Jean! J'ai encore une question: est-il possible de déplacer
le bloc de texte au milieu des 2 portées de piano?

···

-----
Cordialement

Bernard
--
Sent from: http://lilypond-french-users.1298960.n2.nabble.com/

Oui, ajoutez \tweak X-offset #xxx ou \tweak Y-offset #yyy,
voire les deux, juste devant le \mark. Et pour ajuster
l'espace laissé au milieu, c'est le #'(-10 . 10) dans \filler.

Au fait, n'oubliez pas de corriger les numéros de mesure avec
un \set Score.currentBarNumber = #nnn, par exemple à la fin
de \filler.

Cordialement,
Jean

···

Le 22/03/2021 à 21:27, Bernard Meylan a écrit :

Magnifique, merci Jean! J'ai encore une question: est-il possible de déplacer
le bloc de texte au milieu des 2 portées de piano?