alignement opus et piece

Voici une meilleure solution avec l'opus sur la marge extérieure
et la piece que l'on peut placer où l'on veut, ce qui demande un ajustement à chaque pièce.
Merci
Raphaël

title-alignment-by-even-or-odd-test2.ly (2.26 KB)

Frère Raphaël wrote

Voici une meilleure solution avec l'opus sur la marge extérieure
et la piece que l'on peut placer où l'on veut, ce qui demande un
ajustement à chaque pièce.

bonsoir

je proposerais plus-tôt d'utiliser une formule comme

\header {
   opus = \markup { \consider-page-num #'b "hymn-2" }
   piece = \markup {\fill-line { \null "Aria avec un très long nom" \null}}
}

qui centre le /piece/ - sans devoir s'occuper que le numéro de la page soit
pair ou impair.

mais je préférerais une solution qui prend compte des deux variables /opus/
et /piece/

malheureusement je ne comprends pas assez scheme pour pouvoir adapter le
code de David (/consider-page-num/) - y a-t-il quelqu'un qui sait comment
faire?

Eluze

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/alignement-opus-et-piece-tp7578429p7578433.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

mais je préférerais une solution qui prend compte des deux variables /opus/
et /piece/

malheureusement je ne comprends pas assez scheme pour pouvoir adapter le
code de David (/consider-page-num/) - y a-t-il quelqu'un qui sait comment
faire?

Pour ne justement pas toucher le code de David, j'ai laisser la fonction
être appeler par opus, mais
je ne sais pas si c'est le résultat que tu souhaitais.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.16.0"
\paper {
  scoreTitleMarkup = \markup { \column {
    \on-the-fly #print-all-headers { \bookTitleMarkup \hspace #1 }
    \fill-line {
      \fromproperty #'header:opus
      \tiny \fromproperty #'header:piece
    }
  }
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#(define-markup-command (my-hymn layout props label arg1 arg2)
     (symbol? markup? markup?)
     (let* ((stencil (interpret-markup layout props arg1))
         (x-ext (ly:stencil-extent stencil X))
         (y-ext (ly:stencil-extent stencil Y))
         (arg1-stencil (ly:make-stencil ;; David Code
              `(delay-stencil-evaluation
                ,(delay (ly:stencil-expr
              (let* ((table (ly:output-def-lookup layout 'label-page-table))
                     (page-number (if (list? table)
                                      (assoc-get label table)
                    #f)))
                (interpret-markup layout props
                  (if (even? page-number)
                (markup arg1)
                (markup #:fill-line ("" arg1))))))))
              x-ext
              y-ext))
            (arg2-stencil (interpret-markup layout props
                                  (markup #:fill-line (arg2)))))
      (ly:stencil-add arg1-stencil arg2-stencil)))

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

\book {
     \score {
       \new Staff { \label #'a \repeat unfold 100 c'1 }
       \header {
         opus = \markup \my-hymn #'a "hymn-1" "Te Deum"
       }
     }

     \score {
       \new Staff { \label #'b \repeat unfold 100 c'1 }
       \header {
         opus = \markup \my-hymn #'b "hymn-2" "Aria"
       }
     }

     \score {
       \new Staff { \label #'c \repeat unfold 100 c'1 }
       \header {
         opus = \markup \my-hymn #'c "hymn-3" "Messe"
       }
     }

     \score {
       \new Staff { \label #'d c'1 }
       \header {
         opus = \markup \my-hymn #'d "hymn-4" "Solo"
       }
     }

     \score {
       \new Staff { \label #'e \repeat unfold 100 c'1 }
       \header {
         opus = \markup \my-hymn #'e "hymn-5" "Magnificat"
       }
     }

     \score {
       \new Staff { \label #'f c'1 }
       \header {
         opus = \markup \my-hymn #'f "hymn-6" "Agnus"
       }
     }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

···

--
Gilles

Pour ne justement pas toucher le code de David, j'ai laisser la fonction
être appeler par opus

Ouf ! 2 fautes d'accord en 2 verbes. Orthographe = 0/20
Comme ma phrase en plus, ne voulait rien dire, je reformule ...
On peut appeler la fonction que j'ai nommée ici my-hymn via la propriété
opus du \header.
J'en profite pour supprimer du coup, la réference à la propriété piece dans
scoreTitleMarkup

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.16.0"
\paper {
       scoreTitleMarkup = \markup { \column {
         \on-the-fly #print-all-headers { \bookTitleMarkup \hspace #1 }
         \fromproperty #'header:opus
         }
       }
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#(define-markup-command (my-hymn layout props label arg1 arg2)
       (symbol? markup? markup?)
       (let* ((stencil (interpret-markup layout props arg1))
              (x-ext (ly:stencil-extent stencil X))
              (y-ext (ly:stencil-extent stencil Y))
              (arg1-stencil (ly:make-stencil ;; David Code
                 `(delay-stencil-evaluation
                    ,(delay (ly:stencil-expr
        (let* ((table (ly:output-def-lookup layout 'label-page-table))
               (page-number (if (list? table)
                               (assoc-get label table)
                               #f)))
         (interpret-markup layout props (if (even? page-number)
                   (markup arg1)
                   (markup #:fill-line ("" arg1))))))))
                 x-ext
                 y-ext))
              (arg2-stencil (interpret-markup layout props
                               (markup #:fill-line (#:tiny arg2)))))
        (ly:stencil-add arg1-stencil arg2-stencil)))

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

\book {
       \score {
         \new Staff { \label #'a \repeat unfold 100 c'1 }
         \header {
           opus = \markup \my-hymn #'a "hymn-1" "Te Deum"
         }
       }

       \score {
         \new Staff { \label #'b \repeat unfold 100 c'1 }
         \header {
           opus = \markup \my-hymn #'b "hymn-2" "Aria"
         }
       }

       \score {
         \new Staff { \label #'c \repeat unfold 100 c'1 }
         \header {
           opus = \markup \my-hymn #'c "hymn-3" "Messe"
         }
       }

       \score {
         \new Staff { \label #'d c'1 }
         \header {
           opus = \markup \my-hymn #'d "hymn-4" "Solo"
         }
       }

       \score {
         \new Staff { \label #'e \repeat unfold 100 c'1 }
         \header {
           opus = \markup \my-hymn #'e "hymn-5" "Magnificat"
         }
       }

       \score {
         \new Staff { \label #'f c'1 }
         \header {
           opus = \markup \my-hymn #'f "hymn-6" "Agnus"
         }
       }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

···

--
Gilles

J'en profite pour supprimer du coup, la réference à la propriété piece dans scoreTitleMarkup

Mais ça marche aussi, si on remplace toutes les occurences de "opus" par "piece" ...

···

--
Gilles

Gilles THIBAULT wrote

mais je préférerais une solution qui prend compte des deux variables
/opus/
et /piece/

malheureusement je ne comprends pas assez scheme pour pouvoir adapter le
code de David (/consider-page-num/) - y a-t-il quelqu'un qui sait comment
faire?

Pour ne justement pas toucher le code de David, j'ai laisser la fonction
être appeler par opus, mais
je ne sais pas si c'est le résultat que tu souhaitais.

merci - je pense que c'est à peu près ce que Raphaël cherche!

petit détail: les deux arguments ne sont pas exactement à la même hauteur
(dû aux queues de lettres)
est-il possible de combiner arg1 et arg2 en même temps:

(markup #:fill-line (arg1 arg2 "")) ;even
(markup #:fill-line ("" arg2 arg1)) ;odd

(ou en dans la ligne arg1-stencil arg2-stencil)

pour une autre fois: pourrait-on incorporer cette fonctionnalité dans la
définition du scoreTitleMarkup permettant de réutiliser opus = et piece =?

Eluze

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/alignement-opus-et-piece-tp7578429p7578471.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

Un grand merci à Eluze et Gilles pour leurs recherches qui avancent !

Comme le propose Eluze, j'aimerais pouvoir incorporer cette (ou une autre) fonction dans la définition du scoreTitleMarkup permettant d'utiliser ensemble opus = et piece = .
Avec le but que l'opus soit toujours mis à l'extérieur de la page et que la piece soit placée à un endroit fixe, mais pas nécessairement au milieu, plutôt un peu sur la gauche. Est-ce qu'une variable ne peut pas être introduite dans la définition du scoreTitleMarkup ? Ceci est en vue de faciliter la mise en page d'un livret de petits chants.
Voici ci-dessous le résultat que j'aimerais mais il faudrait simplifier l'écriture (surtout la recherche de la valeur du \halign qui prend du temps pour chaque piece).
Raphaël

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

\version "2.16.00"

\paper {
scoreTitleMarkup = \markup { \column {
\on-the-fly #print-all-headers { \bookTitleMarkup \hspace #1 }
\fill-line {
\fromproperty #'header:opus
\tiny \fromproperty #'header:piece
}
}
}
}

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

#(define-markup-command (consider-page-num layout props label arg)
(symbol? markup?)
(let* ((stencil (interpret-markup layout props arg))
(x-ext (ly:stencil-extent stencil X))
(y-ext (ly:stencil-extent stencil Y)))
(ly:make-stencil
`(delay-stencil-evaluation
,(delay (ly:stencil-expr
(let* ((table (ly:output-def-lookup layout 'label-page-table))
(page-number (if (list? table)
(assoc-get label table)
#f)))
(interpret-markup layout props
(if (even? page-number)
(markup arg)
(markup #:fill-line ("" arg))))))))
x-ext
y-ext)))

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

\book {
\score {
\new Staff { \label #'a \repeat unfold 100 c'1 }
\header {
opus = \markup { \consider-page-num #'a "hymn-1" }
piece = \markup { \null \halign #27 "Te Deum" }
}
}

\score {
\new Staff { \label #'b \repeat unfold 100 c'1 }
\header {
opus = \markup { \consider-page-num #'b "hymn-2" }
piece = \markup { \null \halign #57 "Aria" }
}
}

\score {
\new Staff { \label #'c \repeat unfold 100 c'1 }
\header {
opus = \markup { \consider-page-num #'c "hymn-3" }
piece = \markup { \null \halign #38 "Messe" }
}
}

\score {
\new Staff { \label #'d c'1 }
\header {
opus = \markup { \consider-page-num #'d "hymn-4" }
piece = \markup { \null \halign #55 "Solo" }
}
}

\score {
\new Staff { \label #'e \repeat unfold 100 c'1 }
\header {
opus = \markup { \consider-page-num #'e "hymn-5" }
piece = \markup { \null \halign #21.5 "Magnificat" }
}
}

\score {
\new Staff { \label #'f c'1 }
\header {
opus = \markup { \consider-page-num #'f "hymn-6" }
piece = \markup { \null \halign #38 "Agnus" }
}
}
}

···

De : Eluze
Date/heure : 24-09-2012 10:29:18
A : lilypond-user-fr
Cc :
Sujet : Re: alignement opus et piece

Gilles THIBAULT wrote

mais je préférerais une solution qui prend compte des deux variables
/opus/
et /piece/

malheureusement je ne comprends pas assez scheme pour pouvoir adapter le
code de David (/consider-page-num/) - y a-t-il quelqu'un qui sait comment
faire?

Pour ne justement pas toucher le code de David, j'ai laisser la fonction
être appeler par opus, mais
je ne sais pas si c'est le résultat que tu souhaitais.

merci - je pense que c'est à peu près ce que Raphaël cherche!

petit détail: les deux arguments ne sont pas exactement à la même hauteur
(dû aux queues de lettres)
est-il possible de combiner arg1 et arg2 en même temps:

(markup #:fill-line (arg1 arg2 "")) ;even
(markup #:fill-line ("" arg2 arg1)) ;odd

(ou en dans la ligne arg1-stencil arg2-stencil)

pour une autre fois: pourrait-on incorporer cette fonctionnalité dans la
définition du scoreTitleMarkup permettant de réutiliser opus = et piece =?

Eluze

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/alignement-opus-et-piece-tp7578429p7578471.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.


liste de diffusion lilypond-user-fr
lilypond-user-fr@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user-fr

petit détail: les deux arguments ne sont pas exactement à la même hauteur
(dû aux queues de lettres)

Je n'ai pas remarqué un tel décalage mais on peut remplacer (ly:stencil-add ...)
par :
   (ly:stencil-combine-at-edge arg1-stencil Y CENTER arg2-stencil 0)
Changer au choix CENTER par BOTTOM ou UP

···

--
Gilles

Gilles THIBAULT wrote

petit détail: les deux arguments ne sont pas exactement à la même hauteur
(dû aux queues de lettres)

Je n'ai pas remarqué un tel décalage

c'est mieux visible avec de long noms:

opus = \markup \my-hymn #'a "yyy hymn-1 yyyyyyyyyyyyyyyyyyy " "Te Deum Te
Deum Te Deum Te Deum "

mais on peut remplacer (ly:stencil-add ...) par :

   (ly:stencil-combine-at-edge arg1-stencil Y CENTER arg2-stencil 0)
Changer au choix CENTER par BOTTOM ou UP

non, ce n'est pas ça, il faudrait pouvoir définir une baseline commune et
indépendante des longueurs de queues rencontrées.

Eluze

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/alignement-opus-et-piece-tp7578429p7578474.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

Gilles THIBAULT wrote

petit détail: les deux arguments ne sont pas exactement à la même hauteur

voilà - j'ai ajouté

                (markup #:fill-line (arg1 #:transparent "fg"))
                (markup #:fill-line (#:transparent "fg" arg1))
et
                (markup #:fill-line (#:transparent "fg" arg2 "" ))

et je ré-utilise ly:stencil-add, ce qui aligne correctement les textes -
mais y aurait-il une solution moins primitive?!

Eluze

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/alignement-opus-et-piece-tp7578429p7578475.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

Comme le propose Eluze, j'aimerais pouvoir incorporer cette (ou une autre) fonction dans la définition du scoreTitleMarkup permettant d'utiliser ensemble opus = et piece = .

Je ne comprend pas exactement ce que veut dire "utiliser ensemble opus = et piece = " ?.
On peut se définir ses propres variables \header.
Par exemple, si on veut une variable hymn, dans le header, on peut mettre :
   \header {
           hymn = \markup \my-hymn #'a "hymn-1" "Te Deum"
    }
et dans le scoreTitleMarkup, il suffit d'appeler hymn avec \fromproperty, mais en rajoutant le préfixe header: , comme suit :
   \fromproperty #'header:hymn
Ce qui laisse libre opus et piece pour d'autres usages.
Mais je pressens que ce n'est pas de ça ce dont il s'agit.

Avec le but que l'opus soit toujours mis à l'extérieur de la page et que la piece soit placée à un endroit fixe, mais pas nécessairement au milieu, plutôt un peu sur la gauche. Est-ce qu'une variable ne peut pas être introduite dans la définition du scoreTitleMarkup ? Ceci est en vue de faciliter la mise en page d'un livret de petits chants.
Voici ci-dessous le résultat que j'aimerais mais il faudrait simplifier l'écriture (surtout la recherche de la valeur du \halign qui prend du temps pour chaque piece).

Bon, en tout cas voici une version qui permettra une édition très rapide.
J'ai isolé 2 variables : stencil-even et stencil-odd dont on pourra très facilement éditer les markup
( l'édition est très proche d'un \markup traditionnel ). Eluze et raphaël vous n'avez apparemment pas tout à fait les mêmes souhaits ; j'ai plutôt fait le markup demandé par Raphaël, en mettant une variable hymn-hspace dans \page pour pouvoir décaler vers la gauche tout les titres des hymnes.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.16.0"
\paper {
       hymn-hspace = #10 % pour décaler les titres
       scoreTitleMarkup = \markup { \column {
         \on-the-fly #print-all-headers { \bookTitleMarkup \hspace #1 }
         \fromproperty #'header:hymn
         }
       }
}

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

#(define-markup-command (my-hymn layout props label arg1 arg2)
       (symbol? markup? markup?)
(let* ((space (+ (ly:output-def-lookup layout 'hymn-hspace 0)
                  (ly:output-def-lookup layout 'indent 0)))
        (stencil-even (interpret-markup layout props
            (markup #:line (arg1 #:hspace space arg2))))
            ; on peut utiliser general-align pour aligner les arg1 et arg2
        (stencil-odd (interpret-markup layout props
            (markup #:fill-line (#:line (#:hspace space arg2) arg1)))))
   (ly:make-stencil
     `(delay-stencil-evaluation
        ,(delay (ly:stencil-expr
           (let* ((table (ly:output-def-lookup layout 'label-page-table))
                  (page-number (if (list? table)
                    (assoc-get label table)
                    #f)))
             (if (even? page-number) stencil-even stencil-odd)))))
     '(0 . 0) '(0 . 0))))

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

\book {
       \score {
         \new Staff { \label #'a \repeat unfold 100 c'1 }
         \header {
           hymn = \markup \my-hymn #'a "hymn-1" "Te Deum"
         }
       }

       \score {
         \new Staff { \label #'b \repeat unfold 100 c'1 }
         \header {
           hymn = \markup \my-hymn #'b "hymn-2" "Aria"
         }
       }

       \score {
         \new Staff { \label #'c \repeat unfold 100 c'1 }
         \header {
           hymn = \markup \my-hymn #'c "hymn-3" "Messe"
         }
       }

       \score {
         \new Staff { \label #'d c'1 }
         \header {
           hymn = \markup \my-hymn #'d "hymn-4" "Solo"
         }
       }

       \score {
         \new Staff { \label #'e \repeat unfold 100 c'1 }
         \header {
           hymn = \markup \my-hymn #'e "hymn-5" "Magnificat"
         }
       }

       \score {
         \new Staff { \label #'f c'1 }
         \header {
           hymn = \markup \my-hymn #'f "hymn-6" "Agnus"
         }
       }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

···

Le Mon, 24 Sep 2012 12:54:28 +0200, Frère Raphaël <****@****> a écrit:

--
Gilles

D'abord un grand merci.
C'est ce que je désire quant au résultat.
Je ne suis pas du tout doué dans toutes ces définitions ! C'est vraiment super !
Mais je me suis mal exprimé dans l'expression "utiliser ensemble opus = et piece =.
J'aimerais pouvoir, dans l'écriture de la partition, dans le \header, distinguer clairement l'opus et la piece,
car dans certains chants il n'y aura que l'opus et pas de nom de piece :
\header {
opus =
piece =
}
Et d'autant plus aussi que la dimension des caractères ne sera pas la même pour l'opus et pour la piece,
un paramétrage que nous devrons mettre dans le scoreTitleMarkup.
Il me semble que actuellement nous ne pouvons distinguer opus et piece pour les paramétrer différemment.
Encore merci de tout ce que vous faites.
J'espère que ça devient de plus en plus clair !

Raphaël

···

De : Gilles
Date/heure : 24-09-2012 18:51:44
A : lilypond-user-fr
Cc :
Sujet : Re: alignement opus et piece

Le Mon, 24 Sep 2012 12:54:28 +0200, Frère Raphaël <****@****> a écrit:

Comme le propose Eluze, j'aimerais pouvoir incorporer cette (ou une
autre) fonction dans la définition du scoreTitleMarkup permettant
d'utiliser ensemble opus = et piece = .

Je ne comprend pas exactement ce que veut dire "utiliser ensemble opus =
et piece = " ?.
On peut se définir ses propres variables \header.
Par exemple, si on veut une variable hymn, dans le header, on peut mettre :
\header {
hymn = \markup \my-hymn #'a "hymn-1" "Te Deum"
}
et dans le scoreTitleMarkup, il suffit d'appeler hymn avec \fromproperty,
mais en rajoutant le préfixe header: , comme suit :
\fromproperty #'header:hymn
Ce qui laisse libre opus et piece pour d'autres usages.
Mais je pressens que ce n'est pas de ça ce dont il s'agit.

Avec le but que l'opus soit toujours mis à l'extérieur de la page et que
la piece soit placée à un endroit fixe, mais pas nécessairement au
milieu, plutôt un peu sur la gauche. Est-ce qu'une variable ne peut pas
être introduite dans la définition du scoreTitleMarkup ? Ceci est en vue
de faciliter la mise en page d'un livret de petits chants.
Voici ci-dessous le résultat que j'aimerais mais il faudrait simplifier
l'écriture (surtout la recherche de la valeur du \halign qui prend du
temps pour chaque piece).

Bon, en tout cas voici une version qui permettra une édition très rapide.
J'ai isolé 2 variables : stencil-even et stencil-odd dont on pourra très
facilement éditer les markup
( l'édition est très proche d'un \markup traditionnel ). Eluze et raphaël
vous n'avez apparemment pas tout à fait les mêmes souhaits ; j'ai plutôt
fait le markup demandé par Raphaël, en mettant une variable hymn-hspace
dans \page pour pouvoir décaler vers la gauche tout les titres des hymnes.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.16.0"
\paper {
hymn-hspace = #10 % pour décaler les titres
scoreTitleMarkup = \markup { \column {
\on-the-fly #print-all-headers { \bookTitleMarkup \hspace #1 }
\fromproperty #'header:hymn
}
}
}

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

#(define-markup-command (my-hymn layout props label arg1 arg2)
(symbol? markup? markup?)
(let* ((space (+ (ly:output-def-lookup layout 'hymn-hspace 0)
(ly:output-def-lookup layout 'indent 0)))
(stencil-even (interpret-markup layout props
(markup #:line (arg1 #:hspace space arg2))))
; on peut utiliser general-align pour aligner les arg1 et arg2
(stencil-odd (interpret-markup layout props
(markup #:fill-line (#:line (#:hspace space arg2) arg1)))))
(ly:make-stencil
`(delay-stencil-evaluation
,(delay (ly:stencil-expr
(let* ((table (ly:output-def-lookup layout 'label-page-table))
(page-number (if (list? table)
(assoc-get label table)
#f)))
(if (even? page-number) stencil-even stencil-odd)))))
'(0 . 0) '(0 . 0))))

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

\book {
\score {
\new Staff { \label #'a \repeat unfold 100 c'1 }
\header {
hymn = \markup \my-hymn #'a "hymn-1" "Te Deum"
}
}

\score {
\new Staff { \label #'b \repeat unfold 100 c'1 }
\header {
hymn = \markup \my-hymn #'b "hymn-2" "Aria"
}
}

\score {
\new Staff { \label #'c \repeat unfold 100 c'1 }
\header {
hymn = \markup \my-hymn #'c "hymn-3" "Messe"
}
}

\score {
\new Staff { \label #'d c'1 }
\header {
hymn = \markup \my-hymn #'d "hymn-4" "Solo"
}
}

\score {
\new Staff { \label #'e \repeat unfold 100 c'1 }
\header {
hymn = \markup \my-hymn #'e "hymn-5" "Magnificat"
}
}

\score {
\new Staff { \label #'f c'1 }
\header {
hymn = \markup \my-hymn #'f "hymn-6" "Agnus"
}
}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

--
Gilles


liste de diffusion lilypond-user-fr
lilypond-user-fr@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user-fr

Un grand merci à Gilles pour son travail et toutes ses explications.
Tout marche ainsi que je le souhaitais.
Raphaël

···

De : Gilles
Date/heure : 25-09-2012 01:23:51
A : Frère_Raphaël
Cc :
Sujet : Re: alignement opus et piece

J'aimerais pouvoir, dans l'écriture de la partition, dans le \header,
distinguer clairement l'opus et la piece,
Dans la fonction proposée, la propriété opus et piece du header ne sont
pas utilisées
Dans par exemple,
hymn = \markup \my-hymn #'a "hymn-1" "Te Deum"
le 2ème paramètre (ici "hymn-1") joue le rôle d'opus, et le 3ème ("Te
Deum") de piece.

car dans certains chants il n'y aura que l'opus et pas de nom de piece :
Il suffira de remplacer le 3ème paramètre par ""
hymn = \markup \my-hymn #'a "hymn-1" ""

Et d'autant plus aussi que la dimension des caractères ne sera pas la
même pour l'opus et pour la piece,
un paramétrage que nous devrons mettre dans le scoreTitleMarkup.
Ah non, maintenant il faut mettre ces paramètrages dans la fonction
my-hymn :
tout est dans ces 2 lignes dans la fonction :
(markup #:line (arg1 #:hspace space arg2)) ; page paires
et
(markup #:fill-line (#:line (#:hspace space arg2) arg1)) ; pages
impaires

Par exemple, si on veut le texte du titre de la piece plus petit, on
remplacera arg2 par #:tiny arg2, ce qui donnera :
(markup #:line (arg1 #:hspace space #:tiny arg2))
(markup #:fill-line (#:line (#:hspace space #:tiny arg2) arg1))
La correspondance \markup lilypond et scheme est documentée ici :

--
Gilles

Frère Raphaël wrote

J'aimerais pouvoir, dans l'écriture de la partition, dans le \header,
distinguer clairement l'opus et la piece,
car dans certains chants il n'y aura que l'opus et pas de nom de piece :
\header {
  opus =
  piece =
}
Et d'autant plus aussi que la dimension des caractères ne sera pas la même
pour l'opus et pour la piece,
un paramétrage que nous devrons mettre dans le scoreTitleMarkup.
Il me semble que actuellement nous ne pouvons distinguer opus et piece
pour les paramétrer différemment.

on peut tout de même utiliser des commandes pour textes dans la définition
de /hymn=/, par exemple

hymn = \markup \my-hymn #'a "hymn-1" \concat { \with-color #blue Te \hspace
#1 \with-color #green Deum }

si on veut le même paramétrage pour tous les objets au 1er ou 2ème rang, je
suis d'accord, il faudra chercher à intégrer cela dans le scoreTitleMarkup
ou dans la fonction de Gilles.

Eluze

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/alignement-opus-et-piece-tp7578429p7578486.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

Bonjour,

J'ai utilisé lilypond il y a quelques années et je m'y remets à présent. J'ai oublié pas mal de choses mais j'arrive à peu près à me débrouiller avec la documentation en ligne. Cela dit, ce que je fais reste grandement du bricolage.

Je souhaiterais vous poser quelques questions sur la mise en page et sur une erreur qui survient lors de la compilation.

1) A propos de l'erreur de compilation. J'utilise Frescobaldi 2.0.7 et lorsque je compile pour avoir un aperçu, le journal m'indique : " Arrêté avec le code de retour 1 ". L'aperçu s'affiche néanmoins correctement et, lorsque je compile avec lilypond, j'obtiens bien le pdf que j'ai souhaité. Je vous joins, ci-dessous, l'intégralité de mon fichier .ly, ainsi que le journal de compilation. Si vous avez une idée sur cette erreur...

2) A propos de la mise en page,voilà ce que je souhaiterais faire :

a) Sauter une ligne ou deux entre le titre et le début de la partition.

b) Centrer les numéros des deux morceaux. En l'état actuel, ils sont alignés à gauche mais je les voudrais au centre.

Peut-on faire cela ? Si oui, comment ?

Merci d'avance pour vos réponses.

Voici mon fichier et le journal

%%%%% Mon Fichier .ly%%%%%%%%%

\header {
  title = " Petites pièces pour violon" }

\score {

  \markup { \huge "I"}

\relative c'' {
  \clef treble
  \key d \major
  \time 4/4

  {r8 d,8 a b c a'16( g fis e d c) b( d) g( e) d( cis) g'8~g fis16( e d cis b a) gis( b) e( cis) b( ais) e'8~e16 d( e fis g a b g) a( cis e d) cis b a g fis( a d cis)

  b a g fis e4~e16 fis( e d) cis( d e ) g -. a,-. fis'( e d) cis( d e) g-. a,-. b'( a g) fis( g a) c-. d,-. b'( a g) fis( g a) c-. d,-. e'( d cis) b-. e( fis g) a,-. c( b a) g-.
   cis( d e) fis,-. a( g fis) e-. a( b cis) d,-. fis( e d) cis a b cis d e fis( e) g( fis) b( a) g( fis e) d-. d4 r4 r2 \bar "|."}

}

\break

  \markup {\huge "II"}

\relative c'' {
  \clef treble
  \key b \minor
  \time 3/4

{b8( cis d) fis b4-. \appoggiatura {a8} g2.~g4 fis e d \trill [cis8 d] b4 | g'8( fis e) ais-. b-. g-. | fis( e d) ais'-. b-. fis-. | e( d cis) fis-. d-. b-. |
\appoggiatura {d8} cis2. \bar ":|:" fis,8( gis ais) cis-. fis4-. \appoggiatura {e8} d2. | a8( b cis) e-. a4-. \appoggiatura {g8} fis2. |
b,8( a g) cis-. d-. b-. a( g fis) cis'-. d-. a-. g4-. fis-. e-. \trill d2. | fis'8( e dis) b-. a'4 \appoggiatura {a8}g2. cis,8( d e) a-. g4
\appoggiatura{g8} fis2. ais,8( b cis) e-. d-. b-. g( fis e) d' cis ais' b4 fis8( e) d( cis) b2. \bar "|." }
}

}

%%%%%%%%%%%FIN du FICHIER%%%%%%%%%%%%%%%%%%%%%%

Voici ce que dit le journal, lorsque je compile :

Démarrage lilypond-windows.exe 2.14.2 [Violon.ly]...
Processing `C:/Users/carrefour/Desktop/LILYPOND/CHORAL/Violon.ly'
Parsing...
C:/Users/carrefour/Desktop/LILYPOND/CHORAL/Violon.ly:10:2: error: syntax error, unexpected \markup

  \markup { \huge "I"}

C:/Users/carrefour/Desktop/LILYPOND/CHORAL/Violon.ly:29:2: error: syntax error, unexpected \markup, expecting \addlyrics

  \markup {\huge "II"}

C:/Users/carrefour/Desktop/LILYPOND/CHORAL/Violon.ly:45:0: error: syntax error, unexpected '}'

}

C:/Users/carrefour/Desktop/LILYPOND/CHORAL/Violon.ly:0: warning: no \version statement found, please add

\version "2.14.2"

for future compatibility
Interpreting music... [8]
Preprocessing graphical objects...
Interpreting music...
C:/Users/carrefour/Desktop/LILYPOND/CHORAL/Violon.ly:36:54: warning: stem does not fit in beam
{b8( cis d) fis b4-. \appoggiatura {a8} g2.~g4 fis e
                                                      d \trill [cis8 d] b4 | g'8( fis e) ais-. b-. g-. | fis( e d) ais'-. b-. fis-. | e( d cis) fis-. d-. b-. |

C:/Users/carrefour/Desktop/LILYPOND/CHORAL/Violon.ly:36:63: warning: beam was started here
{b8( cis d) fis b4-. \appoggiatura {a8} g2.~g4 fis e d \trill
                                                               [cis8 d] b4 | g'8( fis e) ais-. b-. g-. | fis( e d) ais'-. b-. fis-. | e( d cis) fis-. d-. b-. |

[8][16][24]
Preprocessing graphical objects...
Finding the ideal number of pages...
Fitting music on 1 page...
Drawing systems...
Layout output to `Violon.ps'...
Converting to `./Violon.pdf'...
error: failed files: "C:/Users/carrefour/Desktop/LILYPOND/CHORAL/Violon.ly"
Arrêté avec le code de retour 1.

encore un petit détail:

avec /hymn-hspace = #40/ et un titre général /\header { title = title }/ il
y a collision entre le "title" et la nouvelle ligne sur la première page et
- au cas où une pièce commence en tête de page - entre le numéro de la page
et la nouvelle ligne.

on peut ajouter

\vspace #.001 % avant
\fromproperty #'header:hymn

mais je me demande pourquoi ça arrive et si on pourrait faire une correction
dans le code!?

Eluze

ps: la fonction contient une jolie démonstration comment combiner plusieurs
éléments avec des espaces dans un \fill-line: /(markup #:fill-line (#:line
(#:hspace space arg2) arg1))/

(ça vaut d'être ajouté dans un manuel!)

Eluze

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/alignement-opus-et-piece-tp7578429p7578488.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

avec /hymn-hspace = #40/ et un titre général /\header { title = title }/ il
y a collision entre le "title" et la nouvelle ligne sur la première page et
- au cas où une pièce commence en tête de page - entre le numéro de la page
et la nouvelle ligne.

mais je me demande pourquoi ça arrive et si on pourrait faire une correction
dans le code!?

C'est parce-que dans la fonction (ly:make-stencil stencil-expression X-extend Y-extend), X-extend, Y-extend sont à '(0 . 0).
Pour stencil-expression, il y a moyen de retarder l'évaluation de l'expression après la création complète de la table des labels, mais je n'en connais pas pour le calcul de X-extend et Y-extend. Impossible de savoir donc si on est dans une page paire ou impaire, au moment de l'appel de ly:make-stencil. C'est pour ça que j'ai mis X-extend et Y-extend à '(0 . 0), mais du coup Lilypond considère la ligne créee comme un objet de taille nulle ...

Si on veut mettre des titres, on faut changer manuellement Y-extend et mettre '(0 . 4) par exemple :
(ly:make-stencil [...] '(0 . 0) '(0 . 4))
Peut-être que quelqu'un de plus calé que moi saurait le faire automatiquement.

···

--
Gilles

Si on veut mettre des titres, on faut changer manuellement Y-extend et mettre '(0 . 4) par exemple :
(ly:make-stencil [...] '(0 . 0) '(0 . 4))
Peut-être que quelqu'un de plus calé que moi saurait le faire automatiquement.

Bon, en fait, on peut "additionner" les 2 stencils et calculer les dimensions des 2 réunis.
%%%%%%%%%%%
#(define-markup-command (my-hymn layout props label arg1 arg2)
       (symbol? markup? markup?)
(let* ((space (+ (ly:output-def-lookup layout 'hymn-hspace 0)
                  (ly:output-def-lookup layout 'indent 0)))
        (stencil-even (interpret-markup layout props
            ;(markup #:line (arg1 #:hspace space #:tiny arg2))))
            (markup #:fill-line ("" arg2 arg1))))
        (stencil-odd (interpret-markup layout props
            ;(markup #:fill-line (#:line (#:hspace space #:tiny arg2) arg1))
            (markup #:fill-line (arg1 arg2 ""))))
        (stencil-both (ly:stencil-add stencil-even stencil-odd)))
   (ly:make-stencil
     `(delay-stencil-evaluation
        ,(delay (ly:stencil-expr
           (let* ((table (ly:output-def-lookup layout 'label-page-table))
                  (page-number (if (list? table)
                    (assoc-get label table)
                    #f)))
             (if (even? page-number) stencil-even stencil-odd)))))
     (ly:stencil-extent stencil-both X)(ly:stencil-extent stencil-both Y))))
%%%%%%%%%%%
Mais le titre est un peu près de notre ligne. On peut sûrement régler ça avec je ne sais quelle propriété.

···

--
Gilles

Gilles THIBAULT wrote

Bon, en fait, on peut "additionner" les 2 stencils et calculer les
dimensions des 2 réunis.

parfait!

mais ce qui m'étonne maintenant c'est qu'en forçant un \pageBreak à la fin
du livret et en doublant la pièce "Agnus" la nouvelle ligne de l'Agnus est
inversée sur la troisième page!

une idée? serait-ce la fonction /delay/ qui n'attend pas assez?

c'est vexant - je viens de construire un exemple qui a un page-break
/naturel/ et là c'est la page no. 4 qui cloche!

je joins mes deux fichiers :

title-alignment-by-even-or-odd_function.ly
<http://lilypond-french-users.1298960.n2.nabble.com/file/n7578500/title-alignment-by-even-or-odd_function.ly&gt;
title-alignment-by-even-or-odd-test.ly
<http://lilypond-french-users.1298960.n2.nabble.com/file/n7578500/title-alignment-by-even-or-odd-test.ly&gt;

Eluze

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/alignement-opus-et-piece-tp7578429p7578500.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

L

mais ce qui m'étonne maintenant c'est qu'en forçant un \pageBreak à la fin
du livret et en doublant la pièce "Agnus" la nouvelle ligne de l'Agnus est
inversée sur la troisième page!

Tu as mis le même label dans le dernier score que dans l'avant-dernier.
   \piece-and-opus-two #'f "first-title" "Agnus" % avant dernier score
   \piece-and-opus-two #'f "first-title" "Agnus on new page" % dernier score

Il faudrait le label #'g dans le dernier score.
Si c'est volontaire, euh je ne sais plus trop alors, comment devrait se comporter Lilypond en pareil cas.

···

--
Gilles