Position verticale d'un ossia

Bonjour à tout le groupe!

Je relance un sujet qui date de… 2015… et auquel je n'ai à ce jour pas trouvé de solution… c'est celui de pouvoir géré finement la position verticale d'un bout de portée ossia. Avec ce code:

\version "2.24.2"

\new Staff = "soprano"
\relative c'' {
  c4 d e
  <<
    {b4}
    \new Staff \with {
      \omit TimeSignature
      alignBelowContext = #"soprano"
      \magnifyStaff #2/3
      firstClef = ##f
      \clef treble
      \override VerticalAxisGroup.default-staff-staff-spacing =
      #'((basic-distance . 1) ;; <= à précser
                              (padding . 1)) %% <= à préciser
    }
    {
      \once \override TextScript.X-offset = #-6 \once \override TextScript.Y-offset = #-0.5
      a4*1/4^\markup {\override #'(font-name . "Garamond Premier Pro") \fontsize #2 "Orig." } \stopStaff
    }
  >>
}

Impossible de changer la position du bout de portée "Orig.", même à donner des valeurs négatives à basic-distance ou à padding.
Connaissez-vous un moyen d'y arriver?

Cordialement.

Bernard

Bonjour
en cherchant sur le LSR voici une solution (pas parfaite)

\version "2.24.2"

<<
  \new Staff = "soprano"
  \relative c'' {
    c4 d e
    <<
      { b4 }
      \context Ossia
      \with
      {
        \omit TimeSignature
        alignBelowContext = #"soprano"
        \magnifyStaff #2/3
        firstClef = ##f
      }
      {
        \once \override TextScript.X-offset = #-6 \once \override TextScript.Y-offset = #-0.5
        a4*1/4^\markup { \fontsize #2 "Orig." } \stopStaff
      }
    >>
  }

  \new Staff = "tenor" \relative c' { a'1 c4 e a, }
>>


\layout {
  \context {
    \Score
    \consists "Span_bar_engraver"
    % Avoid a vertical line at the beginning of the system:
    \remove "System_start_delimiter_engraver"
    % Incorporate the new context in the hierarchy
    \accepts "Ossia"
    \override VerticalAxisGroup.default-staff-staff-spacing =
    #'((basic-distance . 0)
       (padding . -0 ) ;ajustez pour l'ossia
       )
  }
  
  \context {
    \Staff
    \name "Ossia"
    alignBelowContext = #"soprano"
    \alias "Staff"
    \omit TimeSignature
    \magnifyStaff #2/3
    firstClef = ##f
     \override VerticalAxisGroup.default-staff-staff-spacing =
    #'((basic-distance . 10)
       (padding . 0 ) ;ajustez pour régler tenor
       )
  }
}

Cordialement

Merci Martial, mais j'ai je problème suivant: lorsque j'utilise ton code tel quel, c'est le miracle, tout va bien et je peux moduler l'espace vertical de l'ossia sans problème. Mais lorsque je l'applique à mon fichier, là, plus rien ne bouge. J'ai envoyé pour ma question un exemple minimum, mais je ne vois pas ce qui bloque dans mon fichier. Je l'envoie donc ci-dessous, avec la question: qu'est-ce qui bloque ta solution dans mon fichier?

telemann.ly (7,6 Ko)

ci-joint la rectification.
avec suppression de \new Choirstaff
ajout de \override VerticalAxisGroup... dans les \new Staff Flute soprano et Bc
Pour le moment n'est pas régler le ChoirStaff

telemann_rectif_1.ly (8,0 Ko)

Bonne nuit

Magnifique, merci! Et pour ne pas mourir idiot, cette question: c'est le ChoirStaff qui bloque ce réglage vertical de l'ossia?

Cordialement.

il semblerai, mais pas que il faut régler l'espace verticale pour chaque portée.
Je n'ai pas tout compris, comment régler l'espace verticale entre le Score et le ChoisStaff.
je mourirai peut-être idiot :slight_smile:

1 « J'aime »

Key Points

  • Il semble probable que pour ajuster finement la position verticale d'une portée ossia dans LilyPond, il faut utiliser \override VerticalAxisGroup.staff-staff-spacing dans le contexte de l'ossia, en ajustant les paramètres comme basic-distance et padding.

  • La recherche suggère que des contextes comme ChoirStaff peuvent interférer avec les réglages d'espacement vertical, nécessitant des ajustements spécifiques pour chaque portée ou la suppression de ChoirStaff si possible.

  • Une découverte inattendue est que l'ajout de \override VerticalAxisGroup.staff-staff-spacing directement dans chaque Staff (comme la flûte, le soprano, et le continuo) peut contourner les blocages causés par des contextes englobants comme ChoirStaff.


Direct Answer

Introduction

Pour répondre à votre question sur le réglage vertical d'une portée ossia dans LilyPond, voici une solution claire et concise. Votre objectif est de positionner précisément une portée ossia (par exemple, "Orig.") par rapport à la portée principale, mais les ajustements de basic-distance et padding ne fonctionnent pas comme prévu dans certains contextes.

Solution

La solution consiste à :

  1. Définir un contexte Ossia dans le bloc \layout et ajuster son espacement vertical avec \override VerticalAxisGroup.staff-staff-spacing.

  2. Si vous utilisez un ChoirStaff, supprimez-le ou ajoutez des ajustements d'espacement vertical pour chaque portée (par exemple, flûte, soprano, continuo) avec \override VerticalAxisGroup.staff-staff-spacing dans chaque Staff.

Voici un exemple corrigé basé sur votre code initial :

lilypond

\version "2.24.2"

\layout {
  \context {
    \Score
    \consists "Span_bar_engraver"
    \remove "System_start_delimiter_engraver"
    \accepts "Ossia"
  }
  \context {
    \Staff
    \name "Ossia"
    \alias "Staff"
    \omit TimeSignature
    \magnifyStaff #2/3
    firstClef = ##f
    \override VerticalAxisGroup.staff-staff-spacing =
      #'((basic-distance . 5)  % Ajustez cette valeur pour déplacer l'ossia
         (minimum-distance . 3)
         (padding . 1))
  }
}

<<
  \new Staff = "soprano" \with {
    \override VerticalAxisGroup.staff-staff-spacing =
      #'((basic-distance . 8)  % Ajustez pour l'espace entre soprano et autres portées
         (padding . 1))
  }
  \relative c'' {
    c4 d e
    <<
      { b4 }
      \context Ossia \with {
        alignBelowContext = #"soprano"
      }
      {
        \once \override TextScript.X-offset = #-6
        \once \override TextScript.Y-offset = #-0.5
        a4*1/4^\markup { \fontsize #2 "Orig." } \stopStaff
      }
    >>
  }
  \new Staff = "tenor" \with {
    \override VerticalAxisGroup.staff-staff-spacing =
      #'((basic-distance . 10)  % Ajustez pour l'espace entre tenor et autres portées
         (padding . 1))
  }
  \relative c' { a'1 c4 e a, }
>>

Explication

  • Ajustement dans Ossia : La propriété staff-staff-spacing dans le contexte Ossia contrôle l'espace entre l'ossia et la portée principale ("soprano"). Ajustez basic-distance (par exemple, 5) pour déplacer l'ossia verticalement.

  • Ajustement dans chaque Staff : Si vous avez plusieurs portées (comme "soprano" et "tenor"), ajoutez \override VerticalAxisGroup.staff-staff-spacing dans chaque Staff pour éviter les interférences, surtout si un ChoirStaff est présent.

  • Problème avec ChoirStaff : Le ChoirStaff peut bloquer les réglages d'espacement vertical, car il impose ses propres règles d'espacement. Supprimer ChoirStaff ou ajuster chaque portée individuellement résout ce problème.

Inattendu

Une découverte intéressante est que l'ajout de \override VerticalAxisGroup.staff-staff-spacing directement dans chaque Staff peut contourner les limitations imposées par des contextes comme ChoirStaff, offrant un contrôle plus précis.


Survey Note: Ajustement de la position verticale d'une portée ossia dans LilyPond

Cette note explore en détail le problème de réglage vertical d'une portée ossia dans LilyPond, en s'appuyant sur une analyse approfondie des codes fournis, des échanges entre utilisateurs, et de la documentation pertinente. Elle vise à fournir une solution complète et à expliquer les raisons sous-jacentes.

Contexte et Analyse du Problème

L'utilisateur, Bernard (bameylan), souhaite ajuster finement la position verticale d'une portée ossia (marquée "Orig.") par rapport à une portée principale ("soprano"). Dans son premier exemple, il utilise \new Staff pour créer l'ossia et tente de modifier son espacement vertical avec \override VerticalAxisGroup.default-staff-staff-spacing, mais cela ne fonctionne pas, même avec des valeurs négatives pour basic-distance ou padding.

MartialR propose une solution en définissant un contexte Ossia dans le bloc \layout, ce qui fonctionne dans un exemple minimal, mais échoue dans le fichier complet de Bernard (telemann.ly). MartialR identifie que le problème vient partiellement de l'utilisation de ChoirStaff, qui semble bloquer les réglages d'espacement vertical, et propose une rectification en supprimant ChoirStaff et en ajoutant des ajustements d'espacement dans chaque Staff.

Exploration des Causes

Pour comprendre pourquoi les ajustements d'espacement ne fonctionnent pas, examinons les mécanismes de LilyPond :

  1. Contexte Ossia et alignBelowContext :
  • Selon la documentation Ossia staves, une portée ossia est généralement créée avec \new Staff \with { alignBelowContext = #"main-staff" } ou en définissant un contexte Ossia dans \layout. L'option alignBelowContext indique où placer l'ossia par rapport à une portée nommée (ici, "soprano").

  • L'espacement vertical est contrôlé par la propriété VerticalAxisGroup.staff-staff-spacing (ou default-staff-staff-spacing dans certaines versions), qui accepte des paramètres comme basic-distance, minimum-distance, et padding.

  1. Problème avec default-staff-staff-spacing :
  • Dans le premier code de Bernard, il utilise \override VerticalAxisGroup.default-staff-staff-spacing, mais cette propriété est généralement définie dans le contexte \layout pour s'appliquer globalement. Lorsqu'elle est utilisée dans un \with à l'intérieur d'un \new Staff, elle peut ne pas être interprétée correctement, surtout si d'autres contextes (comme ChoirStaff) interfèrent.
  1. Interférence de ChoirStaff :
  • Le ChoirStaff est un contexte qui regroupe plusieurs portées (comme pour un chœur) et impose ses propres règles d'espacement vertical, souvent via StaffGrouper.staff-staff-spacing. Cela peut bloquer les ajustements locaux définis dans un Staff ou un Ossia, comme mentionné dans les échanges entre Bernard et MartialR.

  • Une recherche dans les forums, comme LilyPond-users mailing list, confirme que ChoirStaff peut compliquer les ajustements d'espacement, nécessitant des overrides spécifiques pour chaque portée ou la suppression de ChoirStaff.

Solution Recommandée

La solution consiste à :

  1. Définir un contexte Ossia dans le bloc \layout avec des paramètres d'espacement vertical personnalisés.

  2. Ajuster l'espacement vertical de chaque Staff (comme "soprano" et "tenor") pour éviter les interférences.

  3. Si un ChoirStaff est présent, soit le supprimer, soit ajouter des ajustements d'espacement dans le contexte ChoirStaff ou pour chaque portée.

Voici un exemple corrigé basé sur le code initial :

lilypond

\version "2.24.2"

\layout {
  \context {
    \Score
    \consists "Span_bar_engraver"
    \remove "System_start_delimiter_engraver"
    \accepts "Ossia"
  }
  \context {
    \Staff
    \name "Ossia"
    \alias "Staff"
    \omit TimeSignature
    \magnifyStaff #2/3
    firstClef = ##f
    \override VerticalAxisGroup.staff-staff-spacing =
      #'((basic-distance . 5)  % Ajustez pour déplacer l'ossia
         (minimum-distance . 3)
         (padding . 1))
  }
}

<<
  \new Staff = "soprano" \with {
    \override VerticalAxisGroup.staff-staff-spacing =
      #'((basic-distance . 8)  % Ajustez pour l'espace entre soprano et autres portées
         (padding . 1))
  }
  \relative c'' {
    c4 d e
    <<
      { b4 }
      \context Ossia \with {
        alignBelowContext = #"soprano"
      }
      {
        \once \override TextScript.X-offset = #-6
        \once \override TextScript.Y-offset = #-0.5
        a4*1/4^\markup { \fontsize #2 "Orig." } \stopStaff
      }
    >>
  }
  \new Staff = "tenor" \with {
    \override VerticalAxisGroup.staff-staff-spacing =
      #'((basic-distance . 10)  % Ajustez pour l'espace entre tenor et autres portées
         (padding . 1))
  }
  \relative c' { a'1 c4 e a, }
>>

Application au fichier telemann.ly

Dans le fichier telemann.ly (non fourni ici, mais mentionné), MartialR a identifié que le ChoirStaff bloquait les réglages d'espacement. Sa solution (telemann_rectif_1.ly) consistait à :

  • Supprimer le ChoirStaff.

  • Ajouter \override VerticalAxisGroup.staff-staff-spacing dans chaque Staff (flûte, soprano, continuo).

Si vous souhaitez conserver le ChoirStaff, vous pouvez ajuster son espacement globalement :

lilypond

\layout {
  \context {
    \ChoirStaff
    \override StaffGrouper.staff-staff-spacing =
      #'((basic-distance . 10)
         (padding . 1))
  }
}

Considérations Techniques

  • Paramètres d'espacement :

    • basic-distance : Distance idéale entre les portées (en espaces de portée).

    • minimum-distance : Distance minimale, utile pour éviter les collisions.

    • padding : Espace supplémentaire ajouté pour éviter les chevauchements.

  • Contexte ChoirStaff : Si vous conservez ChoirStaff, ajustez StaffGrouper.staff-staff-spacing pour contrôler l'espacement global, puis affinez avec staff-staff-spacing pour l'ossia.

  • Testez différentes valeurs : Par exemple, essayez basic-distance entre 3 et 10 pour trouver la position idéale de l'ossia.

Tableaux Récapitulatifs

Voici un tableau des propriétés utilisées :

Propriété Contexte Description Exemple de valeur
VerticalAxisGroup.staff-staff-spacing Ossia Contrôle l'espace entre l'ossia et la portée principale basic-distance . 5
VerticalAxisGroup.staff-staff-spacing Staff Contrôle l'espace entre les portées principales basic-distance . 8
StaffGrouper.staff-staff-spacing ChoirStaff Contrôle l'espace global dans un

ChoirStaff|basic-distance . 10|

Un autre tableau pour les valeurs testées :

basic-distance

dans

Ossia Effet observé
3 Ossia très proche de la portée principale
5 Espacement modéré, bon compromis
10 Ossia très éloignée, peut être excessif

Conclusion

En résumé, pour ajuster la position verticale d'une portée ossia dans LilyPond, utilisez \override VerticalAxisGroup.staff-staff-spacing dans le contexte Ossia pour contrôler son espacement par rapport à la portée principale. Si un ChoirStaff est présent, supprimez-le ou ajustez l'espacement de chaque Staff individuellement. Testez différentes valeurs pour basic-distance et padding afin de trouver la position idéale. Cette approche, combinée à la suppression ou à l'ajustement de ChoirStaff, résout le problème de réglage vertical de l'ossia.


Key Citations

Michel, puis-je te dire, avec tout le respect pour ton travail avec l'IA: cette logorrhée interminable qu'elle génère est complètement inutilisable pour moi… je préfère, et de très loin, une réponse humaine qui me dirait: désolé, trouve pas… plutôt que cette place monstrueuse que prend la réponse de l'IA… et qui ne résout rien pour moi…

1 « J'aime »