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 à :
-
Définir un contexte Ossia dans le bloc \layout et ajuster son espacement vertical avec \override VerticalAxisGroup.staff-staff-spacing.
-
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 :
- 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.
- 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.
- 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 à :
-
Définir un contexte Ossia dans le bloc \layout avec des paramètres d'espacement vertical personnalisés.
-
Ajuster l'espacement vertical de chaque Staff (comme "soprano" et "tenor") pour éviter les interférences.
-
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 à :
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