Subject: Deux bookpart sur une page

From: Pierre Perol-Schneider <[email-masked]>
Date: Fri, 1 May 2020 12:37:41 +0200

Chers tous,
La question a déjà été posée sur la liste anglophone mais je me permets de
la doubler ici, à tout hasard...
(En fait, c'est un marronnier... Bref.)
Problème : j'ai deux portées indépendantes, je souhaite les faire
apparaître sur une seule page à la façon de deux bookpart, c'est à dire que
je puisse au moins régler la distance system-system indépendamment.
Voilà l'astuce que j'imagine (un méchant hack) :

\version "2.20.0"

un = { \repeat unfold 16 s1 \bar "|." }
deux = { \repeat unfold 8 s1 \bar "|." }

\book {
  \header { title = "Titre" }
  \bookpart {
    \markup\bold\fontsize #2 "Un"
    \score  {
      \un
      \layout {
        system-count = 4
        \context {
          \Score
          \override BarNumber.Y-extent = #'(0 . 15)
        }
      }
    }
    \markuplist { \vspace #5 \bold\fontsize #2 "Deux" }
    \score  {
      \deux
      \layout {
        system-count = 2
        \context {
          \Score
          \override BarNumber.Y-extent = #'(0 . 20)
        }
      }
    }
  }
}

L'idée est de créer un espace fantôme variable entre les systèmes.
Problème : le Y-extent ne s'applique pas aux deuxièmes systèmes. Quelqu'un
en connait-il la raison ?
Par avance merci, cordialement,

Pierre

---

From: Valentin Villenave <[email-masked]>
Date: Fri, 1 May 2020 14:28:09 +0200

> Voilà l'astuce que j'imagine (un méchant hack) :

Pas mal trouvé…

> en connait-il la raison ?

Si, il s’applique partout, mais tu lui as demandé de n’ajouter de
l’espace que vers le bas. La paire indique les coordonnées Y du point
de départ et du point d’arrivée de l’extent, donc si tu mets Y-extent
= #'(0 . 20), il n’ajoute rien au-dessus mais tout en-dessous, alors
qu’avec Y-extent = #'(-10 . 10) il ajoutera 10 staff-spaces vers le
haut et 10 vers le bas.

V.

---

From: Valentin Villenave <[email-masked]>
Date: Fri, 1 May 2020 14:43:19 +0200

On 5/1/20, Valentin Villenave <[email-masked]> wrote:
> avec Y-extent = #'(-10 . 10) il ajoutera 10 staff-spaces vers le
> haut et 10 vers le bas.

… Mais ça va faire moche quand même.

Tu veux du hack? En voilà (attention ça pique) :

%%%%

\language "français"

addSpace =
#(define-music-function (padding music) (number? ly:music?)
   #{ \context Voice <<
     \repeat unfold $(ly:moment-main-numerator
                      (ly:moment-div
                       (ly:music-length music)
                       (ly:make-moment 1 4)))
     s4_\markup {
       $(make-vspace-markup padding)
       \null }
     $music
   >> #})

un = \repeat unfold 16 \fixed do'
{do8 ré mi fa sol la si do}

deux = \repeat unfold 8 \fixed do'
{do8 ré mi fa sol la si do}

\book {
      \addSpace 3 \un
      \addSpace 5 \deux
      \layout {
        system-count = 2
      }
    }
  }
}

%%%

V.

---

From: Pierre Perol-Schneider <[email-masked]>
Date: Fri, 1 May 2020 14:48:45 +0200

Merci Valentin.
Humm, sûr ?
Pour moi je comprends #'(0 . 20) comme 20 points d'espace supplémentaire
vers le haut, non vers le bas ou ?
De fait, avec les lignes d'horizon on voit bien que l’extension Y de la
mes.5 n'est pas prise en compte.
\version "2.20.0"
#(ly:set-option 'debug-skylines #t)
un = { \repeat unfold 16 s1 \bar "|." }
deux = { \repeat unfold 8 s1 \bar "|." }

\book {

En même temps que j'écris je viens de comprendre : c'est l'indentation qui
créé le "vide"...

Le ven. 1 mai 2020 à 14:28, Valentin Villenave <[email-masked]> a

---

From: Pierre Perol-Schneider <[email-masked]>
Date: Fri, 1 May 2020 14:49:37 +0200

Ah ok, je regarde ça de suite, merci Valentin !
Cordialement,
Pierre

Le ven. 1 mai 2020 à 14:43, Valentin Villenave <[email-masked]> a

---

From: Valentin Villenave <[email-masked]>
Date: Fri, 1 May 2020 15:00:25 +0200

> vers le haut, non vers le bas ou ?

Oui, j’ai raconté n’importe quoi effectivement. En fait la raison pour
laquelle ça ne s’applique qu’à partir du troisième système est tout
bêtement l’indent du premier système. Si tu mets indent=0 dans le
\layout, ça s’applique dès le deuxième système.

V.

---

From: Pierre Perol-Schneider <[email-masked]>
Date: Fri, 1 May 2020 15:02:46 +0200

Oui c'est ça, j'ai compris en même temps que je te répondais...
C'est tout couillon finalement ; bon je me penche sur ton hack.

Le ven. 1 mai 2020 à 15:00, Valentin Villenave <[email-masked]> a

---

From: Pierre Perol-Schneider <[email-masked]>
Date: Fri, 1 May 2020 15:28:47 +0200

Je garde, merci Valentin.
Dans l'idéal, je pensais à un nouveau sous-bloc de \bookpart, quelque chose
qui pourrait s'écrire \bookpiece par ex. :

\book {
  \header { title = "Titre" }
  \bookpart {
    \bookpiece {
      \score  {
        \un
        \layout { }
      }
      \header { piece = "Un" }
      \paperpiece { system-system = #'((basic-distance . 15)) }
    }
    \bookpiece {
      \score  {
        \deux
        \layout { }
      }
      \header { piece = "Deux" }
      \paperpiece { system-system = #'((basic-distance . 20)) }
    }
    \paper {
      page-count = 2
      ragged-last-bottom = ##t
    }
  }
}

---

From: Valentin Villenave <[email-masked]>
Date: Fri, 1 May 2020 18:55:37 +0200

On 5/1/20, Pierre Perol-Schneider <[email-masked]> wrote:
> qui pourrait s'écrire \bookpiece par ex.

Oui, on aurait sûrement déjà eu ça si Nicolas Sceaux en avait un jour
ressenti la nécessité :-/

Cela étant je me dis aussi que c’est déjà suffisamment complexe comme
ça pour expliquer aux débutants la différence entre \book, \bookpart
et \score, et la soixantaine de propriétés de -spacing différentes à
régler dans tout ce bazar… Franchement, rien que par pure paresse je
préfère m’en sortir avec des hacks.

V.