Rapprocher les 'lyrics' : bug si on commence par un silence

Bonjour,

J'ai besoin pour une partition d'écrire deux lignes de paroles en les
collant le plus possible. J'ai trouvé comment faire avec deux propriétés
du VerticalAxisGroup, et ça fonctionne très bien tant que la musique
commence dès le premier temps de la première mesure. Le problème est
que ça ne fonctionne plus lorsqu'une partie commence par un silence.

Voici un exemple minimal, que j'ai aussi mis sur Lilybin à l'adresse
<http://lilybin.com/d1egve/1&gt;\.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.18.2"

zerospace = {
  \override VerticalAxisGroup.nonstaff-nonstaff-spacing.minimum-distance
= #'0
  \override VerticalAxisGroup.nonstaff-nonstaff-spacing.padding = #'0
}

\score{
  { g' g' g' }
  \addlyrics { \zerospace "1" "2" "3" }
  \addlyrics { un deux trois }
}

\score{
  { r g' g' g' }
  \addlyrics { \zerospace "1" "2" "3" }
  \addlyrics { un deux trois }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

J'ai trouvé un contournement, avec un NullVoice qui comporte une note
à la place du premier silence et avec un « _ » en guise de première
syllabe, mais c'est un peu pénible à faire.

Qui aurait une meilleure solution ?

P.-S. : testé sur LilyBin, le bug existe aussi en 2.19.48.

···

--
Olivier Miakinen

C'est l'une des raisons pour lesquelles je préfère ne pas utiliser \addlyrics, et n'oublie pas le bloc \layout.

Essaye plutôt :

\score {
   \new Staff <<
     \new Voice = notes \repeat unfold 20 { g' g' g' g' }
     \new Lyrics \lyricsto notes { \zerospace \repeat unfold 20 { "1" "2" "3" "4" } }
     \new Lyrics \lyricsto notes { \repeat unfold 20 { un deux trois quatre } } >>
}

\score {
   \new Staff <<
     \new Voice = notes \repeat unfold 20 { r g' g' g' }
     \new Lyrics \lyricsto notes { \repeat unfold 20 { "1" "2" "3" } }
     \new Lyrics \lyricsto notes { \repeat unfold 20 { un deux trois } } >>
   \layout {
     \context {
       \Lyrics \override VerticalAxisGroup.nonstaff-nonstaff-spacing =
       #'((basic-distance . 1.5)
          (minimum-distance . 1)
          (padding . 0) )
     }
   }
}

···

Le 23/10/2018 à 20:48, Olivier Miakinen a écrit :

Bonjour,

J'ai besoin pour une partition d'écrire deux lignes de paroles en les
collant le plus possible. J'ai trouvé comment faire avec deux propriétés
du VerticalAxisGroup, et ça fonctionne très bien tant que la musique
commence dès le premier temps de la première mesure. Le problème est
que ça ne fonctionne plus lorsqu'une partie commence par un silence.

Bonjour Jean-Charles et merci de ta réponse, malheureusement mon
problème n'est pas encore résolu.

Le 24/10/2018 19:59, Jean-Charles Malahieude m'a répondu :

J'ai besoin pour une partition d'écrire deux lignes de paroles en les
collant le plus possible. J'ai trouvé comment faire avec deux propriétés
du VerticalAxisGroup, et ça fonctionne très bien tant que la musique
commence dès le premier temps de la première mesure. Le problème est
que ça ne fonctionne plus lorsqu'une partie commence par un silence.

C'est l'une des raisons pour lesquelles je préfère ne pas utiliser
\addlyrics,

Dans ma vraie partition, j'ai bien des « \new Lyrics \lyricsto » au
lieu de « \addlyrics ». Mais vu que le problème est le même j'ai
choisi l'écriture la plus courte pour l'exposer. C'est bien ce qui
est recommandé, n'est-ce-pas, de donner un « exemple minimal » ?

et n'oublie pas le bloc \layout.

Idem. Vu que je n'avais besoin de rien mettre dedans, je l'ai omis
exprès.

Essaye plutôt :

[...]
   \layout {
     \context {
       \Lyrics \override VerticalAxisGroup.nonstaff-nonstaff-spacing =
       #'((basic-distance . 1.5)
          (minimum-distance . 1)
          (padding . 0) )
     }
   }

Oui mais non. En effet ça fonctionne sur ton exemple, mais du coup ça
s'applique à *tous* les lyrics et pas seulement ceux que je voulais et
pour lesquels j'avais mis un « \zerospace ».

Voilà un nouvel exemple un peu plus complet (sur Lilybin, mais j'en fais
un copier-coller plus bas) : <http://lilybin.com/yf52ux/1&gt;\.

Parmi ces trois partitions :
1) la première montre ce que je veux obtenir, à savoir coller les
   lyrics deux par deux (une fois sur deux un espacement nul, une
   fois sur deux un espacement normal) ;
2) la deuxième montre ce qui se passe quand je mets un silence au
   début : espacement normal partout, aucun espacement nul ;
3) la troisième montre ta solution : espacement nul partout.

Pour mémoire, voici ce que j'ai mis sur Lilybin :

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.18.2"

zerospace = {
  \override VerticalAxisGroup.nonstaff-nonstaff-spacing =
       #'((basic-distance . 1.5)
          (minimum-distance . 1)
          (padding . 0) )
}

\markup { "Ok :" }
\score {
   \new Staff <<
     \new Voice = notes { g' g' g' g' }
     \new Lyrics \lyricsto notes { \zerospace "1" "2" "3" "4" }
     \new Lyrics \lyricsto notes { un deux trois quatre }
     \new Lyrics \lyricsto notes { \zerospace "1" "2" "3" "4" }
     \new Lyrics \lyricsto notes { un deux trois quatre }
   >>
}

\markup { \vspace #1 }
\markup { "Espacé partout, non ok :" }
\score {
   \new Staff <<
     \new Voice = notes { r g' g' g' }
     \new Lyrics \lyricsto notes { \zerospace "1" "2" "3" }
     \new Lyrics \lyricsto notes { un deux trois }
     \new Lyrics \lyricsto notes { \zerospace "1" "2" "3" }
     \new Lyrics \lyricsto notes { un deux trois }
   >>
}

\markup { \vspace #1 }
\markup { "Serré partout, non ok :" }
\score {
   \new Staff <<
     \new Voice = notes { r g' g' g' }
     \new Lyrics \lyricsto notes { \zerospace "1" "2" "3" }
     \new Lyrics \lyricsto notes { un deux trois }
     \new Lyrics \lyricsto notes { \zerospace "1" "2" "3" }
     \new Lyrics \lyricsto notes { un deux trois }
   >>
   \layout {
     \context {
       \Lyrics \override VerticalAxisGroup.nonstaff-nonstaff-spacing =
       #'((basic-distance . 1.5)
          (minimum-distance . 1)
          (padding . 0) )
     }
   }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Le 24/10/2018 22:28, j'écrivais :

Essaye plutôt :

[...]
   \layout {
     \context {
       \Lyrics \override VerticalAxisGroup.nonstaff-nonstaff-spacing =
       #'((basic-distance . 1.5)
          (minimum-distance . 1)
          (padding . 0) )
     }
   }

Oui mais non. En effet ça fonctionne sur ton exemple, mais du coup ça
s'applique à *tous* les lyrics et pas seulement ceux que je voulais et
pour lesquels j'avais mis un « \zerospace ».

Voici un exemple du résultat attendu. Je mettrai cette partition sur
cpdl.org dès que j'aurai vérifié qu'elle est correcte.
https://www.cjoint.com/doc/18_10/HJyuEyuASMT_dvorak-nature-api.pdf

Regarder en particulier le numéro 3, aux pages 11 à 14, puisqu'il y a
deux couplets. Bon, celui-ci ne commence pas par un silence, alors ici
je n'ai pas eu le problème -- tandis que je l'ai eu pour les numéros 2
et 5, mais ceux-ci n'ont qu'un seul couplet.

···

--
Olivier Miakinen

Salut,

Réponse rapide : pour ce genre de modifications il est préférable
d'utiliser la commande \with.

\markup { "Utiliser \with, ok !" }
\score {
<<
\new Staff {
\new Voice = notes { r g' g' g' }
}
\new Lyrics \with { \zerospace } \lyricsto notes { "1" "2" "3" }
\new Lyrics \lyricsto notes { un deux trois }
\new Lyrics \with { \zerospace } \lyricsto notes { "1" "2" "3" }
\new Lyrics \lyricsto notes { un deux trois }

}

Cf. NR 5.1.5 Modification des réglages par défaut d’un contexte >
Modification d’un contexte particulier > Définition des propriétés de
contexte avec \with
http://lilypond.org/doc/v2.19/Documentation/notation/changing-context-default-settings.fr.html#changing-just-one-specific-context

C'est aussi ce qui est utilisé pour les Noms d’instrument de portées
par exemple.
http://lilypond.org/doc/v2.19/Documentation/notation/writing-parts.fr.html#instrument-names

Cordialement,
Xavier

···

On Wed, 24 Oct 2018 at 22:45, Olivier Miakinen <****@****> wrote:

Bonjour Jean-Charles et merci de ta réponse, malheureusement mon
problème n'est pas encore résolu.

Le 24/10/2018 19:59, Jean-Charles Malahieude m'a répondu :

J'ai besoin pour une partition d'écrire deux lignes de paroles en les
collant le plus possible. J'ai trouvé comment faire avec deux propriétés
du VerticalAxisGroup, et ça fonctionne très bien tant que la musique
commence dès le premier temps de la première mesure. Le problème est
que ça ne fonctionne plus lorsqu'une partie commence par un silence.

C'est l'une des raisons pour lesquelles je préfère ne pas utiliser
\addlyrics,

Dans ma vraie partition, j'ai bien des « \new Lyrics \lyricsto » au
lieu de « \addlyrics ». Mais vu que le problème est le même j'ai
choisi l'écriture la plus courte pour l'exposer. C'est bien ce qui
est recommandé, n'est-ce-pas, de donner un « exemple minimal » ?

et n'oublie pas le bloc \layout.

Idem. Vu que je n'avais besoin de rien mettre dedans, je l'ai omis
exprès.

Essaye plutôt :

[...]
\layout {
\context {
\Lyrics \override VerticalAxisGroup.nonstaff-nonstaff-spacing =
#'((basic-distance . 1.5)
(minimum-distance . 1)
(padding . 0) )
}
}

Oui mais non. En effet ça fonctionne sur ton exemple, mais du coup ça
s'applique à tous les lyrics et pas seulement ceux que je voulais et
pour lesquels j'avais mis un « \zerospace ».

Voilà un nouvel exemple un peu plus complet (sur Lilybin, mais j'en fais
un copier-coller plus bas) : <http://lilybin.com/yf52ux/1>.

Parmi ces trois partitions :

  1. la première montre ce que je veux obtenir, à savoir coller les
    lyrics deux par deux (une fois sur deux un espacement nul, une
    fois sur deux un espacement normal) ;
  2. la deuxième montre ce qui se passe quand je mets un silence au
    début : espacement normal partout, aucun espacement nul ;
  3. la troisième montre ta solution : espacement nul partout.

Pour mémoire, voici ce que j'ai mis sur Lilybin :

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.18.2"

zerospace = {
\override VerticalAxisGroup.nonstaff-nonstaff-spacing =
#'((basic-distance . 1.5)
(minimum-distance . 1)
(padding . 0) )
}

\markup { "Ok :" }
\score {
\new Staff <<
\new Voice = notes { g' g' g' g' }
\new Lyrics \lyricsto notes { \zerospace "1" "2" "3" "4" }
\new Lyrics \lyricsto notes { un deux trois quatre }
\new Lyrics \lyricsto notes { \zerospace "1" "2" "3" "4" }
\new Lyrics \lyricsto notes { un deux trois quatre }

}

\markup { \vspace #1 }
\markup { "Espacé partout, non ok :" }
\score {
\new Staff <<
\new Voice = notes { r g' g' g' }
\new Lyrics \lyricsto notes { \zerospace "1" "2" "3" }
\new Lyrics \lyricsto notes { un deux trois }
\new Lyrics \lyricsto notes { \zerospace "1" "2" "3" }
\new Lyrics \lyricsto notes { un deux trois }

}

\markup { \vspace #1 }
\markup { "Serré partout, non ok :" }
\score {
\new Staff <<
\new Voice = notes { r g' g' g' }
\new Lyrics \lyricsto notes { \zerospace "1" "2" "3" }
\new Lyrics \lyricsto notes { un deux trois }
\new Lyrics \lyricsto notes { \zerospace "1" "2" "3" }
\new Lyrics \lyricsto notes { un deux trois }

\layout {
\context {
\Lyrics \override VerticalAxisGroup.nonstaff-nonstaff-spacing =
#'((basic-distance . 1.5)
(minimum-distance . 1)
(padding . 0) )
}
}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


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

--
Xavier Scheuer <****@****>

Le 25/10/2018 14:40, Xavier Scheuer m'a répondu :

Réponse rapide : pour ce genre de modifications il est préférable
d'utiliser la commande \with.

En effet, c'est la solution à laquelle je suis arrivée ce matin, en
comparant ma méthode avec celle de Jean-Charles (que je remercie
encore).

\markup { "Utiliser \with, ok !" }
\score {
  <<
    \new Staff {
      \new Voice = notes { r g' g' g' }
  }
    \new Lyrics \with { \zerospace } \lyricsto notes { "1" "2" "3" }
    \new Lyrics \lyricsto notes { un deux trois }
    \new Lyrics \with { \zerospace } \lyricsto notes { "1" "2" "3" }
    \new Lyrics \lyricsto notes { un deux trois }
  >>
}

Exact.

Je pense que je peux comprendre le problème que j'avais avec ma méthode.
Vraisemblablement, LilyPond n'essayait de lire le contenu de ce que je
lui donnais (à commencer par le \zerospace) qu'à la première vraie note
rencontrée, et qu'il avait donc créé l'espace pour les lyrics avant de
savoir que je voulais un padding nul.

Note que la solution que j'ai trouvée ce matin est carrément identique
à la tienne, malheureusement je ne pouvais pas écrire à la liste à ce
moment-là pour le signaler : <http://lilybin.com/yf52ux/2&gt;\.

Cf. NR 5.1.5 Modification des réglages par défaut d’un contexte >
Modification d’un contexte particulier > Définition des propriétés de
contexte avec \with
http://lilypond.org/doc/v2.19/Documentation/notation/changing-context-default-settings.fr.html#changing-just-one-specific-context

C'est aussi ce qui est utilisé pour les Noms d’instrument de portées
par exemple.
http://lilypond.org/doc/v2.19/Documentation/notation/writing-parts.fr.html#instrument-names

Je pense qu'après cette mésaventure je penserai plus vite au \with pour
des situations similaires. Un grand merci à toi, et encore une fois à
Jean-Charles Malahieude.

···

--
Olivier Miakinen