Subject: saut de page intempestif

From: "Daniel Bernair \(Belgacom.net\)" <[email-masked]>
Date: Thu, 7 Feb 2019 17:56:24 +0100

Re-bonjour,

Je repars dans mon délire. 

Dans cette partition (voir fichier joint) j’ai un saut de
page à la mesure 18 que je ne parviens pas à maîtriser. Il
s’agit de la portée unisson du chœur. L’éclatement se fait à
la mesure 27 après les flèches en bout de portée. 

C‘est comme si Lilypond prévoyait la place pour les 5
portées alors que quatre sont empty.

Je suis en version   2.19.82 sous Windows 10 x64 et
Frescobaldi 2.19. 

Je viens d’adapter à la version 2.19.82 les variables
splitStaffBarLine, convDownStaffBarLine et
convUpStaffBarLine mais rien ne change.

Je ne vois pas quoi faire.

Merci de votre aide

---

From: Valentin Villenave <[email-masked]>
Date: Thu, 7 Feb 2019 18:08:13 +0000

> portées alors que quatre sont empty.

Je pense plutôt que LilyPond prend ses aises, en voyant qu’il va y
avoir des portées chargées avec des nuances, des paroles etc. Vous
pouvez régler ça en jouant avec les propriétés dans \paper du genre
system-system-spacing, etc. (c’est un peu compliqué)… ou alors vous
pouvez tout simplement glisser un \pageBreak après votre
\splitStaffBarLine. (Oui, ce n’est pas très propre, mais ça vous
évitera quelques dizaines de minutes dans la section 4.1 du manuel.)

Juste au passage, votre code sent (et pour cause) la conversion depuis
MusicXML (au passage, faites attention aux [de]crescendos anarchiques
dans la partie de piano) ; voici une façon éventuellement plus
élégante (en tout cas à mon goût) de présenter le bloc \score à la fin
du code.

%%%%%%%%%%%%%%%%

% The score definition
\score {
  <<
    \new StaffGroup <<
      \new Staff \with {
        instrumentName = "U"
        shortInstrumentName = "U"
      }
      \new Voice = "PartPTousVoiceOne" \PartPTousVoiceOne
      \new Lyrics \lyricsto "PartPTousVoiceOne" \PartPTousVoiceOneLyricsOne
      \new Staff \with {
        instrumentName = "S"
        shortInstrumentName = "S"
      } \new Voice = "PartPOneVoiceOne" \PartPOneVoiceOne
      \new Lyrics \with {stanza = "1."} \lyricsto "PartPOneVoiceOne"
\PartPOneVoiceOneLyricsOne
      \new Staff \with {
        instrumentName = "A"
        shortInstrumentName = "A"
      }  \new Voice = "PartPTwoVoiceOne" \PartPTwoVoiceOne
      \new Lyrics \with {stanza = "1."} \lyricsto "PartPTwoVoiceOne"
\PartPTwoVoiceOneLyricsOne
      \new Staff \with {
        instrumentName = "T"
        shortInstrumentName = "T"
      } \new Voice = "PartPThreeVoiceOne" \PartPThreeVoiceOne
      \new Lyrics \with {stanza = "1."} \lyricsto "PartPThreeVoiceOne"
\PartPThreeVoiceOneLyricsOne
      \new Staff \with {
        instrumentName = "B"
        shortInstrumentName = "B"
      } \new Voice = "PartPFourVoiceOne" \PartPFourVoiceOne
      \new Lyrics \with {stanza = "1."} \lyricsto "PartPFourVoiceOne"
\PartPFourVoiceOneLyricsOne
    \new PianoStaff \with {
      shortInstrumentName = "P"
    } <<
      \new Staff = "1" <<
        \PartPFiveVoiceOne
        \\ \PartPFiveVoiceTwo
      \new Staff = "2" <<
        \PartPFiveVoiceFive
        \\ \PartPFiveVoiceSix
    >> {
      %% Serrer les notes au début :
      \override Score.SpacingSpanner.common-shortest-duration =
      #(ly:make-moment 1/4) % (ajuster la fraction si besoin)
      \partial 4 s4
      s1*10 % Au bout de 10 mesures, on revient normalement:
      \newSpacingSection
      \revert Score.SpacingSpanner.common-shortest-duration
    }
  \layout {
    \context {
      \Staff
      \mergeDifferentlyDottedOn
      \mergeDifferentlyHeadedOn
      \RemoveAllEmptyStaves
    }
  }
  % To create MIDI output, uncomment the following line:
  \midi {\tempo 4 = 72 }
}

%%%%

Cordialement,
V. V.

---

From: "Daniel Bernair \(Belgacom.net\)" <[email-masked]>
Date: Fri, 8 Feb 2019 11:32:02 +0100

Merci Valentin pour votre aide. Effectivement, ces fichiers proviennent de Musescore. L'un est n MXL et non XML, l'autre est un .ly . Ces fichiers m'ont été envoyés par vous-même, ce qui m'a fait gagner beaucoup de temps. J'ai utilisé le .ly
Pour suivre, j'ai un autre problème : 
J'ai appliqué dans mon .ly les instructions score que vous proposez, tout en gardant les anciennes placées en commentaires. Les résultats ne sont pas identiques et franchement je n'y comprends rien. Voir la capture d'écran jointe.
On peut voir sous le Texte Adagio quatre lignes 1. et sous l'introduction, du piano une seule portée puis un saut de page, puis la suite de la partition. J'ai remis vos instructions score en commentaire et libéré mon score .   
Dans ma compilation originale, je n'ai pas ces lignes 1. sous Adagio et j'ai deux portées avant le saut de page. 
J'ai essayé en ajoutant un \pageBreak après l'éclatement des flèches mais l'introduction piano est suivie d'un saut de page, puis on a sur une page les quatre mesures de l'unisson puis un saut de page.
Je me demande si on aurait ces problèmes avec la version 2.18.2
Toujours est-il qu'il y a moyen de s'arracher les cheveux. 
Bien amicalement.
Daniel Bernair

-----Message d'origine-----
De : lilypond-user-fr <lilypond-user-fr-bounces+daniel.bernair=[email-masked]> De la part de Valentin Villenave
Envoyé : jeudi 7 février 2019 19:08
À : Daniel Bernair (Belgacom.net) <[email-masked]>
Cc : [email-masked]
Objet : Re: saut de page intempestif

On 2/7/19, Daniel Bernair (Belgacom.net) <[email-masked]> wrote:
> C‘est comme si Lilypond prévoyait la place pour les 5 portées alors 
> que quatre sont empty.

Je pense plutôt que LilyPond prend ses aises, en voyant qu’il va y avoir des portées chargées avec des nuances, des paroles etc. Vous pouvez régler ça en jouant avec les propriétés dans \paper du genre system-system-spacing, etc. (c’est un peu compliqué)… ou alors vous pouvez tout simplement glisser un \pageBreak après votre \splitStaffBarLine. (Oui, ce n’est pas très propre, mais ça vous évitera quelques dizaines de minutes dans la section 4.1 du manuel.)

Juste au passage, votre code sent (et pour cause) la conversion depuis MusicXML (au passage, faites attention aux [de]crescendos anarchiques dans la partie de piano) ; voici une façon éventuellement plus élégante (en tout cas à mon goût) de présenter le bloc \score à la fin du code.

%%%%%%%%%%%%%%%%

% The score definition
\score {
  <<
    \new StaffGroup <<
      \new Staff \with {
        instrumentName = "U"
    \new PianoStaff \with {
      \new Staff = "2" <<
        \PartPFiveVoiceFive
        \\ \PartPFiveVoiceSix
  \layout {
    \context {
      \Staff

%%%%

Cordialement,
V. V.

_______________________________________________
liste de diffusion lilypond-user-fr
[email-masked]
https://lists.gnu.org/mailman/listinfo/lilypond-user-fr

---

From: Valentin Villenave <[email-masked]>
Date: Fri, 8 Feb 2019 14:25:47 +0000

> Toujours est-il qu'il y a moyen de s'arracher les cheveux.

Bonjour,
effectivement la moindre des choses aurait été que je teste mon code
avant de vous l’envoyer!

Bon, j’ai complètement nettoyé votre code (résultat ci-joint) ; vous
pourrez regarder de quelle façon je m’y suis pris et éventuellement
vous en inspirer s’il y a lieu. Quelques remarques :

- les nuances ne se mettent pas à l’intérieur d’un accord, mais après.
C’est pour cela que vos crescendos de la partie de piano ne se
terminaient pas; n’écrivez pas
<d'\p f a>8
mais plutôt
<d' f a>8\p

- pas la peine de mettre plein d’\arpeggio, un seul suffit pour chaque
accord arpégé (je soupçonne que c’est la conversion musicxml2ly qui
fait ça).

- Ouh là là, les \skip dans les paroles… pas besoin! Il suffit
d’utiliser le caractère "_".

- pas la peine de mettre des crochets [ après ] les [ notes ] à
grouper, LilyPond s’en charge très bien tout seul. Ne l’utilisez que
lorsqu’il y a quelque chose de particulier (par exemple vis-à-vis des
syllabes des paroles).

- \times 2/3 a été remplacé depuis quelques années par \tuplet 3/2.
\tuplet présente l’avantage de pouvoir également saisir plusieurs
triolets d’un seul coup, en ajoutant une durée après la fraction.

- utiliser \once \omit TupletBracket plein de fois à la suite, il y a
plus simple : \omit TupletBracket (sans \once), puis si jamais vous
voulez les réafficher plus tard, \undo \omit TupletBracket.

- de même, si pour une voix donnée vous voulez que toutes les nuances
s’impriment au-dessus plutôt qu’en-dessous, pas la peine de mettre
^\p, ^\<, ^\f etc; ajoutez simplement \dynamicUp au début de la voix
en question puis entrez les nuances normalement (là encore, ça sent le
code généré automatiquement).

- vous pouvez basculer en mode \oneVoice lorsque, comme son nom
l’indique, il n’y a plus qu’une voix (notamment dans les portées du
piano). Comme vous l’avez remarqué, cela imprime les silence bien au
milieu, mais cela permet aussi de tourner les hampes de façon moins
moche.

- les \mark peuvent très bien imprimer des nombres avec des boîtes
sans avoir besoin qu’on leur donne un \markup \box.

- en parlant de markup, pas besoin d’ajouter des accolades après
\markup s’il est suivi d’une commande (par exemple \italic).

- N’hésitez pas à utiliser les outils de Frescobaldi : par exemple
"Outils > Indentation" qui est très utile pour comprendre
l’enchevêtrement de blocs entre accolades. Ou encore, Rythmes >
"rendre implicites les durées", que j’ai moi-même utilisé sur votre
code.

En tout, j’ai diminué d’environ un quart la taille de votre code (et
ce serait évidemment encore plus léger et lisible si ça avait
directement été saisi par un être humain plutôt qu’une moulinette
automatique)…

Cordialement,
V. V.

---

From: "Daniel Bernair \(Belgacom.net\)" <[email-masked]>
Date: Fri, 8 Feb 2019 16:36:35 +0100

Merci mille fois, Valentin, cela fonctionne à merveille. 
Je vais maintenant étudier toutes les modifications apportées.
En fait, quand j'ai une instruction à donner dont je ne connais plus la syntaxe, je vais chercher dans ma boîte à outil et dans mes autres partitions mais ce n'est plus à jour et je n'ai pas toujours le temps de convertir mes vieux outils.   Chercher un truc, déjà utilisé, dans le manuel de référence demande parfois un temps très très long.
Bien amicalement.
Daniel Bernair