Subject: layout commun à plusieurs scores

From: "Germain G. Ivanoff-Trinadtzaty" <[email-masked]>
Date: Sat, 24 May 2008 12:24:24 +0200

Bonjour,

Mon projet comporte plusieurs (10 à 15) petits \score auxquels j'applique les même ajustements de contexte dans le bloc \layout. Est-il possible de "factoriser" ces (re)définitions redondantes, pour les appliquer à tous les \score du \book  ?
1. Est-il possible d'avoir d'une part un \layout local à chaque \score, où je ne modifierais que la valeur de  \indent, et d'autre part toutes les modifications de contexte réunies dans un autre bloc \layout, global, qui ne serait interprété qu'une seule fois, et qui s'appliquerait à tous les \score ?
2. A défaut d'une unique interprétation, et pour économiser au moins la frappe, quelle syntaxe employer pour réunir toutes les modifications de contexte dans une "macro symbolique", à appeler dans chaque \layout local ? (à la manière d'un #define en C, qui est appliqué au source avant la compilation) 
3. Autre approche : peut-on "surcharger" les définitions par défaut des contextes \ChoirStaff, \Score, \Staff une fois pour toutes (càd à l'échelle du fichier) (ce qui éviterait d'avoir à le rappeler pour chq \score) ? Ou peut-être faut-il créer des alias de ces contextes (\MyChoirStaff, \MyScore, \MyStaff) et les utiliser dans la définition de des systèmes ?

Merci de vos suggestions,
Germain

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\book
{

    \score        % 1er
    {
    ...musique...

        \layout
        {
            \indent = 60\mm
            \context { \ChoirStaff   \consists Instrument_name_engraver
                                                    \override InstrumentName #'self-alignment-X = #LEFT }
            \context { \Score           \remove  Bar_number_engraver }
            \context { \Staff            \remove  Time_signature_engraver
                                                    \override InstrumentName #'self-alignment-X = #RIGHT }
        } % layout
    }

    \score        % 2e
    {
    ...musique...

        \layout
        {
            \indent = 60\mm
            \context { \ChoirStaff   \consists Instrument_name_engraver
                                                    \override InstrumentName #'self-alignment-X = #LEFT }
            \context { \Score           \remove  Bar_number_engraver }
            \context { \Staff            \remove  Time_signature_engraver
                                                    \override InstrumentName #'self-alignment-X = #RIGHT }
        } % layout
    }

    \score        % 3e
    {
    ...musique...

        \layout
        {
            \indent = 60\mm
            \context { \ChoirStaff   \consists Instrument_name_engraver
                                                    \override InstrumentName #'self-alignment-X = #LEFT }
            \context { \Score           \remove  Bar_number_engraver }
            \context { \Staff            \remove  Time_signature_engraver
                                                    \override InstrumentName #'self-alignment-X = #RIGHT }
        } % layout
    }

    ...plusieurs autres \score...

} % book

---

From: "Gilles THIBAULT" <[email-masked]>
Date: Sat, 24 May 2008 15:48:24 +0200

Oui.
Il suffit de mettre un \layout (ou plusieurs ), en dehors du bloc \score et un \layout à l'intérieur de chaque \score.
par exemple :
%%%%%%%
\layout
        {            \context { \ChoirStaff   \consists Instrument_name_engraver
                                                    \override InstrumentName #'self-alignment-X = #LEFT }
            \context { \Score           \remove  Bar_number_engraver }
            \context { \Staff            \remove  Time_signature_engraver
                                                    \override InstrumentName #'self-alignment-X = #RIGHT }
        } % layout commun à tous les Score

\score 
{
        \score    \patati    % 1er
        \layout { \indent = 60\mm } % layout valable uniquement que pour ce score

}

\score 
{
        \score    \patata   % 2ème
        \layout { \indent = 50\mm }

}

%%%%%%%%
Pour chaque \score, Lilypond collecte tous les \layout accessibles qu'il a rencontrés pour en faire un seul et unique.
NB : le \book est optionnel si on veut un seul pdf en sortie.
  2. A défaut d'une unique interprétation, et pour économiser au moins la frappe, quelle syntaxe employer pour réunir toutes les modifications de contexte dans une "macro symbolique", à appeler dans chaque \layout local ? (à la manière d'un #define en C, qui est appliqué au source avant la compilation) 

J'ai appris il y a quelques jours qu'on peut utiliser les \layout dans une variable, avec quelques restrictions.
Je te renvoie à la discussion qui a eu lieu sur la liste anglaise : 
http://lists.gnu.org/archive/html/lilypond-user/2008-05/msg00446.html

Encore une fois oui.
http://lilypond.org/doc/v2.11/Documentation/user/lilypond/Defining-new-contexts#Defining-new-contexts
On peut ainsi se faire des fichiers d'inclusions (qu'on appelle avec la commande \include), définissant des contextes personnalisés, dérivés des Staff , Score et consoeurs.

Gilles

---

From: "Germain G. Ivanoff-Trinadtzaty" <[email-masked]>
Date: Sat, 24 May 2008 16:30:11 +0200

Merci de ces réponses !
  ----- Original Message ----- 
  From: Gilles THIBAULT 
  To: Germain G. Ivanoff-Trinadtzaty ; Lilypond French users 
  Sent: Saturday, May 24, 2008 3:48 PM
  Subject: Re: layout commun à plusieurs scores
    1. Est-il possible d'avoir d'une part un \layout local à chaque \score, où je ne modifierais que la valeur de  \indent, et d'autre part toutes les modifications de contexte réunies dans un autre bloc \layout, global, qui ne serait interprété qu'une seule fois, et qui s'appliquerait à tous les \score ?
  Oui.
  Il suffit de mettre un \layout (ou plusieurs ), en dehors du bloc \score et un \layout à l'intérieur de chaque \score.
  par exemple :
  %%%%%%%
  \layout
          {            \context { \ChoirStaff   \consists Instrument_name_engraver
                                                      \override InstrumentName #'self-alignment-X = #LEFT }
              \context { \Score           \remove  Bar_number_engraver }
              \context { \Staff            \remove  Time_signature_engraver
                                                      \override InstrumentName #'self-alignment-X = #RIGHT }
          } % layout commun à tous les Score

  \score 
  {
          \score    \patati    % 1er

  }

  \score 
  {
          \score    \patata   % 2ème

  }

  %%%%%%%%
  Pour chaque \score, Lilypond collecte tous les \layout accessibles qu'il a rencontrés pour en faire un seul et unique.
  NB : le \book est optionnel si on veut un seul pdf en sortie.
J'avais bien essayé, mais en plaçant le \layout extérieur (commun) EN DESSOUS de tous les \score, ce qui ne marche pas... 
Il faut le placer AVANT.

J'étais passé à côté (j'ai qq centaines de fils en retard !)

  Gilles
Je vais "investiguer"...

Tout de bon,
Germain