Subject: Sauts de pages et compilation conditionnelle - SOS !!!!

From: Bernard Barbier <[email-masked]>
Date: Mon, 30 Jan 2023 18:02:46 +0100

Bonjour à tous,

Il est encore temps pour souhaiter la bonne année, alors belle année 
2023 à tous !

J'ai un petit problème que je n'arrive pas à éclaircir même avec la doc 
en utilisant le -e à la compilation de mon fichier .ly

Voila : j'ai une partition (normal) un peu longue, chœur (S-A-T-B) + 
Réduction Piano pour l'accompagnateur en répétition, la basse continue 
et son chiffrage.

Pour les sorties, j'ai :

  * un pdf choriste avec juste le S-A-T-B,
  * un pdf chef et continuiste : S-A-T-B avec le continuo et le chiffrage,
  * un pdf accompagnateur répétition avec tout.

pour chaque partie, il y a les sauts de pages et les tournes à placer au 
bons endroits.

j'ai donc fait à la mimine :

*choeurBreak = { \break }
chefBreak = { \break }
accompagnateurBreak = { \break}*

et dans ma partition, j'ai des fois : *\choeurBreak* et/ou un peu plus 
loin*\accompagnateurBreak* et à chaque compilation, je redéfinis, par 
exemple pour une compilation pour l'accompagnateur :

*choeurBreak = { %{ \break %} }
chefBreak = { %{ \break %} }
accompagnateurBreak = { \break}*

et je relance pour avoir le pdf accompagnateur.

Ce que j'aimerais bien faire, c'est une compilation avec un *-e 
'(define-accompagnateur ##t)* pour que ça fasse le travail à ma place et 
commente et/ou décommente mes \break maison... 
(https://lilypond.org/doc/v2.23/Documentation/usage-big-page.fr.html#advanced-command-line-options-for-lilypond) 
peut-être que je me lance sur la mauvaise idée...

en C, j'aurais fait un *#ifdef*, mais là.... au secours !!! je ne vois 
pas du tout, mais alors pas du tout comment faire !

Ci dessous, un extrait de code.

si quelqu'un pouvait m'aider, cela me gagnerait un temps précieux !

10.000 mercis,

Bernard.

___________________________________

*bbreak = { \break } % à décommenter pour pfd du choeur**(penser à 
recommenter ***bbPageBreak*)*
*
bbPageBreak = { %{ \pageBreak%}  }**% à décommenter pour pfd 
accompagnateur (penser à recommenter bbreak)*
*

scoreASopranoPopuleMeus = {
   \mark \markup \rounded-box "I"
   sib1 do2 sib2 |
   la1 re~ |
   re4 do sib2 la la |
   re2. do4 sib1 |\bbreak
   do2 la sib sol |
   la1 r2 sib4 sib |
   sib2 sib sol sol |
   sol1 lab2 sib |\bbreak
   do2. do4 si2 mib |
   mib2 re4 do si2 do |
   do2 si4 la si1 |
   do1 r2 sol |\bbreak
   re'1 do2 do |
   sib2 sib la1 |
   sol\breve \fermata \bar "||" \break \bbPageBreak
}*

---

From: Ben <[email-masked]>
Date: Mon, 30 Jan 2023 20:06:04 +0100

Bonjour Bernard, 

Pour ma part, je ferais un break conditionnel de cette manière:

je définis une variable modepartition qui contient le mode actuel, puis j'ai une fonction scheme qui interroge la variable et imprime l'instruction \break:

\version "2.25.0"

modepartition = "ac"  % ac pour accompagnateur

fonctionbreak = 
#(define-void-function ()()
   ( if ( string=? modepartition "ac" ) ( ly:parser-include-string (format #f "\\break"))) 
   )

\relative c' { c4 d \fonctionbreak e f }

Ensuite, il suffit de changer la variable avant de compiler et le tour est joué…

Pour le faire depuis la ligne de commande, je sais qu'il existe une possibilité, mais je n'ai pas réussi à la mettre en œuvre, j'ai alors fait un bête script qui modifie la variable dans le fichier .ly puis qui lance la compilation…

Au plaisir, 

Ben

> Le 30 janv. 2023 à 18:02, Bernard Barbier <[email-masked]> a écrit :
> 
> Bonjour à tous,
> 
> Il est encore temps pour souhaiter la bonne année, alors belle année 2023 à tous !
> 
> J'ai un petit problème que je n'arrive pas à éclaircir même avec la doc en utilisant le -e à la compilation de mon fichier .ly
> 
> Voila : j'ai une partition (normal) un peu longue, chœur (S-A-T-B) + Réduction Piano pour l'accompagnateur en répétition, la basse continue et son chiffrage.
> 
> Pour les sorties, j'ai :
> 
> un pdf choriste avec juste le S-A-T-B,
> un pdf chef et continuiste : S-A-T-B avec le continuo et le chiffrage,
> un pdf accompagnateur répétition avec tout.
> pour chaque partie, il y a les sauts de pages et les tournes à placer au bons endroits.
> 
> choeurBreak = { \break }
> accompagnateurBreak = { \break}
> 
> et dans ma partition, j'ai des fois : \choeurBreak et/ou un peu plus loin \accompagnateurBreak et à chaque compilation, je redéfinis, par exemple pour une compilation pour l'accompagnateur :
> 
> choeurBreak = { %{ \break %} }
> accompagnateurBreak = { \break}
> 
> Ce que j'aimerais bien faire, c'est une compilation avec un -e '(define-accompagnateur ##t) pour que ça fasse le travail à ma place et commente et/ou décommente mes \break maison... (https://lilypond.org/doc/v2.23/Documentation/usage-big-page.fr.html#advanced-command-line-options-for-lilypond <https://lilypond.org/doc/v2.23/Documentation/usage-big-page.fr.html#advanced-command-line-options-for-lilypond>) peut-être que je me lance sur la mauvaise idée...
> 
> en C, j'aurais fait un #ifdef, mais là.... au secours !!! je ne vois pas du tout, mais alors pas du tout comment faire !
> 
> bbreak = { \break } % à décommenter pour pfd du choeur (penser à recommenter bbPageBreak)
> 
> bbPageBreak = { %{ \pageBreak%}  } % à décommenter pour pfd accompagnateur (penser à recommenter bbreak)
> 
> 
> }

---

From: Jean Abou Samra <[email-masked]>
Date: Mon, 30 Jan 2023 22:18:10 +0100

> Pour le faire depuis la ligne de commande, je sais qu'il existe une possibilité, mais je n'ai pas réussi à la mettre en œuvre, j'ai alors fait un bête script qui modifie la variable dans le fichier…

Bonjour,

Si je puis me permettre, pour le coup, je ne recommanderais vraiment pas le
ly:parser-include-string. C'est une fonction avancée qui peut être utile
dans de rares cas, mais qui peut vous jouer de vilains tours si vous ne
comprenez pas la manière exacte dont LilyPond analyse le fichier d'entrée
(les différences entre \, # et $, et ce genre de subtilités). Surtout qu'il
y a beaucoup plus simple et commun ici :

fonctionbreak = #(if (string=? modepartition "ac") #{ \break #} #{ #})

Au passage, commentaire pédant mais peut-être instructif : pour une valeur
de "mode de partition", comme il n'y a que quelques valeurs possibles,
un symbole est plus approprié qu'une chaîne de caractères. Ce qui donne :

fonctionbreak = #(if (eq? modepartition 'ac) #{ \break #} #{ #})

Et en poussant encore un peu, LilyPond dispose d'une fonctionnalité prévue
précisément pour ce genre de cas, les tags :

https://lilypond.org/doc/v2.24/Documentation/notation/different-editions-from-one-source#using-tags

Bernard : vous pouvez vous en sortir avec la syntaxe ci-dessus. Cela
étant dit, est-ce qu'il ne serait pas encore mieux d'avoir, en compilant
le fichier une seule fois, les trois versions du PDF directement ? Pour
cela, les tags sont un moyen très pratique. Exemple simple :

\version "2.24.0"

\tagGroup choeur,chef,accompagnateur

choeurBreak = \tag choeur \break
chefBreak = \tag chef \break
accompagnateurBreak = \tag accompagnateur \break

musique = {
  c'1
  \choeurBreak
  c'1
  \chefBreak
  c'1
  \accompagnateurBreak
  c'1
}

\book {
  \bookOutputSuffix "choeur"
  \keepWithTag choeur \musique
}
\book {
  \bookOutputSuffix "chef"
  \keepWithTag chef \musique
}
\book {
  \bookOutputSuffix "accompagnateur"
  \keepWithTag accompagnateur \musique
}

En mettant cela dans partition.ly, vous vous retrouvez avec trois fichier
PDF, partition-choeur.pdf, partition-chef.pdf et partition-accompagnateur.pdf,
chacun avec les \break qui vont bien.

Cordialement,
Jean

---

From: Ben <[email-masked]>
Date: Tue, 31 Jan 2023 08:39:38 +0100

Bonjour, 

Merci pour les explications et exemples plus simples!

Mais j'ai alors deux questions:

- pourquoi devoir rajouter #{ #} alors que cela fonctionne sans?  fonctionbreak = #(if (string=? modepartition "ac") #{ \break #} )

- à quoi sert l'instruction \tagGroup choeur,chef,accompagnateur? Je n'ai pas remarqué de changement en l'enlevant et je ne comprends pas ce qu'en dit la doc.

Et deux remarques:

- Dans le cas où les différents modes se partageraient souvent les mêmes \break, je ne ferais même pas de fonction, j'écrirais directement  \tag choeur.chef \break plutôt que \choeurBreak \chefBreak

- Dans ma situation, je trouve la compilation conditionnée par une variable plus pratique que d'empiler les book, car j'ai des book assez gros, mais pour un petit projet, empiler les book sera effectivement bien plus simple

Bonne journée, 

Ben

> Le 30 janv. 2023 à 22:18, Jean Abou Samra <[email-masked]> a écrit :
>

---

From: Bernard Barbier <[email-masked]>
Date: Tue, 31 Jan 2023 10:20:37 +0100

Bonjour, et merci à tous.

Les solutions que vous m'avez proposées sont différentes et toutes deux 
dignes d’intérêt.

Je remercie la communauté qui a eu la gentillesse de ne pas me renvoyer 
dans les cordes avec un RTFM, alors que la solution était bien 
documentée mais que je n'ai pas su chercher.

J'ai toute fois *très très* apprécié les exemples idéalement adaptés à 
mon, problème, donc, merci, encore une fois.

Alors petit cadeau de la nuit, le résultat de la compilation, version 
chef !

C'est ce que le chœur, au service duquel je suis, chantera pour la 
liturgie de ce Vendredi Saint.

Ref. IMSLP  : 
https://imslp.org/wiki/Popule_meus_(Vallotti%2C_Francesco_Antonio)

Belle journée à tous.

Bernard.

http://choeur.liturgique;free.fr

---

From: Bernard Choppy <[email-masked]>
Date: Tue, 31 Jan 2023 18:14:37 +0100

Bonsoir Bernard,

Un tout petit détail dans ta signature :

> http://choeur.liturgique;free.fr

le point-virgule entre liturgique et free devrait être un point, je pense...

Cordialement,
-- 

Bernard Choppy