lilypond-user-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: Jean Abou Samra
Subject: Re: Sauts de pages et compilation conditionnelle - SOS !!!!
Date: Mon, 30 Jan 2023 22:18:10 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.0

On 30/01/2023 20:06, Ben wrote:
> 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…




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

Attachment: OpenPGP_signature
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]