[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Sauts de pages et compilation conditionnelle - SOS !!!!
From: |
Ben |
Subject: |
Re: Sauts de pages et compilation conditionnelle - SOS !!!! |
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 <jean@abou-samra.fr> a écrit :
>
> 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
>