Subject: Génération d'un livret

From: Jean-Charles Malahieude <[email-masked]>
Date: Sun, 23 Sep 2012 15:56:25 +0200

Bonjour à tous,

J'ai ressorti le roi Arthur pour lui adjoindre les partie textuelles de 
la version sur laquelle je me base (1848).

Je bloque depuis quelques jours sur la mise en forme du livret.
Grâce aux deux fichiers de fonctions préparées par Nicolas (livret.ily 
et livret-columns.ily) je ne m'en sors pas trop mal (c'est fastidieux 
mais réalisable), à ceci près que je n'arrive pas à adapter l'une de ses 
fonctions /markup/.
Les fonctions utilisées sont :

% hash nombre (décalage), puis vers à la suite de \livretPerseVerse
#(define-markup-command (livretVerse layout props metric args)
   (number? markup-list?)
    (let ((margin (* 2 (- 12 (min 12 metric)))))
      (livret-verse-aux layout props (make-line-markup args) margin)))

% rôle (\line {..} si complexe) suivi de livretVerse
#(define-markup-command (livretPersVerse layout props pers verse next)
      (markup? markup? markup?)
    (let* ((pers-stencil (interpret-markup
                          layout props
                          (markup #:fontsize 0 #:italic pers)))
           (verse-stencil (interpret-markup layout props verse))
           (line-stencil (ly:stencil-add pers-stencil verse-stencil)))
      (interpret-markup layout props
                        (markup #:column (#:stencil line-stencil
                                          next)))))

J'ai modifié livretVerse pour m'affranchir de l'espacement à fournir :
#(define-markup-command (livretVerse layout props args) (markup-list?)
    (interpret-markup
      layout props
      (markup #:fontsize 0 (make-line-markup args))))

Mon problème est de « dégoter » la fonction qui, au lieu de superposer 
les stencils comme le fait ly:stencil-add, en effectuera la 
concaténation. J'ai bien vu, dans le fichier stencil.scm, la fonction 
stack-stencils mais n'arrive pas à l'utiliser ou la libeller correctement.

Une image de l'original est disponible, en privé car trop pesante (50 
Ko) pour la liste.

Cordialement,
Jean-Charles

---

From: "[email-masked]" <[email-masked]>
Date: Sun, 23 Sep 2012 16:08:54 +0200

On 23 sept. 2012, at 15:56, Jean-Charles Malahieude <[email-masked]> wrote:

> Bonjour à tous,
> 
> J'ai ressorti le roi Arthur pour lui adjoindre les partie textuelles de la version sur laquelle je me base (1848).
> 
> Grâce aux deux fichiers de fonctions préparées par Nicolas (livret.ily et livret-columns.ily) je ne m'en sors pas trop mal (c'est fastidieux mais réalisable), à ceci près que je n'arrive pas à adapter l'une de ses fonctions /markup/.
> Mon problème est de « dégoter » la fonction qui, au lieu de superposer les stencils comme le fait ly:stencil-add, en effectuera la concaténation. J'ai bien vu, dans le fichier stencil.scm, la fonction stack-stencils mais n'arrive pas à l'utiliser ou la libeller correctement.
> 
> Une image de l'original est disponible, en privé car trop pesante (50 Ko) pour la liste.
> 
> Cordialement,
> Jean-Charles
> 

(ly:stencil-combine-at-edge stencil1, axis, direction, stencil2, padding)

Cordialement,
~Mike

---

From: Jean-Charles Malahieude <[email-masked]>
Date: Sun, 23 Sep 2012 16:37:34 +0200

Le 23/09/2012 16:08, [email-masked] disait :
>> Mon problème est de « dégoter » la fonction qui, au lieu de
>> superposer les stencils comme le fait ly:stencil-add, en effectuera
>> la concaténation. J'ai bien vu, dans le fichier stencil.scm, la
>> fonction stack-stencils mais n'arrive pas à l'utiliser ou la
>> libeller correctement.
>>
>

Merci Mike pour cette lecture compréhensible de

(define-public (stack-stencils axis dir padding stils)
   "Stack stencils @var{stils} in direction @var{axis}, @var{dir}, using
@var{padding}."
   (cond
    ((null? stils) empty-stencil)
    ((null? (cdr stils)) (car stils))
    (else (ly:stencil-combine-at-edge
	  (car stils) axis dir (stack-stencils axis dir padding (cdr stils))
	  padding))))

qui me donnait des indigestions, entre autres.

Le libellé

(ly:stencil-combine-at-edge pers-stencil X RIGHT verse-stencil 1)

donne le résultat escompté et allège d'autant les tâtonnements initiaux.

@+
Jean-Charles

---

From: Jean-Charles Malahieude <[email-masked]>
Date: Sun, 23 Sep 2012 20:24:36 +0200

Pour continuer :

Mais pourquoi donc est-ce qu'il n'y a pas de saut de page ?
Serait-il possible de le forcer ?
Comment enchaîner avec le texte qui précède ?

On verra çà demain...

Jean-Charles

---

From: "[email-masked]" <[email-masked]>
Date: Sun, 23 Sep 2012 20:44:10 +0200

> Comment enchaîner avec le texte qui précède ?

Si tu veux faire la mise en page d'un livret qui ne contient pas de musique (ou qui ne contient que de petits bouts de musique) je te conseillerais d'utiliser lilypond-book ou LaTeX tout court.

Tout est faisable en LilyPond, mais il faudrait que tu fasses un \pageBreak entre deux \markup pour forcer le saut de page. Il faudrait également que tu harmonises l'espacement vertical et horizontal des lignes sur les deux pages. « Pourquoi faire simple quand on peut faire compliqué ?» étant la maxime selon laquelle j'organise ma vie, cette solution a mon approbation entière et inconditionnelle, mais malgré tout à un moment donné c'est fort probable que j'abandonnerais et j'utiliserais LaTeX.

Cordialement,
~Mike

---

From: Jean-Charles Malahieude <[email-masked]>
Date: Mon, 24 Sep 2012 20:58:25 +0200

Le 23/09/2012 20:44, mike disait :
> On 23 sept. 2012, at 20:24, Jean-Charles Malahieude  wrote:
>
>> Pour continuer :
>>
>> Serait-il possible de le forcer ? Comment enchaîner avec le texte
>> qui précède ?
>>
>> On verra çà demain...
>>
>> Jean-Charles
>>
>
> Si tu veux faire la mise en page d'un livret qui ne contient pas de
> musique (ou qui ne contient que de petits bouts de musique) je te
> conseillerais d'utiliser lilypond-book ou LaTeX tout court.
>

Pas pour mettre les sources sur CPDL.

> Tout est faisable en LilyPond, mais il faudrait que tu fasses un
> \pageBreak entre deux \markup pour forcer le saut de page. Il
> faudrait également que tu harmonises l'espacement vertical et
> horizontal des lignes sur les deux pages.
>

Ce qui m'étonne, c'est que Nicolas y arrive bien (et moi aussi lorsque 
je compile l'une de ses œuvres), et que mes deux premiers /markuplist/ 
se répartissent correctement sur 10 et 3 pages sans aucun problème.

@+
Jean-Charles