lilypond-user-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: En changeant de version… Multitude de q uestions !


From: Nicolas Sceaux
Subject: Re: En changeant de version… Multitude de q uestions !
Date: Sun, 6 May 2012 11:35:33 +0200

Le 6 mai 2012 à 10:54, Loïc Chahine a écrit :

> Le 05/05/12 20:07, Nicolas Sceaux a écrit :
>> Le 5 mai 2012 à 19:13, Loïc Chahine a écrit :
>> 
>>> Allez, tant que j’y suis, encore une question !
>>> Comment, en définissant un markup, fait on un équivalent de \nobreak ? Mon 
>>> style de markup s’apparente en effet à des titres, et là j’ai un changement 
>>> de page juste après, et donc avant le premier système concerné, c’est très 
>>> laid. Bien sûr, je pourrai faire, en l’absence de solution, un \pageBreak 
>>> avant, mais une injonction à ne pas couper serait encore mieux !
>>> L.C.
>> Il faut mettre un \noPageBreak entre ton titre et la suite.
> Merci ! Mais il faut pas le mettre dans le markup, et du coup je sais pas où 
> le mettre dans ma fonction…

On ne peut pas le mettre dans la commande de markup.  Ca doit être mis au
top-level.

\markup\mon-titre { blablabla }
\noPageBreak
\score {

}

Il est possible de faire une fonction musicale, qui placera le titre *et* le
\noPageBreak.  Par exemple :


#(define-markup-command (lair layout props text) (markup?)
    (interpret-markup
     layout props
     #{\markup\column { \vspace #0.1 \fill-line { \line { $text } } } #}))

monTitre =
#(define-music-function (parser location title) (markup?)
    ;; ajout du titre au toplevel
    (add-text parser #{\markup\lair $title #})
    ;; ajout du \noPageBreak au top-level
    (add-music parser
               (make-music 'Music
                          'page-marker #t
                          'page-break-permission 'forbid))
    ;; la fonction musical doit toujours retourner
    ;; de la musique : on retourne une musique vide
    (make-music 'Music 'void #t))

\monTitre\markup { "Air de" \italic "Pirithoüs" }
{ c' }


> Et la question de savoir comment je peux mettre un “vrai” markup et pas une 
> simple string, reste ouverte aussi… Comme je disais : si je veux faire 
> \markup \lair { "Air de" \italic "Pirithoüs" }, je n’ai que "Air de" qui 
> s’affiche.

Quelque explications : \lair est une commande qui s'applique sur un \markup.
{ "Air de" \italic "Pirithoüs" } n'est pas un markup, mais une markup-list,
composée des markups "Air de" et \italic "Pirithoüs".
Ici, \lair est "distribué" à chacun des markups.  Autrement dit,
   \markup \lair { "Air de" \italic "Pirithoüs" }
est équivalent à :
   \markup { \lair "Air de" \lair \italic "Pirithoüs" }
Le résultat de \lair "Air de" est une ligne qui prend toute la largeur de la
page, avec "Air de" au milieu.  Idem pour Pirithoüs.  Et le résultat, c'est
dont deux lignes, mises bout à bout.  Par conséquent, Pirithoüs se retrouve
en dehors de la page, sur la droite de "Air de".

Si tu veux que \lair soit appliqué une fois exactement à
   { "Air de" \italic "Pirithoüs" }
alors il faut faire en sorte que ce dernier devienne un markup, et non un
markup-list, en utilisant \line :

\markup\lair\line { "Air de" \italic "Pirithoüs" }

Nicolas




reply via email to

[Prev in Thread] Current Thread [Next in Thread]