Subject: plusieurs titres (\header{title = ""}) dans le même fichier

From: Céladon <[email-masked]>
Date: Sun, 23 May 2010 05:19:25 -0700 (PDT)

Bonjour à tous,
J'ai un petit problème tout simple, mais je ne sais pas le résoudre. J'ai
créé un gros fichier qui contient la musique pour plusieurs pièces de
théâtre. En fait, c'est structuré avec plein de \include.
– niveau 1 : chaque partie séparée
– niveau 2 : chaque mouvement (\include pour chaque partie), avec un titre
en \header {piece=""}
– niveau 3 : tous les mouvements (\include pour chaque mouvement), avec un
titre en \header {title=""}
– niveau 4 : toutes les pièces.
Je fais alors \include pour chaque ensemble de mouvements (niveau 3) mais
j'ai du coup partout le même titre \header {title=""}. Or je voudrais
évidemment qu'à chaque fois il remette le titre qui était dans le fichier de
niveau 3. J'ai aperçu une fois la combine à utiliser, évidemment, je n'ai
pas noté, pas retenu... et pas retrouvé ni dans Nabble ni dans Google.
Il est peut-être utile de préciser que j'ai également une sorte de petit
préambule (même si ça ne s'appelle pas comme ça dans LilyPond, je pense que
je peux emprunter ce vocable LaTeX) dans lequel je définis entre autres ceci
:

\paper {
	oddHeaderMarkup = \markup {
		\fill-line {
			\on-the-fly #not-first-page
			\fromproperty #'header:title
		}
	}
	evenHeaderMarkup = \markup {
		\fill-line {
			\fromproperty #'header:title
		}
	}
	oddFooterMarkup = \markup {
		\fill-line {
			\on-the-fly #print-page-number-check-first
			\fromproperty #'page:page-number-string 
		}
	}
	evenFooterMarkup = \markup {
		\fill-line {
			\on-the-fly #print-page-number-check-first
			\fromproperty #'page:page-number-string 
		}
	}
}

Et ça me sert à changer l'emplacement du numéro de page et surtout
l'en-tête. La perfidie de mon système, c'est que je veux évidemment que
l'en-tête change en fonction de l'endroit du fichier, et qu'il affiche le
titre du fichier de niveau 3 présenté sur la page. Un peu comme si c'était
un chapitre, en somme !

Et question subsidiaire pendant que j'y suis : comme je fais si je veux
– écrire une petite préface au début du document de niveau 4
– lui adjoindre également une table des matières ?

Merci d'avance à tous !
-- 
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/plusieurs-titres-header-title-dans-le-meme-fichier-tp5090574p5090574.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Xavier Scheuer <[email-masked]>
Date: Sun, 23 May 2010 14:39:56 +0200

2010/5/23 Céladon <[email-masked]> :

> Bonjour à tous,
> J'ai un petit problème tout simple, mais je ne sais pas le résoudre.
> J'ai créé un gros fichier qui contient la musique pour plusieurs
> pièces de théâtre. En fait, c'est structuré avec plein de \include.
> – niveau 2 : chaque mouvement (\include pour chaque partie), avec un
> titre en \header {piece=""}
> – niveau 3 : tous les mouvements (\include pour chaque mouvement),
> avec un titre en \header {title=""}
> Je fais alors \include pour chaque ensemble de mouvements (niveau 3)
> mais j'ai du coup partout le même titre \header {title=""}. Or je
> voudrais évidemment qu'à chaque fois il remette le titre qui était
> dans le fichier de niveau 3. J'ai aperçu une fois la combine à
> utiliser, évidemment, je n'ai pas noté, pas retenu... et pas retrouvé
> ni dans Nabble ni dans Google.

Je suis perdu dans tous tes niveaux, tu n'aurais pas un ascenceur ?  :D
(ou à défaut un exemple minimal)

Chaque mouvement est en fait un bloc \score , n'est-ce pas ?
Dans ce cas tu définis les "titres" de mouvement (piece=...) _à
l'intérieur_ du  bloc \score et tu utilises un autre bloc \header
_en dehors_ de tout bloc \score (\header global) pour les titres qui
n'apparaissent _qu'une seule fois_ (titre, compositeur, ...).

Ou bien tu peux jouer avec des \book ou \bookpart mais sans avoir
compris (avec un exemple) ce que tu souhaitais faire exactement, pas
facile de conseiller au mieux.

> [...]

Mettre tout dans un "top-level" \markup (i.e. un "bloc \markup" en
dehors de tout bloc \score ).
Tu peux utiliser
  \justify ou \wordwrap .
http://lilypond.org/doc/v2.13/Documentation/notation/align#Align

Cf. aussi 1.8.1 "Ajout de texte" > "Texte indépendant"
http://lilypond.org/doc/v2.13/Documentation/notation/writing-text#Texte-independa

> – lui adjoindre également une table des matières ?

NR 3.2.4 "Table of contents"
http://lilypond.org/doc/v2.13/Documentation/notation/table-of-contents#Table-of-contents

Cordialement,
Xavier

--
Xavier Scheuer <[email-masked]>

---

From: Céladon <[email-masked]>
Date: Sun, 23 May 2010 06:02:22 -0700 (PDT)

Merci déjà pour la table des matières et la préface : je vais étudier tout ça
!
Et merci d'avoir lu !

Alors je reprends :
– niveau 1 : la partie séparée
>> elle est compilable, et introduite par \relative c { \clef \key \time ;
>> elle inclut également les reprises
>> il y a aussi les fichiers qui contiennent chiffrage de basse continue et
>> paroles, à qui j'ai, suivant l'exemple de Nicolas Sceaux, mis une
>> extension .ily ; ils ne sont pas compilables

– niveau 2 : le mouvement
>> de forme \score { \include ... \header { piece = "titre du mouvement" } }

– niveau 3 : la musique de toute une pièce de théâtre
>> une série de \include "n.ly"  (où les n sont des fichiers de niveau 2,
>> jamais 1)
>> il a un titre \header { title = "titre de la pièce " }

et je bloque au passage au niveau supérieur :
– niveau 4 : la musique de toutes les pièces
>> de forme \include "p.ly" (où les p sont dees fichiers de niveau 3)
>> il n'a pas de titre

Problème : il y a plusieurs fichiers de niveau 3 dans un fichier de niveau
4, mais du coup LilyPond fait comme si dans chaque fichier de niveau 3
(pièce de théâtre) j'avais mis le même titre (header title). Je n'ai pas de
problème pour avoir plusieurs titres "piece", mais pour avoir plusieurs
titres "title".

C'est un peu comme si j'avais un énoooorme fichier avec plein de titres à
mettre partout. Bah je ne saurais pas le faire, je suis en train de me
demander si c'est vraiment possible...

Est-ce que c'est plus clair ?
-- 
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/plusieurs-titres-header-title-dans-le-meme-fichier-tp5090574p5090642.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Xavier Scheuer <[email-masked]>
Date: Sun, 23 May 2010 17:19:05 +0200

2010/5/23 Céladon <[email-masked]> :

> Merci déjà pour la table des matières et la préface : je vais étudier
> tout ça !
> Et merci d'avoir lu !
>
> Alors je reprends :
> Problème : il y a plusieurs fichiers de niveau 3 dans un fichier de
> niveau 4, mais du coup LilyPond fait comme si dans chaque fichier de
> niveau 3 (pièce de théâtre) j'avais mis le même titre (header title).
> Je n'ai pas de problème pour avoir plusieurs titres "piece", mais
> pour avoir plusieurs titres "title".
>
> C'est un peu comme si j'avais un énoooorme fichier avec plein de
> titres à mettre partout. Bah je ne saurais pas le faire, je suis en
> train de me demander si c'est vraiment possible...
>

Presque (enfin, je parle pour moi).
Je pense (finalement !) avoir compris tes niveaux.

Maintenant ce que je ne comprends pas c'est... le problème !  :D
Il ne t'imprime que le premier (ou dernier) titre "\header {title=""}"
partout, c'est ça ?
Mmmh, logique selon moi si tu as plusieurs bloc \header "top-level"
(i.e. en dehors de tout autre bloc \score , \book , ...).

Quid si tu inclus _le tout_ dans un grand bloc \book ?

  \book {
    \header {
      title = "titre 1"
    }
    \score {
      % notes
      \header {
        piece = "pièce 1"
      }
    }

    \header {
      title = "titre 2"
    }
    \score {
      % notes
      \header {
        piece = "pièce 2"
      }
    }
  }

Je ne sais pas ce qui est possible et n'ai pas testé pour le moment.
Sinon avec des \bookpart , ce qui ajouterait des sauts de page entre
chaque \bookpart :

  \book {
    \bookpart {
      \header {
        title = "titre 1"
      }
      \score {
        % notes
        \header {
          piece = "pièce 1"
        }
      }
    }
    %% saut de page
    \bookpart {
      \header {
        title = "titre 2"
      }
      \score {
        % notes
        \header {
          piece = "pièce 2"
        }
      }
    }
  }

Sinon, plus simple...
Utiliser de simples \markup au lieu des titres (\markup tout seul, en
dehors du bloc \score )...

Tout ce que je viens de dire est basé sur
NR 3.1.2 "Multiple scores in a book"
http://lilypond.org/doc/v2.13/Documentation/notation/multiple-scores-in-a-book#Multiple-scores-in-a-book

Si ça ne suffit pas tu peux m'envoyer personnellement tous tes fichier
(zippé par exemple), ainsi je pourrai à la fois comprendre et tester...

Cordialement,
Xavier

---

From: Xavier Scheuer <[email-masked]>
Date: Sun, 23 May 2010 17:24:11 +0200

> Quid si tu inclus _le tout_ dans un grand bloc \book ?

Autrement dit (je ne sais pas si j'ai été très clair), dans ton cas,
cela correspondrait à "niveau 4" = un grand bloc \book contenant à
l'intérieur tous tes "niveau 3".

> Sinon avec des \bookpart , ce qui ajouterait des sauts de page entre

Idem ci-dessus mais cette fois chaque "niveau 3" se trouve dans un
\bookpart séparé, eux-mêmes à l'intérieur d'un grand bloc \book .

Cordialement,
Xavier

---

From: Céladon <[email-masked]>
Date: Sun, 23 May 2010 13:46:10 -0700 (PDT)

Bonsoir !
Et encore merci !
Avec seulement des \bookpart (et pas de \book) ça marche. Mais il a fallu
que je corrige quelques petites choses.
Je vais donc également essayer la table des matières (même si je ne suis pas
du tout sûr d'y arriver : je voudrais qu'elle affiche les "title"s de chacun
des 7 \bookpart{\include ""}}...)

J'ai juste un tout petit problème :
dans mon
\paper {
        oddHeaderMarkup = \markup {
                \fill-line {
                        \on-the-fly #not-first-page
                        \fromproperty #'header:title
                }
        }
        evenHeaderMarkup = \markup {
                \fill-line {
                        \fromproperty #'header:title
                }
        }
        oddFooterMarkup = \markup {
                \fill-line {
                        \on-the-fly #print-page-number-check-first
                        \fromproperty #'page:page-number-string
                }
        }
        evenFooterMarkup = \markup {
                \fill-line {
                        \on-the-fly #print-page-number-check-first
                        \fromproperty #'page:page-number-string
                }
        }
} 
je dis #not-first-page pour #'header:title, mais du coup ça ne s'applique
que sur la first-first page, autrement dit bah... la première, pas la
première de chaque \bookpart. Du coup, à chaque début de bookpart j'ai deux
fois le titre (header + titre réel).

Encore merci !
-- 
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/plusieurs-titres-header-title-dans-le-meme-fichier-tp5090574p5091791.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Xavier Scheuer <[email-masked]>
Date: Sun, 23 May 2010 23:13:53 +0200

2010/5/23 Céladon <[email-masked]> :

> Bonsoir !
> Et encore merci !
> Avec seulement des \bookpart (et pas de \book) ça marche. Mais il a
> fallu que je corrige quelques petites choses.
> Je vais donc également essayer la table des matières (même si je ne
> suis pas du tout sûr d'y arriver : je voudrais qu'elle affiche les
> "title"s de chacun des 7 \bookpart{\include ""}}...)

Bonsoir.

Concernant la table des matières.
En sus de la doc, la discussion suivante pourrait éventuellement t'être
utile :
http://lilypond-french-users.1298960.n2.nabble.com/2-questions-Table-des-matieres-et-espacement-vertical-tp4606828p4607804.html

> je dis #not-first-page pour #'header:title, mais du coup ça ne
> s'applique que sur la first-first page, autrement dit bah... la
> première, pas la première de chaque \bookpart.  Du coup, à chaque
> début de bookpart j'ai deux fois le titre (header + titre réel).

Oui, il me semble que Jean-François "Seventies" a eu le même genre de
problème.  Il utilisait \bookpart pour les n° de mouvement.
Pourquoi ne pas utiliser "subtitle" dans les \bookpart (et "title"
uniquement pour le premier titre réel) ?

http://lilypond-french-users.1298960.n2.nabble.com/Succession-de-mouvements-sans-saut-de-page-td4568586.html

Ou bien peut-être qu'un pro Scheme pourrait bricoler une fonction
"not-first-bookpart-page", le message de Gilles ici pourrait y aider :?
http://lilypond-french-users.1298960.n2.nabble.com/Laisser-libre-les-numeros-de-page-de-couverture-tp4897413p4910829.html

Voila, désolé, je ne sais pas faire mieux...

Cordialement,
Xavier

---

From: Céladon <[email-masked]>
Date: Mon, 24 May 2010 01:42:36 -0700 (PDT)

Merci, c'est exactement ce qu'il faudrait, not-first-bookpart-page. Mais je
pense qu'une telle fonction existe déjà plus ou moins : en effet, en
regardant attentivement, LilyPond (2.12.2) imprime le header sur la première
page du bookpart, mais pas le numéro de page ! il y a donc quelque part une
fonction qui dit ça !
Et je viens d'aller voir (pour la première fois de ma vie) le fichier
titling.init.ly, il y a dedans
(chain-assoc-get 'page:is-bookpart-last-page props #f)
Donc il y a aussi une sorte de fonction bookpat-last-page (c'est dans %%
Book first page and last page predicates).
Je vais essayer de me plonger là-dedans, mais je ne connais rien au Scheme
donc c'est mal parti...
À bientôt !
-- 
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/plusieurs-titres-header-title-dans-le-meme-fichier-tp5090574p5093050.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: "j-f.lucarelli" <[email-masked]>
Date: Mon, 24 May 2010 10:44:25 +0200

Bonjour à tous,

Concernant la table des matières, voici la méthode que j'utilise sans aucun problème, après avoir sérieusement ramé la première fois, et grâce à l'aide précieuse de l'équipe Nabble :

	\markup {
		\column {
			\fill-line {\abs-fontsize #16 " "}
			\fontsize #3 \override #'(box-padding . 1.0) \override #'(thickness . 4.0)
			\override #'(baseline-skip . 2.7) \box 
			\column {
				\fill-line { \lower #25 \couvCompositeur }
				\fill-line { \lower #10 \couvDates }
				\fill-line { \lower #20 \TocTitre  }
				\fill-line { \lower #12 \couvinfoRecueil  }
				\fill-line { \lower #35 \TocLigne }
				\fill-line { \lower #3 \draw-line #'(40 . 0) }
				\fill-line {\override #'(line-width . 90) \lower #10 \toc-line #'MvmtI "I - Allergo moderato"}
				\fill-line {\override #'(line-width . 90) \lower #6 \toc-line #'MvmtII "II - Scherzo - Vivace"}
				\fill-line {\override #'(line-width . 90) \lower #6 \toc-line #'MvmtIII "III - Adagio non troppo"}
				\fill-line {\override #'(line-width . 90) \lower #6 \toc-line #'MvmtIV "IV - Quasi menuetto"}
				\fill-line {\override #'(line-width . 90) \lower #6 \toc-line #'MvmtV "V - Rondo - Allegro"}
				\fill-line { \lower #13 \draw-line #'(40 . 0) }
				\fill-line { \lower #18 \couvfromPublisher }
				\fill-line { \lower #18 \couvEditorial }
				\fill-line { \lower #87 " "}
			}
		}
	}

Les variables \couvCompositeur et suivantes sont définies dans un fichier inclus.
\tocLigne renferme simplement le texte "Table des matières"
\box entoure la page d'un cadre rectangulaire, c'est évidemment optionnel.
\draw-line trace des petites lignes horizontales complémentaires
Le dernier \fill-line est utilisé pour que le cadre remplisse toute la page.

L'ensemble est inséré dans un bloc \book, qui lui-même contient un \bookpart par mouvement.

Pour l'appel, il suffit d'insérer
	\label #'MvmtI
au début de chaque \bookpart
Le 'label' n'a pas besoin d'être en haut de page. On peut ainsi avoir 2 références sur la même page.
Si un label n'existe pas, le numéro de page est remplacé par un '?'

Enfin, ne pas oublier de corriger le numéro des pages si on insère une couverture qui ne doit pas apparaître dans les pages numérotées.

Pour cela, insérer un
	first-page-number = -1
pour passer deux pages (la page -1 et la page 0). La page 3 sera 'numérotée' 1

À partir de ce schéma, on peut modifier la présentation, par exemple en introduisant une citation musicale, comme cela se faisait auparavant pour les recueils de petites pièces.

Amicalement,

Jean-François

---

From: Céladon <[email-masked]>
Date: Tue, 25 May 2010 13:58:38 -0700 (PDT)

Bonsoir !
Je n'ai toujours pas réglé le problème, mais je n'ai pas eu le courage de
faire des tests. Il faut que ma machine soit très disponible pour ça : le
fichier est volumineux, généralement ça prend 10 minutes pour le compiler,
mais la première fois ça en a pris 35...

J'ai en revanche testé la table des matières : merci à Jean-François ! Mais
en fait, j'ai appliqué la méthode de la doc, en la modifiant avec
\paper {
  tocItemMarkup = \markup \fill-line {
    \override #'(line-width . 70) \fill-line {
      \fromproperty #'toc:text \fromproperty #'toc:page
    }
  }
} 
(suggéré par Nicolas Sceaux  ici :
http://lilypond-french-users.1298960.n2.nabble.com/2-questions-Table-des-matieres-et-espacement-vertical-tp4606828p4607804.html)
Le résultat reste modeste (la maîtrise de la verticalité pour cette page eût
pu être souhaitable) mais je n'a pas le temps ni la motivation de me pencher
dessus !

Bien entendu, si je trouve comment virer mes doubles titres, je vous
tiendrai au courant !
-- 
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/plusieurs-titres-header-title-dans-le-meme-fichier-tp5090574p5100444.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Céladon <[email-masked]>
Date: Wed, 26 May 2010 01:41:39 -0700 (PDT)

J'ai trouvé !
C'est du bidouillage, mais ça marche alors...

Comme je vous ai dit, LilyPond n'imprime pas le numéro de page sur la
première page de chaque bookpart. Du coup j'ai essayé de voir dans
titling-init.ly, et j'ai trouvé qu'il disait

evenHeaderMarkup = \markup
\fill-line {
  \on-the-fly #print-page-number-check-first \fromproperty
#'page:page-number-string
  \on-the-fly #not-first-page \fromproperty #'header:instrument
  " "
}

J'ai réutilisé #print-page-number-check-first même si ça n'est pas un numéro
de page qui m'intéresse, et ça donne :
\paper {
	oddHeaderMarkup = \markup {
		\fill-line {
			\on-the-fly #print-page-number-check-first
			\fromproperty #'header:title
		}
	}
}
(Je mets en gras ce que j'ai changé par rapport à avant.)
Et voilà, maintenant c'est comme je voulais : pas de titre dans l'en-tête
juste au-dessus du titre dans la page.

Maintenant je vais chercher à faire une belle page de titre, je sens que ce
sera toute une aventure encore.
-- 
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/plusieurs-titres-header-title-dans-le-meme-fichier-tp5090574p5102454.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Xavier Scheuer <[email-masked]>
Date: Wed, 26 May 2010 13:11:29 +0200

> C'est du bidouillage, mais ça marche alors...

Félicitations !

> de page qui m'intéresse, et ça donne :

Ouais, en gros on pourrait conseiller aux devs de renommer
  #print-page-number-check-first  en  #check-first-page  alors, non ?

> Maintenant je vais chercher à faire une belle page de titre, je sens
> que ce sera toute une aventure encore.

Il y a la macro prête à l'emploi de Nicolas "book-titling.ily" :
http://lsr.dsi.unimi.it/LSR/Item?id=368

qu'on peut aussi bidouiller pour correspondre à ses envies.

Cordialement,
Xavier