X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Ffr%2Fnotation%2Fspacing.itely;h=3a0be28909c8314eac670b84402956f759e245f9;hb=01df8ad908c92687d0c352e5ad5f067e52809423;hp=b6734daa1a868165f5dbad624b4be1842e9cf0d7;hpb=0ed7867f1eda627a41db9580dd6951f9ebd48917;p=lilypond.git diff --git a/Documentation/fr/notation/spacing.itely b/Documentation/fr/notation/spacing.itely index b6734daa1a..3a0be28909 100644 --- a/Documentation/fr/notation/spacing.itely +++ b/Documentation/fr/notation/spacing.itely @@ -1,343 +1,3668 @@ @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- @ignore - Translation of GIT committish: 964d024dd4f022ba7cd66adc13c0169035d4c4e5 + Translation of GIT committish: 95b372c451ea1586db8db66d3d00334382e8e103 When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. @end ignore -@c \version "2.12.0" +@c \version "2.17.6" @c Translators: Frédéric Chiasson, Jean-Charles Malahieude +@ignore +GDP TODO list + +Negative numbers are allowed: +> Are you sure? The following works well +> \paper{ +> first-page-number = -2 +> } +> and prints page number -1 on the second page, for example. + + +In 5.2.1 the @refbugs (line 495 in spacing.itely on master) it +states: + +"@code{layout-set-staff-size} does not change the distance between +the staff lines." + +Could we add a sentence: +"Use instead the pair fontSize = #@var{N} + \override StaffSymbol.staff-space = #(magstep @var{N}) +inside the Staff context to change the size of the font and the +distance between staff lines accordingly." + +Actually I found, that the @internalsref{StaffSymbol} at line 481 +sends to an incomplete documentation. The property staff-space is not +explained here. I thought Y-extent might be of help, but it is in turn +explained by x-space which again is missing from the list. Who has the +knowledge to fix this? + + +Clarify +http://code.google.com/p/lilypond/issues/detail?id=68 + +@end ignore + + @node Gestion de l'espace @chapter Gestion de l'espace @translationof Spacing issues +L'agencement général d'une partition dépend de trois facteurs +interdépendants : la mise en page, les sauts de ligne et l'espacement. +Les choix faits en matière d'espacement détermineront la densité de +chacun des systèmes, ce qui influera sur le positionnement des sauts de +ligne et, par voie de conséquence, sur le nombre de pages de la +partition. + +En pratique, cette procédure comporte quatre étapes. Dans un premier +temps, des distances élastiques @emph{(springs)} sont déterminées sur la +base des durées. Sont alors calculées différentes possibilités de saut +de ligne, chacune se voyant attribuer un @qq{coefficient de laideur}, +puis est estimée la hauteur de chaque système. LilyPond opte enfin pour +la combinaison entre sauts de page et de ligne qui offre la meilleure +occupation de l'espace, tant horizontalement que verticalement. + +Les réglages qui influencent la mise en forme se placent dans deux blocs +différents. Le bloc @w{@code{\paper @{@dots{}@}}} étudié à la rubrique +@ref{Mise en forme de la page} contient les réglages applicables à +l'intégralité du document -- à toutes les partitions d'un ouvrage -- +tels que format du papier, impression ou non des numéros de page, etc. +Quant au bloc @w{@code{\layout @{@dots{}@}}}, qui fait l'objet de la +rubrique @ref{Mise en forme de la partition}, il détermine la mise en +forme de la musique : le nombre de systèmes utilisés, l'espacement des +regroupements de portées, etc. @menu -* Du papier et des pages:: -* Mise en forme de la musique:: +* Mise en forme de la page:: +* Mise en forme de la partition:: * Sauts:: * Espacement vertical:: * Espacement horizontal:: * Réduction du nombre de pages de la partition:: @end menu -@node Du papier et des pages -@section Du papier et des pages -@translationof Paper and pages @c external +@cindex ragged, aligné +@cindex aligné, ragged + +@warning{Vous verrez au fil de ce chapitre apparaître certains termes +dont la traduction vous semblera assurément erronée. Il n'en est +cependant rien : certains termes techniques ont une histoire +particulière selon leur langue d'origine. Ainsi le vocable anglais +@emph{Ragged} signifie en lambeau, en loques ; dans l'univers +typographique, un maître français voit un alignement à gauche -- il dira +@qq{au fer à gauche} -- alors que son homologue anglophone constate un +@emph{ragged-right} -- donc du vide à droite.} + + +@node Mise en forme de la page +@section Mise en forme de la page +@translationof Page layout + +Nous allons examiner ici les options qui contrôlent la mise en forme des +pages attachées au bloc @code{\paper}. + +@menu +* Le bloc \paper:: +* Format du papier et adaptation automatique:: +* Variables d'espacement vertical fixe:: +* Variables d'espacement vertical fluctuant:: +* Variables d'espacement horizontal:: +* Autres variables du bloc \paper:: +@end menu + + +@node Le bloc \paper +@subsection Le bloc @code{\paper} +@translationof The @code{\paper} block + +Un bloc @code{\paper} peut apparaître au sein d'un bloc @code{\book}. +Les réglages effectués à l'aide du bloc @code{\paper} s'appliqueront à +l'intégralité d'un ouvrage, qui peut comporter plusieurs partitions (des +blocs @emph{score}) ; il ne doit donc en aucun cas se trouver dans un +bloc @code{\score}. Peuvent apparaître dans un bloc @code{\paper} : + +@itemize + +@item +la fonction Scheme @code{set-paper-size}, + +@item +des variables propres au bloc @code{\paper} qui viendront adapter la +mise en page, + +@item +la définition des différents @emph{markups} qui personnaliseront la mise +en forme des entêtes et pieds de page ainsi que des titrages. + +@end itemize + +La fonction @code{set-paper-size} fait l'objet de la rubrique qui suit +-- @ref{Format du papier et adaptation automatique}. Les variables du +bloc @code{\paper} chargées de la mise en page sont abordées plus loin +dans ce chapitre. Quant aux définitions relatives aux @emph{markups} +des entête, pied de page et titrage, elles sont étudiées à la rubrique +@ref{Titrages personnalisés}. + +La plupart des variables gérant le papier ne sont fonctionnelles que +lorsque mentionnées dans un bloc @code{\paper}. Certaines, qui peuvent +toutefois apparaître dans un bloc @code{\layout}, sont référencées à la +rubrique @ref{Le bloc \layout}. + +Sauf mention contraire, toutes les variables du bloc @code{\paper} qui +correspondent à des dimensions sont exprimées en millimètre -- vous +pouvez bien entendu spécifier un autre système de mesure. Voici +comment, par exemple, définir la marge haute (@code{top-margin}) à dix +millimètres : + +@example +\paper @{ + top-margin = 10 +@} +@end example + +Si vous préférez lui affecter une valeur de 0,5 pouce, vous devrez +mentionner le suffixe d'unité @code{\in} : + +@example +\paper @{ + top-margin = 0.5\in +@} +@end example + +LilyPond accepte les suffixes d'unité @code{\mm}, @code{\cm}, +@code{\in} et @code{\pt}. Ces unités sont des conversions de +millimètres, répertoriées dans le fichier +@file{ly/paper-defaults-init.ly}. Pour plus de lisibilité, et bien que +ce ne soit pas techniquement requis, nous vous conseillons d'ajouter +@code{\mm} à votre code lorsque vous travaillez en millimètres. + +Vous pouvez aussi définir les valeurs du bloc @code{\paper} à l'aide de +fonctions Scheme. Voici l'équivalent de l'exemple précédent : + +@example +\paper @{ + #(define top-margin (* 0.5 in)) +@} +@end example + +@seealso +Manuel de notation : +@ref{Format du papier et adaptation automatique}, +@ref{Titrages personnalisés}. +@ref{Le bloc \layout}. + +Fichiers d'initialisation : +@file{ly/paper-defaults-init.ly}. -@untranslated +@node Format du papier et adaptation automatique +@subsection Format du papier et adaptation automatique +@translationof Paper size and automatic scaling + +@cindex papier, taille +@cindex page, format + +@funindex \paper @menu * Format du papier:: -* Mise en forme de la page:: +* Adaptation automatique au format:: @end menu + @node Format du papier -@subsection Format du papier -@translationof Paper size @c external +@unnumberedsubsubsec Format du papier +@translationof Setting the paper size -@untranslated +LilyPond génère par défaut, et en l'absence de mention explicite d'un +format de papier, un fichier imprimable au format A4. Vous pouvez +cependant utiliser un autre format à l'aide des deux fonctions +@code{set-default-paper-size} et @code{set-paper-size} qui, elle, se +place à l'intérieur d'un bloc @code{\paper} : +@example +#(set-default-paper-size "quarto") +@end example -@node Mise en forme de la page -@subsection Mise en forme de la page -@translationof Page formatting @c external +qui se place en début de fichier, ou @code{set-paper-size}, + +@example +\paper @{ + #(set-paper-size "tabloid") +@} +@end example + +qui s'inscrit au sein d'un bloc @code{\paper}. + +@noindent +La seule restriction à l'utilisation isolée de la fonction +@code{set-default-paper-size} est qu'elle doit intervenir avant le +premier bloc @code{\paper}. @code{set-default-paper-size} fixe le +format pour toutes les pages, alors que @code{set-paper-size} détermine +le format des feuilles rattachées à un bloc @code{\paper} particulier. +Ainsi, lorsque le bloc @code{\paper} se trouve en tête de fichier, le +format du papier s'appliquera à toutes les pages ; si @code{\paper} +apparaît dans un bloc @code{\book}, la taille ne s'appliquera qu'au +@emph{book} en question. + +À l'intérieur d'un bloc @code{\paper}, la fonction @code{set-paper-size} +doit intervenir avant toute autre variable. Les raisons à ceci sont +abordées à la rubrique @ref{Adaptation automatique au format}. + +Différents formats de papier sont définis dans le fichier +@file{scm/paper.scm}. Bien que vous puissiez y ajouter votre propre +format, sachez cependant que celui-ci est écrasé à chaque mise à jour de +LilyPond. + +@c An appendix entry exists for paper sizes but is not auto-generated + +La commande suivante, inscrite dans votre fichier, vous permettra +d'ajouter votre format personnalisé à ceux déjà connus, puis d'y faire +appel à l'aide des fonctions @code{set-default-paper-size} et +@code{set-paper-size} : + +@example +#(set! paper-alist (cons '("mon format" . (cons (* 15 in) (* 3 in))) paper-alist)) + +\paper @{ + #(set-paper-size "mon format") +@} +@end example + +Les unités peuvent s'exprimer aussi bien en @code{in} (pouces), qu'en +@code{cm} (centimètres) ou @code{mm} (millimètres). + +@cindex papier, orientation +@cindex landscape, papier +@cindex paysage, papier +@cindex à l'italienne, papier + +Le fait d'ajouter l'argument @code{'landscape} à l'instruction +stipulant le format du papier permet d'obtenir une présentation à +l'italienne -- ou paysage si vous préférez -- et donc des lignes plus +longues. + +@example +#(set-default-paper-size "a6" 'landscape) +@end example + +L'inversion des dimensions du papier sans pour autant basculer la +présentation -- comme pour imprimer sur une carte postale ou créer un +graphique destiné à inclusion -- s'obtient en ajoutant @samp{landscape} +au nom du format de papier : + +@example +#(set-default-paper-size "a6landscape") +@end example + +Lorsque la taille du papier comporte explicitement @samp{landscape} ou +@samp{portrait}, la présence d'un argument @code{'landscape} aura pour +seul effet de modifier l'orientation de l'image et non les dimensions de +la feuille. + +@seealso +Manuel de notation : +@ref{Adaptation automatique au format}, +@ref{Formats de papier prédéfinis}. + +Fichiers d'initialisation : +@file{scm/paper.scm}. + + +@node Adaptation automatique au format +@unnumberedsubsubsec Adaptation automatique au format +@translationof Automatic scaling to paper size + +Toute modification du format de papier à l'aide des fonctions Scheme +@code{set-default-paper-size} ou @code{set-paper-size}, que nous avons +vues à la rubrique @ref{Format du papier}, se traduira automatiquement +par l'ajustement d'un certain nombre de variables attachées au bloc +@code{\paper} afin qu'elles soient en concordance avec le format +spécifié. Vous pouvez annuler l'ajustement automatique d'une variable +particulière en redéfinissant sa valeur après avoir spécifié le format +de papier utilisé. Notez bien que le simple fait d'affecter une valeur +à @code{paper-height} ou @code{paper-width} ne déclenchera pas +l'étalonnage automatique, bien que spécifier une largeur de papier +@emph{(@code{paper-width})} peut influencer d'autres valeurs -- mais +c'est une autre histoire dont nous parlerons plus tard et qui n'a rien à +voir avec la mise à l'échelle. + +L'adaptation automatique affecte les dimensionnements verticaux +@code{top-margin} et @code{bottom-margin} -- voir +@ref{Variables d'espacement vertical fixe} --, ainsi que les +dimensionnements horizontaux @code{left-margin}, @code{right-margin}, +@code{inner-margin}, @code{outer-margin}, @code{binding-offset}, +@code{indent} et @code{short-indent} -- voir +@ref{Variables d'espacement horizontal}. + +Les valeurs par défaut de ces dimensionnements sont contenues dans le +fichier @file{ly/paper-defaults-init.ly} et utilisent les variables +internes @code{top-margin-default}, @code{bottom-margin-default}, etc. +correspondant au format par défaut -- papier A4 -- pour lequel +@code{paper-height} est à @code{297\mm} et @code{paper-width} à +@code{210\mm}. + +@seealso +Manuel de notation : +@ref{Variables d'espacement vertical fixe}, +@ref{Variables d'espacement horizontal}. + +Fichiers d'initialisation : +@file{ly/paper-defaults-init.ly}, +@file{scm/paper.scm}. + + +@node Variables d'espacement vertical fixe +@subsection Variables d'espacement vertical fixe +@translationof Fixed vertical spacing @code{\paper} variables + +@warning{Certains dimensionnements attachés au bloc @code{@bs{}paper} +sont automatiquement ajustés selon le format du papier, ce qui peut +conduire à un résultat inattendu -- +voir @ref{Adaptation automatique au format}.} + +Les valeurs par défaut (avant étalonnage) sont définies dans le fichier +@file{ly/paper-defaults-init.ly}. + +@table @code +@item paper-height +@funindex paper-height + +La hauteur de la feuille. Il s'agit par défaut de la dimension du +papier utilisé. Notez bien que cette variable n'affectera pas +l'ajustement automatique d'un certain nombre de dimensionnements +verticaux. + +@item top-margin +@funindex top-margin + +La marge entre le bord supérieur de la feuille et la surface imprimable. +Elle est fixée par défaut à @code{5\mm} et s'ajustera selon le +format de papier. + +@item bottom-margin +@funindex bottom-margin + +La marge entre la surface imprimable et le bord inférieur de la feuille. +Elle est fixée par défaut à @code{6\mm} et s'ajustera selon le +format de papier. + +@item ragged-bottom +@funindex ragged-bottom + +L'activation de cette variable permet de ne pas répartir verticalement +les systèmes sur les pages hormis la dernière. La valeur par défaut +est @code{#f}. Lorsque la partition ne comporte que deux ou trois +systèmes par page, comme pour un conducteur d'orchestre, nous vous +conseillons d'activer cette variable. + +@item ragged-last-bottom +@funindex ragged-last-bottom + +La désactivation de cette variable permet de répartir verticalement les +systèmes de la dernière page d'une partition. La valeur par défaut +est @code{#t}. Nous vous conseillons, lorsque des pièces couvrent +deux pages ou plus, de désactiver cette variable.@* +Notez bien que la variable @code{ragged-last-bottom} affecte aussi la +dernière page de chacune des parties -- créées à l'aide d'un bloc +@code{\bookpart} -- d'un même ouvrage. + +@end table + +@seealso +Manuel de notation : +@ref{Adaptation automatique au format}. + +Fichiers d'initialisation : +@file{ly/paper-defaults-init.ly}. + +Morceaux choisis : +@rlsrnamed{Spacing, Espacements}. + +@knownissues +Les titrages (contenus dans le bloc @code{\header@{@}}) sont considérés +comme des systèmes à part entière ; ils seront donc affectés par +@code{ragged-bottom} et @code{ragged-last-bottom}, qui éventuellement +ajouteront de l'espace avant le premier système de la partition. + +La définition explicite d'un format de papier annulera tout réglage des +marges haute et basse. + + +@node Variables d'espacement vertical fluctuant +@subsection Variables d'espacement vertical fluctuant +@translationof Flexible vertical spacing @code{\paper} variables + +Il est souvent judicieux d'apporter un peu de flexibilité à l'espacement +entre différents éléments (marges, titres, systèmes ou mouvements), en +dilatation ou compression selon le cas. Un certain nombre de variables +de type @code{\paper} répertoriées ci-dessous vous permettront d'affiner +ces dimensionnements. + +Gardez à l'esprit que les variables du bloc @code{\paper} dont nous +parlons ici n'influencent en rien l'espacement des portées d'un même +système. L'espacement au sein des systèmes est géré par des propriétés +attachées à des objets graphiques (@emph{grobs}) qui, elles, se +définissent au niveau du bloc @code{\score} -- voir à ce sujet +@ref{Espacement vertical au sein d'un système}. + +@menu +* Structure des variables d'espacement vertical fluctuant:: +* Liste des variables d'espacement vertical fluctuant:: +@end menu + + +@node Structure des variables d'espacement vertical fluctuant +@unnumberedsubsubsec Structure des variables d'espacement vertical fluctuant +@translationof Structure of flexible vertical spacing alists + +Chacune de ces variables attachées au bloc @code{\paper} est constituée +d'une liste associative @emph{(alist)} à quatre @i{clés} : + +@itemize + +@item +@code{basic-distance} @emph{(distance de base)} -- la grandeur d'espace +par défaut, exprimée en hauteur de portée, séparant les @i{points de +référence} de deux éléments, qui évite tout risque de collision en +l'absence de dilatation ou compression. Le point de référence d'un +titre ou d'un @emph{markup} est son sommet, celui d'un système est le +centre vertical du @code{StaffSymbol} le plus proche -- même lorsqu'une +ligne de @qq{non-portée} viendrait à s'intercaler. Une +@code{basic-distance} inférieure à @code{padding} ou +@code{minimum-distance} sera sans effet, dans la mesure où l'espacement +résultant ne saurait être inférieur à @code{padding} ou +@code{minimum-distance}. + +@item +@code{minimum-distance} @emph{(distance-minimale)} -- l'espacement +minimal, exprimé en hauteur de portée, entre les points de référence des +deux éléments alors qu'il y a déjà un effet de compression. Une +@code{minimum-distance} inférieure à la valeur du @code{padding} sera +sans effet, dans la mesure où l'espacement résultant ne saurait être +inférieur au @code{padding}. + +@c TODO: explain skylines somewhere and xref to it from here. + +@item +@code{padding} @emph{(décalage)} -- la grandeur minimale de @qq{blanc} +qui sépare deux éléments, exprimée en hauteur de portée. On peut le +voir comme la hauteur minimale d'un rectangle vide qui devrait s'étendre +sur toute la largeur des deux éléments. + +@item +@code{stretchability} @emph{(dilatation)} -- le coefficient +d'étirement de cet espace. Un coefficient nul permet de figer +l'espacement, à moins qu'il n'en résulte des collisions. Un coefficient +positif déterminera la propension d'un espacement à s'étirer, tout +en tenant compte du coefficient affecté aux autres espacements. +Par exemple, lorsque le coefficient de dilatation d'une dimension est +double de celui d'une autre, elle pourra s'étirer deux fois plus que +cette dernière. Il ne saurait être négatif. La valeur @code{+inf.0} +provoque une @code{programming_error} (erreur de programmation) et est +ignorée ; vous pouvez toutefois utiliser @code{1.0e7} pour obtenir +une valeur proche de l'infini. Lorsque cette @i{clé} n'est pas définie, +sa valeur est par défaut égale à @code{space}. Notez bien que +l'utilisateur ne peut définir une propension à la compression ; +elle est en fait égale à +(@code{basic-distance} @minus{} @code{minimum-distance}). + +@end itemize + +Lorsque l'impression n'est pas en pleine page -- elle est donc +@emph{ragged bottom} pour les anglophones -- l'élément @code{space} +n'est pas étiré. Les hauteurs sur une telle page correspondront donc au +maximum de + +@itemize + +@item +@code{basic-distance}, plus +@item +@code{minimum-distance} et +@item +@code{padding}, augmenté de ce qu'il faut pour éviter les +chevauchements. + +@end itemize + +Cependant, lorsque la partition fait plusieurs pages, la dernière page +reprendra dans la mesure du possible l'espacement de la page précédente. + +Les manières de modifier des listes associatives font l'objet d'un +@rusernamed{Modification de listes associatives, chapitre spécifique}. +L'exemple suivant indique deux façons de modifier une liste associative. +La première déclaration intervient sur une seule clé, alors que la +deuxième redéfinit complètement la variable. + +@example +\paper @{ + system-system-spacing #'basic-distance = #8 + + score-system-spacing = + #'((padding . 1) + (basic-distance . 12) + (minimum-distance . 6) + (stretchability . 12)) +@} +@end example + + +@node Liste des variables d'espacement vertical fluctuant +@unnumberedsubsubsec Liste des variables d'espacement fluctuant +@translationof List of flexible vertical spacing @code{\paper} variables + +Le nom des dimensionnements à hauteur variable sont de la forme +@code{@var{avant}-@var{après}-spacing}, où @code{@var{avant}} et +@code{@var{après}} représentent les éléments qui doivent être espacés. +La distance s'établit entre les points de référence des deux éléments +concernés (voir la rubrique précédente pour plus de précision). Notez +bien que, dans les règles de nommage des variables qui suivent, le terme +@code{markup} fait référence aussi bien à un @i{markup de titrage} +(@code{bookTitleMarkup} ou @code{scoreTitleMarkup}) qu'à un +@i{markup de haut niveau} (voir @ref{Structure de fichier}). Toutes les +distances sont exprimées en espace de portée. + +Leurs valeurs par défaut sont inscrites dans le fichier +@file{ly/paper-defaults-init.ly}. + +@c TODO: Where do headers/footers fit in? -mp + +@table @code +@item markup-system-spacing +@funindex markup-system-spacing + +détermine l'espacement entre un titre ou un @emph{markup} de premier +niveau, et le système qui le suit. + +@item score-markup-spacing +@funindex score-markup-spacing + +détermine l'espacement entre le dernier système et le titre ou +@emph{markup} de haut niveau qui le suit. + +@item score-system-spacing +@funindex score-system-spacing + +détermine l'espacement entre le dernier système d'une partition et le +premier système de la partition suivante, en l'absence de titrage ou +@emph{markup} qui les sépare. + +@item system-system-spacing +@funindex system-system-spacing + +détermine l'espacement entre deux systèmes d'un même mouvement. + +@item markup-markup-spacing +@funindex markup-markup-spacing + +détermine l'espacement entre deux titres ou @emph{markups} de premier +niveau. + +@item last-bottom-spacing +@funindex last-bottom-spacing + +détermine la distance entre le dernier système ou le dernier +@emph{markup} de haut niveau, et le bas de la surface imprimable -- +autrement dit le haut de la marge basse. + +@item top-system-spacing +@funindex top-system-spacing + +détermine l'espace entre le haut de la surface imprimable (le bas de la +marge haute) et le milieu du premier système. Cette variable n'est +effective qu'en l'absence de titre ou @emph{markup} de premier niveau +en haut de page. + +@item top-markup-spacing +@funindex top-markup-spacing + +détermine l'espace entre le haut de la surface imprimable (le bas de la +marge haute) et le premier titre ou @emph{markup} de premier niveau. +Cette variable n'est effective qu'en l'absence de système en haut de +page. + +@end table + +@seealso +Manuel de notation : +@ref{Espacement vertical au sein d'un système}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Variables d'espacement horizontal +@subsection Variables d'espacement horizontal +@translationof Horizontal spacing \paper variables + +@warning{Certains dimensionnements attachés au bloc @code{@bs{}paper} +sont automatiquement ajustés selon le format du papier, ce qui peut +conduire à un résultat inattendu -- +voir @ref{Adaptation automatique au format}.} + +@menu +* Variables de marge et de largeur:: +* Variables spécifiques pour l'impression recto-verso:: +* Variables d'indentation et de décalage:: +@end menu + + +@node Variables de marge et de largeur +@unnumberedsubsubsec Variables de marge et de largeur +@translationof @code{\paper} variables for widths and margins + +Les valeurs par défaut (avant étalonnage) sont définies dans le fichier +@file{ly/paper-defaults-init.ly}. + +@table @code + +@item paper-width +@funindex paper-width + +La largeur de la page. Elle correspond par défaut à la largeur du +format de papier utilisé. Si @code{paper-width} n'a aucun effet en +matière d'ajustement automatique, cette variable influe sur la variable +@code{line-width}. Lorsque vous définissez à la fois les valeurs de +@code{paper-width} et @code{line-width}, les valeurs de +@code{left-margin} et @code{right-margin} seront recalculées. Voir +aussi @code{check-consistency}. + +@item line-width +@funindex line-width + +la longueur d'un système musical sans indentation et justifié sur toute +la largeur de la page. La valeur par défaut est égale à +@code{paper-width}, auquel sont retranchés @code{left-margin} et +@code{right-margin}. Lorsque vous définissez @code{line-width} sans +modifier les valeurs de @code{left-margin} et @code{right-margin}, les +marges seront alors recalculées de telle sorte que les systèmes soient +centrés. Voir aussi @code{check-consistency}. La variable +@code{line-width} peut se définir aussi dans un bloc @code{\layout}. + +@item left-margin +@funindex left-margin + +la marge entre le bord gauche de la feuille et le début de chaque +système. La valeur par défaut est de @code{10\mm} ; elle sera +ajustée selon le format du papier. Lorsque vous définissez +@code{line-width} et @code{right-margin} sans modifier la valeur de +@code{left-margin}, cette dernière sera alors égale à +@code{(paper-width @minus{} line-width @minus{} right-margin)}. +Lorsque seule @code{line-width} est définie, les deux marges +correspondent à +@code{((paper-width @minus{} line-width) / 2)}, ce +qui a pour effet de centrer les systèmes sur la page. Voir aussi +@code{check-consistency}. + +@item right-margin +@funindex right-margin + +La marge entre le bord droit de la page et la fin des systèmes en pleine +largeur (non @emph{ragged}). La valeur par défaut est de @code{10\mm} +et s'ajustera selon le format du papier. Lorsque vous définissez +@code{line-width} et @code{left-margin}, sans modifier la valeur de +@code{right-margin}, cette dernière sera alors égale à +@code{(paper-width @minus{} line-width @minus{} left-margin)}. +Lorsque seule @code{line-width} est définie, les deux marges +correspondent à +@code{((paper-width @minus{} line-width) / 2)}, ce +qui a pour effet de centrer les systèmes sur la page. Voir aussi +@code{check-consistency}. + +@item check-consistency +@funindex check-consistency + +Lorsqu'elle est activée, cette variable vérifie que @code{left-margin}, +@code{line-width} et @code{right-margin} sont en cohérence, et que +l'addition de ces trois éléments ne dépassera pas la largeur du papier +(@code{paper-width}). La valeur par défaut est @code{#t}. Dans +le cas d'une incohérence, un message d'avertissement est émis et les +trois variables -- marges et longueur de ligne -- rétablies à leur +valeur par défaut (ajustées selon le format du papier). + +@item ragged-right +@funindex ragged-right + +Lorsque cette variable est activée, les systèmes ne s'étendront pas sur +la longueur de la ligne, mais s'arrêteront à leur longueur normale. +La valeur par défaut est @code{#f} mais, si la partition ne comporte +qu'un seul système, elle passe à @code{#t}. Cette variable peut aussi +se gérer au sein d'un bloc @code{\layout}. + +@item ragged-last +@funindex ragged-last + +Lorsqu'elle est activée, cette variable permet de ne pas étendre le +dernier système de façon à occuper toute la longueur de la ligne. La +valeur par défaut est @code{#f}. Cette variable peut aussi +se gérer au sein d'un bloc @code{\layout}. + +@end table + +@seealso +Manuel de notation : +@ref{Adaptation automatique au format}. + +Fichiers d'initialisation : +@file{ly/paper-defaults-init.ly}. + +@knownissues +La définition explicite d'un format de papier annulera tout réglage des +marges gauche et droite. + + +@node Variables spécifiques pour l'impression recto-verso +@unnumberedsubsubsec Variables spécifiques pour l'impression recto-verso +@translationof @code{\paper} variables for two-sided mode + +Les valeurs par défaut (avant étalonnage) sont définies dans le fichier +@file{ly/paper-defaults-init.ly}. + +@table @code + +@item two-sided +@funindex two-sided + +@cindex gouttière +@cindex reliure + +Cette variable permet de gérer efficacement les impressions recto-verso. +Lorsqu'elle est activée, les réglages affectés à @code{inner-margin}, +@code{outer-margin} ainsi que @code{binding-offset} détermineront les +différentes marges selon qu'il s'agit d'une page paire ou impaire. +Cette variable s'applique en lieu et place de @code{left-margin} et +@code{right-margin}. La valeur par défaut est @code{#f}. + +@item inner-margin +@funindex inner-margin + +La marge que toutes les pages d'une partie ou de tout un ouvrage devront +avoir du côté intérieur. Bien entendu, cette variable n'est +effective que lorsque vous comptez générer un fichier imprimable en +recto-verso -- propriété @code{two-sided} définie à vrai. La valeur par +défaut est de @code{10\mm} et s'ajustera selon le format du papier. + +@item outer-margin +@funindex outer-margin + +la marge que toutes les pages d'une partie ou de tout un ouvrage devront +avoir du côté extérieur -- opposé à la reliure. Bien entendu, cette +variable n'est effective que lorsque vous comptez générer un fichier +imprimable en recto-verso -- propriété @code{two-sided} définie à vrai. +La valeur par défaut est de @code{20\mm} et s'ajustera selon le +format du papier. + +@item binding-offset +@funindex binding-offset + +La gouttière, ou marge de reliure, permet d'augmenter en conséquence la +valeur de la marge intérieure @code{inner-margin} de telle sorte que +rien ne soit masqué par la reliure. Bien entendu, cette variable n'est +effective que lorsque vous comptez générer un fichier imprimable en +recto-verso -- propriété @code{two-sided} définie à vrai. La valeur par +défaut est de @code{0} et s'ajustera selon le format du papier. + +@end table + +@seealso +Manuel de notation : +@ref{Adaptation automatique au format}. + +Fichiers d'initialisation : +@file{ly/paper-defaults-init.ly}. + + +@node Variables d'indentation et de décalage +@unnumberedsubsubsec Variables d'indentation et de décalage +@translationof @code{\paper} variables for shifts and indents + +Les valeurs par défaut (avant étalonnage) sont définies dans le fichier +@file{ly/paper-defaults-init.ly}. + +@table @code + +@item horizontal-shift +@funindex horizontal-shift + +@c This default value is buried in the middle of page.scm. -mp + +Tous les systèmes, ainsi que les titres et séparateurs de systèmes, +seront poussés d'autant vers la droite. La valeur par défaut est +de @code{0.0}. + +@item indent +@funindex indent + +Le niveau d'indentation du premier système d'une partition. La valeur +par défaut est de @code{15\mm} et s'ajustera selon le format du +papier. Cette variable peut aussi se gérer au sein d'un bloc +@code{\layout}. + +@item short-indent +@funindex short-indent + +Le niveau d'indentation de tous les systèmes hormis le premier. La +valeur par défaut est de @code{0}, et s'ajustera selon le format du +papier dès lors que vous lui affecterez une valeur. Cette variable peut +aussi se gérer au sein d'un bloc @code{\layout}. + +@end table + +@seealso +Manuel de notation : +@ref{Adaptation automatique au format}. + +Fichiers d'initialisation : +@file{ly/paper-defaults-init.ly}. + +Morceaux choisis : +@rlsrnamed{Spacing, Espacements}. + + +@node Autres variables du bloc \paper +@subsection Autres variables du bloc @code{\paper} +@translationof Other @code{\paper} variables + +@menu +* Variables de gestion des sauts de ligne:: +* Variables de gestion des sauts de page:: +* Variables de gestion des numéros de page:: +* Variables supplémentaires:: +@end menu + + +@node Variables de gestion des sauts de ligne +@unnumberedsubsubsec Variables de gestion des sauts de ligne +@translationof @code{\paper} variables for line breaking + +@c TODO: Mention that ly:optimal-breaking is on by default? -mp + +@table @code + +@item max-systems-per-page +@funindex max-systems-per-page + +Le nombre maximal de systèmes qu'une page pourra comporter. Cette +variable n'est prise en compte, à ce jour, que par l'option +@code{ly:optimal-breaking}, et n'est pas définie. + +@item min-systems-per-page +@funindex min-systems-per-page + +Le nombre minimal de systèmes qu'une page pourra comporter. Attention +cependant aux risques de débordement s'il est trop important. Cette +variable n'est prise en compte, à ce jour, que par l'option +@code{ly:optimal-breaking}, et n'est pas définie. + +@item systems-per-page +@funindex systems-per-page + +Le nombre de systèmes que devrait comporter chaque page. Cette variable +n'est à ce jour prise en charge que par l'algorithme +@code{ly:optimal-breaking} et n'est pas définie par défaut. + +@item system-count +@funindex system-count + +Le nombre de systèmes requis par la partition. Cette variable n'est pas +définie par défaut. Cette variable peut se gérer au sein d'un bloc +@code{\layout}. + +@end table + +@seealso +Manuel de notation : +@ref{Sauts de ligne}. + + +@node Variables de gestion des sauts de page +@unnumberedsubsubsec Variables de gestion des sauts de page +@translationof @code{\paper} variables for page breaking + +Les valeurs par défaut sont définies dans le fichier +@file{ly/paper-defaults-init.ly}. + +@table @code + +@item blank-after-score-page-penalty +@funindex blank-after-score-page-penalty + +Pénalité pour apparition d'une page blanche entre deux partitions. Sa +valeur est par défaut inférieure à celle de +@code{blank-page-penalty} ; nous préférons qu'une page blanche +s'insère après la fin de la partition plutôt qu'au milieu. + +@item blank-last-page-penalty +@funindex blank-last-page-penalty + +Pénalité pour fin de partition intervenant sur une page impaire. La +valeur par défaut est de @code{0}. + +@item blank-page-penalty +@funindex blank-page-penalty + +Pénalité pour apparition d'une page blanche en cours de partition. +L'algorithme @code{ly:optimal-breaking} n'en tiendra pas compte +puisqu'il ne conçoit pas la présence d'une page blanche au milieu d'une +partition. La valeur par défaut est de @code{5}. + +@item page-breaking +@funindex page-breaking + +L'algorithme de calcul des sauts de page à utiliser. Vous avez le choix +entre @code{ly:minimal-breaking}, @code{ly:page-turn-breaking} et +@code{ly:optimal-breaking}. + +@item page-breaking-system-system-spacing +@funindex page-breaking-system-system-spacing + +Cette variable permet de @qq{tromper} l'algorithme de gestion des sauts +de page quant à la valeur de @code{system-system-spacing}. Ainsi, +lorsque @code{page-breaking-system-system-spacing #'padding} a une +valeur nettement supérieure à @code{system-system-spacing #'padding}, +l'algorithme en question aura tendance à disposer moins de systèmes sur +une même page. Cette variable est par défaut non définie. + +@item page-count +@funindex page-count + +Le nombre de pages que devra comporter la partition. Cette variable est +par défaut non définie. + +@end table + +@seealso +Manuel de notation : +@ref{Sauts de page}, +@ref{Optimisation des sauts de page}, +@ref{Optimisation des tournes}, +@ref{Minimisation des sauts de page}, +@ref{Présentation en rouleau}. + +Fichiers d'initialisation : +@file{ly/paper-defaults-init.ly}. + + +@node Variables de gestion des numéros de page +@unnumberedsubsubsec Variables de gestion des numéros de page +@translationof @code{\paper} variables for page numbering + +Les valeurs par défaut sont définies dans le fichier +@file{ly/paper-defaults-init.ly}. + +@table @code + +@item auto-first-page-number +@funindex auto-first-page-number + +L'algorithme qui gère les sauts de page prend en compte le fait que le +premier numéro de page soit pair ou impair. Lorsque cette +fonctionnalité est activée, l'algorithme des sauts de page décidera de +lui-même si le premier numéro sera pair ou impair, ce qui se traduira +par un éventuel incrément de un. La valeur par défaut +est @code{#f}. + +@item first-page-number +@funindex first-page-number + +Le numéro de la première page. La valeur par défaut est +de @code{#1}. + +@item print-first-page-number +@funindex print-first-page-number + +Cette variable permet d'imprimer le numéro de page y compris sur la +première. La valeur par défaut est @code{#f}. + +@item print-page-number +@funindex print-page-number + +La désactivation de cette variable permet d'obtenir des pages non +numérotées. La valeur par défaut est @code{#t}. + +@end table + +@seealso +Fichiers d'initialisation : +@file{ly/paper-defaults-init.ly}. + +@knownissues +Les pages au numéro impair sont toujours à droite. Pour que la musique +commence en page 1, le dos de la page de garde doit être vide de telle +sorte que la page une se retrouve à droite. + + +@node Variables supplémentaires +@unnumberedsubsubsec Variables supplémentaires +@translationof Miscellaneous @code{\paper} variables + +@table @code + +@item page-spacing-weight +@funindex page-spacing-weight + +Cette variable définit l'importance relative des espacements entre la +page (verticalité) et la ligne (horizontalité). Une valeur élevée +privilégiera l'espacement au niveau de la page. La valeur par défaut +est de @code{10}. + +@item print-all-headers +@funindex print-all-headers + +Lorsque cette variable est activée, l'intégralité des champs d'entête +sera imprimée pour chaque bloc @code{\score}, plutôt que les seuls +champs @code{piece} et @code{opus}. La valeur par défaut +est @code{#f}. + +@item system-separator-markup +@funindex system-separator-markup + +Il s'agit en l'occurrence d'insérer un objet de type @emph{markup} entre +chaque système, comme on le voit dans nombre de partitions orchestrales. +Cette variable n'est pas définie par défaut. La commande +@code{\slashSeparator} -- définie dans le fichier +@file{ly/titling-init.ly} -- fournit un @emph{markup} relativement +courant : + +@lilypond[quote,verbatim,noragged-right,line-width=30\mm] +#(set-default-paper-size "a8") + +\book { + \paper { + system-separator-markup = \slashSeparator + } + \header { + tagline = ##f + } + \score { + \relative c'' { c1 \break c1 \break c1 } + } +} +@end lilypond + +@end table + +@seealso +Fichiers d'initialisation : +@file{ly/titling-init.ly}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + +@knownissues +L'entête par défaut, formé d'une seule ligne, est constitué du numéro de +page et du champ @code{instrument} contenu dans le bloc @code{\header}. + + +@node Mise en forme de la partition +@section Mise en forme de la partition +@translationof Score layout + +Nous allons voir ici les options du bloc @code{\layout}. Elles sont +plus particulièrement destinées à gérer la mise en forme de la +partition. + +@menu +* Le bloc \layout:: +* Définition de la taille de portée:: +@end menu + + +@node Le bloc \layout +@subsection Le bloc @code{\layout} +@translationof The @code{\layout} block + +@funindex \layout + +Alors que le bloc @code{\paper} définit le formatage des pages pour +l'intégralité du document, le bloc @code{\layout} s'occupe de la mise en +forme spécifique à la partition. La mise en forme de la musique peut +concerner toutes les partitions d'un même ouvrage, auquel cas un bloc +@code{\layout} indépendant se placera en tête de fichier. Dans le cas +où la mise en forme concerne une partition en particulier, un bloc +@code{\layout} se placera au sein du bloc @code{\score} en question. +Sont susceptibles d'apparaître dans un bloc @code{\layout} : + +@itemize +@item +la fonction Scheme @code{layout-set-staff-size}, + +@item +dans des blocs @code{\context}, les modifications apportées aux +différents contextes, et + +@item +les variables normalement attachées au bloc @code{\paper} qui +affecteront la mise en forme de la partition. + +@end itemize + +La fonction @code{layout-set-staff-size} fait l'objet de la rubrique +suivante, @ref{Définition de la taille de portée}. La modification des +contextes est abordée dans d'autres chapitres -- voir +@ref{Modification des greffons de contexte} et +@ref{Modification des réglages par défaut d'un contexte}. Les variables +du bloc @code{\paper} que l'on peut retrouver dans un bloc +@code{\layout} sont : + +@itemize + +@item +@code{line-width}, @code{ragged-right} et @code{ragged-last} +(voir @ref{Variables de marge et de largeur}) + +@item +@code{indent} et @code{short-indent} +(voir @ref{Variables d'indentation et de décalage}) + +@item +@code{system-count} +(voir @ref{Variables de gestion des sauts de ligne}) + +@end itemize + +Voici un exemple de bloc @code{\layout} : + +@example +\layout @{ + indent = 2\cm + \context @{ + \StaffGroup + \override StaffGrouper.staff-staff-spacing.basic-distance = #8 + @} + \context @{ + \Voice + \override TextScript.padding = #1 + \override Glissando.thickness = #3 + @} +@} +@end example + +Il est tout à fait possible que plusieurs blocs @code{\layout} +cohabitent en tant qu'expressions de niveau supérieur. Ceci se révèle +particulièrement utile lorsque différents réglages sont stockés dans des +fichiers séparés qui sont inclus au besoin. Lorsqu'un bloc +@code{\layout} est évalué, une copie de la configuration du +@code{\layout} actuel est réalisée en interne, augmentée des +aménagements apportés. Bien qu'on puisse considérer que le contenu des +différents blocs @code{\layout} se cumule, c'est la dernière adaptation +qui aura préséance en cas de situation conflictuelle -- cas typique +d'une même propriété modifiée dans différents blocs. + +Par exemple, placer le bloc suivant + +@example +\layout @{ + \context @{ + \Voice + \override TextScript.color = #magenta + \override Glissando.thickness = #1.5 + @} +@} +@end example + +après celui de l'exemple précédent aura pour effet de cumuler les +adaptations de @code{'padding} et @code{'color} pour l'objet +@code{TextScript}, mais la dernière adaptation apportée à la propriété +@code{'thickness} de @code{Glissando} remplace, ou masque, celle +précédemment établie. + +Les blocs @code{\layout} peuvent faire l'objet de variables, aux fins de +les utiliser ultérieurement. Ceci requiert toutefois une attention +particulière dans la mesure où cette manière de procéder n'est pas +équivalente à une définition complète et globale. + +Lorsque nous définissons la variable suivante, + +@example +layoutVariable = \layout @{ + \context @{ + \Voice + \override NoteHead.font-size = #4 + @} +@} +@end example + +qui contient une configuration de @code{\layout} avec +l'adaptation @code{NoteHead #'font-size}, cette combinaison n'est pas +enregistrée en tant que configuration courante. Notez bien que la +« configuration courante » est lue lorsque la variable est définie, non +lorsqu'elle est utilisée ; par voie de conséquence, le contenu de la +variable dépend de l'endroit où elle se trouve dans le code source. + +Notre variable peut alors être utilisée au sein d'un autre bloc +@code{\layout}, comme par exemple : + +@example +\layout @{ + \layoutVariable + \context @{ + \Voice + \override NoteHead.color = #red + @} +@} +@end example + +Un bloc @code{\layout} qui contient une variable comme ci-dessus, ne +recopie pas la configuration actuelle ; il utilise en fait le contenu de +@code{layoutVariable} en tant que configuration de base pour les +adaptations ultérieures, en conséquence de quoi toute modification +intervenant entre la définition et l'utilisation de la variable sera +perdue. + +Si @code{layoutVariable} est définie, ou rapatriée par un +@code{\indude}, juste avant d'être utilisée, son contenu devient la +configuration actuelle augmentée des adaptations que la variable +contient. Considérant l'exemple d'utilisation de @code{layoutVariable} +ci-dessus, le bloc @code{\layout} final contiendra donc : + +@example + TextScript #'padding = #1 + TextScript #'color = #magenta + Glissando #'thickness = #1.5 + NoteHead #'font-size = #4 + NoteHead #'color = #red +@end example + +ainsi que les adaptations de @code{indent} et @code{StaffGrouper}. + +Cependant, si la variable avait été définie bien avant le premier bloc +@code{\layout}, la configuration actuelle ne contiendrait que + +@example + NoteHead #' font-size= #4 % (écrit dans la définition de la variable) + NoteHead #' color = #red % (ajouté après l'utilisation de la variable) +@end example + +Une gestion attentive des variables de @code{\layout} se révèle être un +outil précieux dans la mise en forme des sources et le retour à une +configuration donnée. + +@seealso +Manuel de notation : +@ref{Modification des réglages par défaut d'un contexte}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Définition de la taille de portée +@subsection Définition de la taille de portée +@translationof Setting the staff size + +@cindex fonte, définition de la taille +@cindex portée, définition de la taille +@funindex layout file + +La @strong{taille de portée} @emph{(staff size)} est fixée par défaut à +20 points. Il existe deux manières de la modifier : + +La taille des portées peut se définir globalement pour toutes les +partitions d'un même fichier, ou plus précisément d'un bloc +@code{\book}, à l'aide de @code{set-global-staff-size}. + +@example +#(set-global-staff-size 14) +@end example + +@noindent +Ceci définit donc la hauteur des portées à 14 points par +défaut ; toutes les fontes seront ajustées en conséquence. + +Vous pouvez aussi spécifier une taille à une partition en particulier en +procédant comme ci-dessous : + +@example +\score@{ + @dots{} + \layout@{ + #(layout-set-staff-size 15) + @} +@} +@end example + +La fonte Feta fournit les symboles musicaux dans huit tailles +différentes. Chaque fonte correspond à une hauteur particulière de +portée ; les petites tailles comportent des symboles plus épais +pour être cohérent avec l'épaisseur relativement plus importante des +lignes de la portée. Le tableau suivant répertorie les différentes +tailles de police. + +@quotation +@multitable @columnfractions .15 .2 .22 .2 + +@item @b{nom de la fonte} +@tab @b{hauteur de portée (pt)} +@tab @b{hauteur de portée (mm)} +@tab @b{utilisation} + +@item feta11 +@tab 11,22 +@tab 3,9 +@tab format de poche + +@item feta13 +@tab 12,60 +@tab 4,4 +@tab + +@item feta14 +@tab 14,14 +@tab 5,0 +@tab + +@item feta16 +@tab 15,87 +@tab 5,6 +@tab + +@item feta18 +@tab 17,82 +@tab 6,3 +@tab carnet de chant + +@item feta20 +@tab 20 +@tab 7,0 +@tab partition standard + +@item feta23 +@tab 22,45 +@tab 7,9 +@tab + +@item feta26 +@tab 25,2 +@tab 8,9 +@tab +@c matériel de location moderne ? + +@end multitable +@end quotation + +Ces fontes sont disponibles dans toutes les tailles. La propriété de +contexte @code{fontSize} ainsi que la propriété de mise en forme +@code{staff-space} (voir @rinternals{StaffSymbol}) permettent d'ajuster +individuellement la taille de chaque portée. La taille de chacune des +portées est relative à la taille globale. + +@seealso +Manuel de notation : +@ref{Indication de la taille de fonte musicale}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + +@knownissues +@code{layout-set-staff-size} ne modifie en rien l'espacement entre les +lignes d'une portée. + + +@node Sauts +@section Sauts +@translationof Breaks + +@menu +* Sauts de ligne:: +* Sauts de page:: +* Optimisation des sauts de page:: +* Optimisation des tournes:: +* Minimisation des sauts de page:: +* Présentation en rouleau:: +* Sauts explicites:: +* Recours à une voix supplémentaire pour gérer les sauts:: +@end menu + + +@node Sauts de ligne +@subsection Sauts de ligne +@translationof Line breaking + +@cindex saut de ligne +@cindex ligne, passer à la suivante + +Les sauts de ligne sont normalement gérés de façon automatique. Ils +interviennent de telle sorte qu'une ligne ne soit ni trop resserrée, ni +trop aérée, et que des lignes consécutives aient à peu près la même +densité. + +Vous pouvez cependant insérer l'instruction @code{\break} à l'endroit où +vous le jugez utile pour @qq{forcer} le passage à la ligne suivante : + +@lilypond[quote,ragged-right,relative=2,verbatim] +c4 c c c | \break +c4 c c c | +@end lilypond + +Par défaut, un saut de ligne ne saurait intervenir au beau milieu d'une +mesure ; LilyPond vous le signalera par un message si tel était le +cas. Si d'aventure vous voulez forcer un saut de ligne en l'absence de +barre de mesure, vous devrez auparavant insérer une barre invisible -- à +l'aide de @code{\bar ""}. + +@lilypond[quote,ragged-right,relative=2,verbatim] +c4 c c +\bar "" \break +c | +c4 c c c | +@end lilypond + +LilyPond ignorera un @code{\break} placé sur une barre à la fin d'une +mesure dès lors que la précédente avait une note en suspend -- c'est +typiquement le cas lorsqu'un nolet est à cheval sur deux mesures. +L'instruction @code{\break} sera alors opérationnelle si vous avez +auparavant désactivé le @code{Forbid_line_break_engraver} du contexte +@code{Voice} concerné. Notez bien qu'en pareil cas, les sauts de ligne +forcés doivent être saisis au sein d'une expression polyphonique : + +@lilypond[quote,ragged-right,verbatim] +\new Voice \with { + \remove "Forbid_line_break_engraver" +} \relative c'' { + << + { c2. \times 2/3 { c4 c c } c2. | } + { s1 | \break s1 | } + >> +} +@end lilypond + +Selon le même principe, un saut de ligne ne peut intervenir alors qu'une +ligature s'étend sur deux mesures consécutives. Il faut en ce cas là +introduire la dérogation @w{@code{\override Beam.breakable = ##t}}. + +@lilypond[quote,ragged-right,relative=2,verbatim] +\override Beam.breakable = ##t +c2. c8[ c | \break +c8 c] c2. | +@end lilypond + +L'instruction opposée, @code{\noBreak}, interdira toute tentative de +saut de ligne à la fin de la mesure où elle est explicitée. + +LilyPond dispose de deux variables de base pour influencer l'espacement +au niveau des lignes. Toutes deux se définissent dans un bloc +@code{\layout}, @code{indent} réglant l'indentation de la première +ligne, et @code{line-width} la longueur des lignes. + +L'activation du commutateur @code{ragged-right} au sein du bloc +@code{\layout} aura pour effet de terminer les systèmes là où ils +prendraient fin normalement plutôt que de les étirer sur toute la +longueur de la ligne. Ceci est particulièrement utile pour de petits +fragments ou pour vérifier la densité induite par l'espacement naturel. + +@c TODO Check and add para on default for ragged-right + +Le commutateur @code{ragged-last} est équivalent à @code{ragged-right}, +à ceci près qu'il n'affecte que la dernière ligne de la pièce. + +@example +\layout @{ + indent = 0\mm + line-width = 150\mm + ragged-last = ##t +@} +@end example + +@cindex sauts de ligne réguliers +@cindex portée à quatre mesures + +L'utilisation conjointe de @code{\break} et de blancs dans une section +@code{\repeat} vous permettra de positionner des sauts de ligne à +intervalle régulier. Par exemple, les 28 mesures de ce qui suit, si +l'on est à 4/4, seront coupées toutes les quatre mesures, pas +ailleurs : + +@example +<< + \repeat unfold 7 @{ + s1 \noBreak s1 \noBreak + s1 \noBreak s1 \break + @} + @{ @var{et ici la musique@dots{}} @} +>> +@end example + +@predefined +@funindex \break +@code{\break}, +@funindex \noBreak +@code{\noBreak}. +@endpredefined + +@seealso +Manuel de notation : +@ref{Variables de gestion des sauts de ligne}. + +Référence des propriétés internes : +@rinternals{LineBreakEvent}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Sauts de page +@subsection Sauts de page +@translationof Page breaking + +La gestion automatique des sauts de page se contrôle à l'aide des +commandes @code{\pageBreak} et @code{\noPageBreak}. Ces commandes +fonctionnent de manière analogue à @code{\break} et @code{\noBreak} pour +les sauts de ligne et se placent donc au moment d'une barre de mesure. +Elles permettent de forcer, ou d'interdire, un saut de page à l'endroit +indiqué. Comme on peut s'y attendre, @code{\pageBreak} force le saut de +ligne. + +Les commandes @code{\pageBreak} et @code{\noPageBreak} peuvent se +trouver à des niveaux supérieurs, entre deux partitions ou +@emph{markups} de premier rang. + +Tout comme @code{ragged-right} et @code{ragged-last} qui permettent de +gérer la répartition horizontale, LilyPond dispose de commutateurs +équivalents au niveau de la verticalité : @code{ragged-bottom} et +@code{ragged-last-bottom}. Lorsqu'ils sont tous deux activés -- +affectés de @code{#t} -- les systèmes ne seront pas répartis sur les +pages y compris la dernière. Pour de plus amples détails, reportez-vous +à @ref{Variables d'espacement vertical fixe}. + +Les sauts de page sont générés par la fonction @code{page-breaking}. +LilyPond dispose de trois différents algorithmes en la matière : +@code{ly:optimal-breaking}, @code{ly:page-turn-breaking} et +@code{ly:minimal-breaking}. C'est @code{ly:optimal-breaking} qui est +activé par défaut, mais rien ne vous empêche d'en changer, par +l'intermédiaire du bloc @code{\paper} : + +@example +\paper @{ + page-breaking = #ly:page-turn-breaking +@} +@end example + +@funindex \bookpart + +Lorsqu'un ouvrage contient plusieurs partitions et un certain nombre de +pages, la gestion des sauts de page finit par devenir très gourmande, +tant au niveau du processeur que de la mémoire. Vous pouvez cependant +alléger la charge en recourant à des blocs @code{\bookpart} afin de +sectionner l'ouvrage que vous traitez ; les sauts de page seront +alors gérés individuellement au niveau de chacune des parties. Par +ailleurs, cela vous autorisera une gestion différente selon les +sections. + +@example +\bookpart @{ + \header @{ + subtitle = "Préface" + @} + \paper @{ + %% Pour une partie constituée principalement de texte + %% ly:minimal-breaking est plus judicieux. + page-breaking = #ly:minimal-breaking + @} + \markup @{ @dots{} @} + @dots{} +@} +\bookpart @{ + %% Cette partie étant purement musicale, + %% retour au style par défaut (optimal-breaking). + \header @{ + subtitle = "Premier mouvement" + @} + \score @{ @dots{} @} + @dots{} +@} +@end example + +@predefined +@funindex \pageBreak +@code{\pageBreak}, +@funindex \noPageBreak +@code{\noPageBreak}. +@endpredefined + +@seealso +Manuel de notation : +@ref{Variables de gestion des sauts de page}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Optimisation des sauts de page +@subsection Optimisation des sauts de page +@translationof Optimal page breaking + +@funindex ly:optimal-breaking + +LilyPond, pour déterminer où placer un saut de page, utilise par défaut +la fonction @code{ly:optimal-breaking}. Celle-ci tend à trouver une +rupture qui évite d'obtenir à la fois une page trop dense ou exagérément +aérée. Contrairement à la fonction @code{ly:page-turn-breaking}, elle +n'a aucune notion de ce qu'est une @qq{tourne}. + +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Optimisation des tournes +@subsection Optimisation des tournes +@translationof Optimal page turning + +@funindex ly:page-turn-breaking + +Aboutir à une configuration des sauts de page de telle sorte que les +pages de droite se terminent toujours par un silence devient souvent une +nécessité. En effet, l'exécutant pourra alors tourner la page sans +risquer de manquer des notes. La fonction @code{ly:page-turn-breaking} +tend à trouver une rupture qui évite d'obtenir à la fois une page trop +dense ou exagérément aérée, tout en tenant compte du fait qu'une tourne +ne saurait intervenir qu'à certains endroits. + +L'utilisation de cette fonction se fait en deux étapes. Il vous faut +tout d'abord l'activer au sein du bloc @code{\paper} comme indiqué à la +rubrique @ref{Sauts de page}. Vous devrez, dans un deuxième temps, +informer la fonction des endroits où les sauts de page sont permis. + +Cette deuxième étape se réalise de deux manières différentes. Vous +pouvez spécifier manuellement chaque tourne potentielle en insérant un +@code{\allowPageTurn} à l'endroit approprié de votre fichier source. + +Toutefois, cette option peut vite se révéler fastidieuse selon l'ampleur +de l'œuvre. Vous pouvez alors recourir au @code{Page_turn_engraver} que +vous mentionnerez dans un contexte de voix ou de portée. Ce graveur de +tournes recherchera dans le contexte en question les passages sans note. +Notez bien qu'il ne recherche pas des silences, mais l'absence de +notes ; autrement dit, il ne restera pas inactif dans le cadre +d'une portée polyphonique dont l'une des parties contiendrait des +silences. Lorsqu'il rencontre un fragment suffisamment long ne +contenant aucune note, il insère un @code{\allowPageTurn} à la barre +terminant ce fragment, à moins qu'il ne rencontre en chemin une +@qq{barre spéciale} -- telle une double barre -- auquel cas il y +déposera le @code{\allowPageTurn}. + +@funindex minimumPageTurnLength + +Le @code{Page_turn_engraver} examine la propriété de contexte +@code{minimumPageTurnLength} pour déterminer quelle doit être la +longueur d'un fragment sans note avant une tourne. La valeur par +défaut de @code{minimumPageTurnLength} est +@code{(ly:make-moment 1 1)}, soit une ronde, et s'ajuste de +la manière suivante : + +@example +\new Staff \with @{ \consists "Page_turn_engraver" @} +@{ + a4 b c d | + R1 | % une tourne peut se placer ici + a4 b c d | + \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2) + R1 | % il ne peut pas y avoir de tourne ici + a4 b r2 | + R1*2 | % une tourne peut se placer ici + a1 +@} +@end example + +@funindex minimumRepeatLengthForPageTurn + +Le @code{Page_turn_engraver} tient compte des reprises. C'est pourquoi +il ne permettra une tourne que dans le cas où il y aura suffisamment de +temps au début et à la fin de la reprise pour que l'exécutant ait le +temps de revenir à la page précédente. Le @code{Page_turn_engraver} est +même capable d'interdire un tourne dans le cas d'une reprise de courte +durée, ajustable au travers de la propriété de contexte +@code{minimumRepeatLengthForPageTurn}. + +Les commandes de tourne -- @code{\pageTurn}, @code{\noPageTurn} et +@code{\allowPageTurn} -- peuvent s'utiliser à des niveaux supérieurs, +entre des blocs @code{\score} ou des @emph{markups} de haut niveau. + +@predefined +@funindex \pageTurn +@code{\pageTurn}, +@funindex \noPageTurn +@code{\noPageTurn}, +@funindex \allowPageTurn +@code{\allowPageTurn}. +@endpredefined + +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + +@knownissues +Une partition ne devrait contenir qu'une seule instance du +@code{Page_turn_engraver}, au risque de les voir se contredire. + + +@node Minimisation des sauts de page +@subsection Minimisation des sauts de page +@translationof Minimal page breaking + +@funindex ly:minimal-breaking + +La fonction @code{ly:minimal-breaking} est celle qui réalise le moins de +calculs pour positionner les sauts de page. Elle mettra le plus de +systèmes possible sur une page avant de passer à la suivante. On peut +donc la préférer lorsque la partition s'étend sur beaucoup de pages ou +lorsque les autres fonctions de gestion des sauts de page ralentissent +nettement le traitement, sont trop gourmandes en mémoire ou qu'il y a +beaucoup de texte. Il suffit de la mentionner au sein du bloc +@code{\paper} : + +@example +\paper @{ + page-breaking = #ly:minimal-breaking +@} +@end example + +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Présentation en rouleau +@subsection Présentation en rouleau +@translationof One-line page breaking + +@funindex ly:one-line-breaking + +La fonction @code{ly:one-line-breaking} constitue un algorithme de +calcul des sauts de pages particulier en ceci que chaque partition fait +l'objet d'une page unique, d'une seule ligne. Cette fonctionnalité +s'affranchit de l'impression des titres et marges ; seule la partition +est affichée. + +La largeur de page est ajustée de telle sorte que la pièce la plus +longue tienne sur une seule ligne. En particulier, les variables +@code{paper-width}, @code{line-width} et @code{indent} du bloc +@code{\paper} seront ignorées ; les @code{left-margin} et +@code{right-margin} seront honorées. La hauteur de page ne sera pas +modifiée. + + +@node Sauts explicites +@subsection Sauts explicites +@translationof Explicit breaks + +Il arrive parfois que LilyPond rejette des @code{\break} ou des +@code{\pageBreak} explicites. Vous pouvez alors prendre le contrôle +avec ces deux instructions dérogatoires : + +@example +\override NonMusicalPaperColumn.line-break-permission = ##f +\override NonMusicalPaperColumn.page-break-permission = ##f +@end example + +Lorsque vous désactivez @code{line-break-permission}, LilyPond +ne passera à la ligne suivante qu'en présence d'un @code{\break} +explicite, et nulle part ailleurs. De la même façon, la désactivation +de @code{page-break-permission} aura pour conséquence que LilyPond ne +changera de page que lorsqu'il rencontrera un @code{\pageBreak}, et +nulle part ailleurs. + +@lilypond[quote,verbatim] +\paper { + indent = #0 + ragged-right = ##t + ragged-bottom = ##t +} + +musique = \relative c'' { c8 c c c } + +\score { + \new Staff { + \repeat unfold 2 { \musique } \break + \repeat unfold 4 { \musique } \break + \repeat unfold 6 { \musique } \break + \repeat unfold 8 { \musique } \pageBreak + \repeat unfold 8 { \musique } \break + \repeat unfold 6 { \musique } \break + \repeat unfold 4 { \musique } \break + \repeat unfold 2 { \musique } + } + \layout { + \context { + \Score + \override NonMusicalPaperColumn.line-break-permission = ##f + \override NonMusicalPaperColumn.page-break-permission = ##f + } + } +} +@end lilypond + +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Recours à une voix supplémentaire pour gérer les sauts +@subsection Recours à une voix supplémentaire pour gérer les sauts +@translationof Using an extra voice for breaks + +La plupart du temps, les informations concernant les sauts de ligne ou +de page se retrouvent directement au milieu des notes. + +@example +musique = \relative c'' @{ c4 c c c @} + +\score @{ + \new Staff @{ + \repeat unfold 2 @{ \musique @} \break + \repeat unfold 3 @{ \musique @} + @} +@} +@end example + +Bien que cela constitue un moyen aisé de saisir les commandes +@code{\break} et @code{\pageBreak}, les données musicales se retrouvent +mélangées à des informations qui concernent plutôt l'agencement de la +musique sur le papier. Vous pouvez tout à fait séparer ce qui est +purement musical et les informations concernant les sauts de ligne ou de +page en créant une voix supplémentaire dédiée. Cette voix spécifique +ne contiendra que des blancs -- des silences invisibles @code{\skip} --, +des @code{\break}, des @code{\pageBreak} et autres informations +concernant les ruptures. + +@lilypond[quote,verbatim] +music = \relative c'' { c4 c c c } + +\score { + \new Staff << + \new Voice { + s1 * 2 \break + s1 * 3 \break + s1 * 6 \break + s1 * 5 \break + } + \new Voice { + \repeat unfold 2 { \music } + \repeat unfold 3 { \music } + \repeat unfold 6 { \music } + \repeat unfold 5 { \music } + } + >> +} +@end lilypond + +Cette manière de procéder est tout à fait indiquée lorsque vous ajustez +les @code{line-break-system-details} et autres propriétés fort +intéressantes de @code{NonMusicalPaperColumnGrob}, comme vous pouvez +le voir au chapitre @ref{Espacement vertical}. + +@lilypond[quote,verbatim] +music = \relative c'' { c4 c c c } + +\score { + \new Staff << + \new Voice { + \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0)) + s1 * 2 \break + + \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 35)) + s1 * 3 \break + + \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 70)) + s1 * 6 \break + + \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 105)) + s1 * 5 \break + } + \new Voice { + \repeat unfold 2 { \music } + \repeat unfold 3 { \music } + \repeat unfold 6 { \music } + \repeat unfold 5 { \music } + } + >> +} +@end lilypond + +@seealso +Manuel de notation : +@ref{Espacement vertical}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + + +@node Espacement vertical +@section Espacement vertical +@translationof Vertical spacing + +@cindex vertical, espacement +@cindex espacement vertical + +L'espacement vertical dépend de trois éléments : la surface +disponible -- par exemple format de papier et marges --, l'espace qui +doit séparer les systèmes, et l'espace qui sépare les portées d'un même +système. + +@menu +* Espacement vertical au sein d'un système:: +* Positionnement explicite des portées et systèmes:: +* Résolution des collisions verticales:: +@end menu + + +@node Espacement vertical au sein d'un système +@subsection Espacement vertical au sein d'un système +@translationof Flexible vertical spacing within systems + +@cindex distance entre les portées +@cindex portées, espacement +@cindex espacement entre les portées +@cindex espacement au sein d'un système + +LilyPond dispose de trois différents mécanismes permettant de contrôler +l'espacement au sein d'un système selon trois catégories : + +@itemize + +@item +@emph{portées isolées}, + +@item +@emph{portées regroupées} (portées d'un même groupe, telles celles +d'un @code{ChoirStaff}, etc.), et + +@item +@emph{lignes de non-portée} (@code{Lyrics}, @code{ChordNames}, etc.). + +@end itemize + +@c TODO: Clarify this. This almost implies that non-staff lines +@c have NO effect on the spacing between staves. -mp + +La hauteur de chaque système se détermine en deux phases. Les portées +sont tout d'abord espacées selon la surface disponible. Puis les lignes +autres que des portées, comme les paroles ou les accords, sont réparties +entre les portées. + +Les paragraphes qui suivent traitent exclusivement de la manière de +gérer l'espacement entre les lignes d'un système -- portée musicale ou +non. Pour ce qui a trait aux espacements entre les systèmes, +mouvements, annotations et marge, ils sont contrôlés par des variables +attachées au bloc @code{\paper} et font l'objet du chapitre +@ref{Variables d'espacement vertical fluctuant}. + +@menu +* Propriétés d'espacement au sein d'un système:: +* Espacement de portées isolées:: +* Espacement de portées regroupées:: +* Espacement des lignes rattachées à des portées:: +@end menu + + +@node Propriétés d'espacement au sein d'un système +@unnumberedsubsubsec Propriétés d'espacement au sein d'un système +@translationof Within-system spacing properties + +L'espacement entre les portées est géré par deux jeux de propriétés +d'objet graphique (@emph{grob}). Le premier, associé à l'objet +graphique @code{VerticalAxisGroup}, est créé pour toute ligne de portée +ou de non-portée. Le second, associé à l'objet graphique +@code{StaffGrouper}, doit être explicitement créé pour un regroupement +de portées particulier. Les propriétés qui leur sont attachées sont +abordées en fin de section. + +Le nom de ces propriétés, sauf @code{staff-affinity}, suit le schéma +@code{@var{item1}-@var{item2}-spacing} -- @code{@var{item1}} et +@code{@var{item2}} étant les éléments à espacer. Notez bien que +@code{@var{item2}} n'est pas forcément placé au-dessous : c'est le +cas pour la propriété @code{nonstaff-relatedstaff-spacing} qui spécifie +l'espacement d'une ligne de non-portée alors que sa +@code{staff-affinity} a été déterminée à @code{UP}. + +Toutes ces distances sont mesurées entre les points de référence +respectifs des éléments considérés. +Le @i{point de référence} d'une portée est le centre vertical du +@code{StaffSymbol} -- la ligne médiane si @code{line-count} est impair, +l'interligne médian si @code{line-count} est pair. +Quant aux lignes rattachées à des portées -- lignes de non-portée -- le +tableau suivant présente le @i{point de référence} pour chacune +d'elles : + +@multitable {Ligne de non-portée} {Point de référence} +@headitem Ligne de non-portée @tab Point de référence +@item @code{ChordNames} @tab ligne de base +@item @code{NoteNames} @tab ligne de base +@item @code{Lyrics} @tab ligne de base +@item @code{Dynamics} @tab centre vertical +@item @code{FiguredBass} @tab point le plus haut +@item @code{FretBoards} @tab ligne supérieure +@end multitable + +En voici une représentation graphique : + +@c KEEP LY +@lilypond[quote,noragged-right,line-width=110\mm] +#(define zero-space '((padding . -inf.0) (basic-distance . 0))) + +alignToZero = \with { + \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #zero-space + \override VerticalAxisGroup.nonstaff-nonstaff-spacing = #zero-space +} +lowerCaseChords = \with { + chordNameLowercaseMinor = ##t +} +staffAffinityDown = \with { + \override VerticalAxisGroup.staff-affinity = #DOWN +} +labelContext = +#(define-music-function + (parser location context) + (string?) + #{ s1*0^\markup { \typewriter #context } #}) + +\layout { + \context { \Dynamics \alignToZero } + \context { \FiguredBass \alignToZero } + \context { \Lyrics \alignToZero } + \context { \NoteNames \alignToZero \staffAffinityDown } + \context { \ChordNames \alignToZero + \staffAffinityDown + \lowerCaseChords } + \context { \FretBoards \alignToZero \staffAffinityDown } + \context { \Score + \override BarLine.stencil = ##f + \override DynamicText.self-alignment-X = #-1 + \override FretBoard.X-offset = #1.75 + \override InstrumentName.minimum-Y-extent = #'(-2 . 2) + \override InstrumentName.extra-offset = #'(0 . -0.5) + \override TextScript.minimum-Y-extent = #'(-2 . 3) + \override TimeSignature.stencil = ##f + } +} + +%% Contextes dont le point de référence est la ligne de base : +%% ChordNames, NoteNames, et Lyrics +<< + \new ChordNames { \chords { g1:m } } + \new NoteNames { s1 | g1 | } + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"ligne de base (baseline) " + \textLengthOn + \labelContext "ChordNames" s1 | + \labelContext "NoteNames" s1 | + \labelContext "Lyrics" s1 | + } + \new Lyrics { \lyrics { \skip 1*2 | ghijk1 | } } +>> + +%% Le point de référence de Dynamics est le milieu de la ligne +<< + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"centre vertical " + \labelContext "Dynamics" s1*3 + } + \new Dynamics { s1\mp s\fp } +>> + +%% Le point de référence de FiguredBass est son point le plus haut +<< + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"point le plus haut " + \labelContext "FiguredBass" s1 + } + \new FiguredBass { \figuremode { <6 5>1 } } +>> + +%% Le point de référence de FretBoards est la ligne du haut +\include "predefined-guitar-fretboards.ly" +<< + \new FretBoards { \chordmode { e1 } } + \new RhythmicStaff { + \set RhythmicStaff.instrumentName = #"ligne du haut " + \labelContext "FretBoards " s1 + } +>> +@end lilypond + +Hormis @code{staff-affinity} -- propriété attachée au @emph{grob} +@code{VerticalAxisGroup} --, chacune de ces propriétés est enregistrée +sous la forme d'une liste associative dont la structure est +identique à celle des variables du bloc @code{\paper} que nous avons +examinées au chapitre +@ref{Variables d'espacement vertical fluctuant}. Les particularités en +matière de modification d'une liste associative font l'objet d'un +@rusernamed{Modification de listes associatives,chapitre particulier}. +Les propriétés des objets graphiques se règlent avec un @code{\override} +mentionné dans un bloc @code{\score} ou @code{\layout}, pas dans le bloc +@code{\paper}. + +L'exemple suivant illustre deux façons de modifier une liste +associative. La première déclaration n'agit que sur une seule clé, +alors que la seconde redéfinit la propriété dans son intégralité. + +@example +\new Staff \with @{ + \override VerticalAxisGroup.staff-staff-spacing.basic-distance = #10 +@} @{ @dots{} @} + +\new Staff \with @{ + \override VerticalAxisGroup.staff-staff-spacing = + #'(('basic-distance . 10) + (minimum-distance . 9) + (padding . 1) + (stretchability . 10)) +@} @{ @dots{} @} +@end example + +La modification d'un espacement au niveau global se mentionne au sein du +bloc @code{\layout} : + +@example +\layout @{ + \context @{ + \Staff + \override VerticalAxisGroup.staff-staff-spacing.basic-distance = #10 + @} +@} +@end example + +Les réglages concernant les propriétés d'espacement vertical des objets +graphiques sont répertoriées aux chapitres +@rinternals{VerticalAxisGroup} et @rinternals{StaffGrouper}. +Les propriétés relatives aux lignes de non-portée sont répertoriées +selon la définition de leur contexte dans la +@rinternalsnamed{Contexts,Référence des propriétés internes}. + + +@subsubheading Propriétés de l'objet @code{VerticalAxisGroup} +@c VO Properties of the @code{VerticalAxisGroup} grob + +Les propriétés de l'objet @code{VerticalAxisGroup} s'ajustent à l'aide +d'un @code{\override} au niveau d'un contexte @code{Staff} (ou son +équivalent). + +@table @code +@item staff-staff-spacing +Il s'agit de la distance entre la portée en cours et la portée qui suit +au sein du même regroupement, qu'il y ait ou non une ligne de non-portée +(@code{Lyrics} ou autre) entre les deux. Cette propriété ne s'applique +pas à la dernière portée d'un système. + +En tout état de cause, la fonction Scheme @code{staff-staff-spacing} +d'un @code{VerticalAxisGroup} affectera les propriétés du +@code{StaffGrouper} si la portée est incluse dans un regroupement ; +elle s'appliquera au @code{default-staff-staff-spacing} en l'absence de +regroupement. Les portées peuvent donc s'aligner différemment selon +qu'elles sont ou non regroupées. Pour obtenir le même espacement sans +tenir compte des éventuels regroupements, cette fonction peut faire +place à une complète redéfinition des espacements fluctuants à l'aide de +règles dérogatoires comme vu précédemment. + +@item default-staff-staff-spacing +Il s'agit de la distance qui s'appliquera par défaut aux portées +isolées, à moins que @code{staff-staff-spacing} n'ait été redéfini +explicitement par un @code{\override}. + +@item staff-affinity +Il s'agit de la direction -- @code{UP}, @code{DOWN} ou @code{CENTER} -- +que prendra une ligne de non-portée pour aller s'accoler aux portées +adjacentes . Si vous lui attribuez @code{CENTER}, cette ligne de +non-portée ira se placer à équidistance entre les portées qui +l'encadrent, tout en tenant compte des éventuels risques de collision et +des autres contraintes d'espacement. Des lignes de non-portée +adjacentes devraient avoir une @code{staff-affinity} allant de haut en +bas -- autrement dit, pas de @code{UP} après un @code{DOWN}. +Une ligne de non-portée en dessous d'un système devrait avoir sa +@code{staff-affinity} définie à @code{UP}. De la même manière, lorsque +cette ligne surplombe un système, sa @code{staff-affinity} devrait être +définie à @code{DOWN}. Prenez garde à la valeur que vous affectez à +@code{staff-affinity} : si vous affectez la valeur @code{#f} à +une ligne de non-portée, cette ligne sera considérée comme étant une +portée ; à l'inverse, utiliser la propriété @code{staff-affinity} +pour une portée lui fera perdre cette qualité. + +@c TODO: verify last clause below ("even if other...") + +@item nonstaff-relatedstaff-spacing +Il s'agit de la distance entre la ligne de non-portée en cours et la +portée la plus proche selon la @code{staff-affinity}, à la double +condition qu'il n'y ait pas déjà une autre ligne de non-portée et que la +valeur de @code{staff-affinity} soit @code{UP} ou @code{DOWN}. Lorsque +la valeur de @code{staff-affinity} est égale à @code{CENTER}, la valeur +de @code{nonstaff-relatedstaff-spacing} servira à centrer la ligne de +non-portée entre les deux portées adjacentes même si une autre +non-portée est présente (quelque soit le côté). + +@item nonstaff-nonstaff-spacing +Il s'agit de la distance entre deux lignes de non-portée selon +l'orientation définie par @code{staff-affinity} et dès lors qu'elles ont +la même orientation. Bien entendu, ceci ne peut concerner que les +valeurs @code{UP} et @code{DOWN} de @code{staff-affinity}. + +@item nonstaff-unrelatedstaff-spacing +Il s'agit de la distance entre une ligne de non-portée et la portée à +l'opposé de l'orientation adoptée, à la double condition qu'il n'y ait +pas déjà une autre ligne de non-portée et que la valeur de +@code{staff-affinity} soit @code{UP} ou @code{DOWN}. Cette propriété +trouve toute sa légitimité pour décaler une ligne de @code{Lyrics} de la +portée à laquelle elle ne correspond pas. +@end table + + +@subsubheading Propriétés de l'objet @code{StaffGrouper} +@c VO Properties of the @code{StaffGrouper} grob + +Les propriétés de l'objet @code{StaffGrouper} s'ajustent à l'aide +d'un @code{\override} au niveau d'un contexte @code{StaffGroup} (ou son +équivalent). + +@table @code +@item staff-staff-spacing +Il s'agit de la distance entre deux portées consécutives d'un même +système. La propriété @code{staff-staff-spacing} de l'objet +@code{VerticalAxisGroup} d'une portée en particulier peut se redéfinir à +l'aide de règles dérogatoires. + +@item staffgroup-staff-spacing +Il s'agit de la distance entre la dernière portée d'un regroupement et +la portée suivante, au sein d'un même système, y compris lorsqu'une ou +plusieurs lignes de non-portée (tel @code{Lyrics}) s'insèrent entre les +deux. Cette propriété ne concerne pas la dernière portée d'un système. +Dans le cas où la propriété @code{staff-staff-spacing} d'une portée du +regroupement a été ajustée au niveau de son propre +@code{VerticalAxisGroup}, cette dernière aura préséance. +@end table + +@seealso +Fichiers d'initialisation : +@file{ly/engraver-init.ly}, +@file{scm/define-grobs.scm}. + +Référence des propriétés internes : +@rinternals{Contexts}, +@rinternals{VerticalAxisGroup}, +@rinternals{StaffGrouper}. + + +@node Espacement de portées isolées +@unnumberedsubsubsec Espacement de portées isolées +@translationof Spacing of ungrouped staves + +Les @code{Staff}, @code{DrumStaff}, @code{TabStaff} entre autres sont +des contextes de @qq{portée} pouvant contenir plusieurs voix, mais pas +une portée. + +L'espacement de ces @i{portées isolées} est géré par les propriétés +suivantes : + +@itemize +@item Propriétés du @code{VerticalAxisGroup} : +@itemize +@item @code{default-staff-staff-spacing} +@item @code{staff-staff-spacing} +@end itemize +@end itemize + +Ces propriétés d'objet graphique sont expliquées une à une au chapitre +@ref{Propriétés d'espacement au sein d'un système}. + +Certaines propriétés supplémentaires s'appliqueront dès lors que +ces portées sont regroupées -- voir +@ref{Espacement de portées regroupées}. + +L'exemple suivant illustre la manière de gérer l'espacement de portées +isolées à l'aide de la propriété @code{default-staff-staff-spacing}. +Les mêmes règles appliquées de manière dérogatoire au +@code{staff-staff-spacing} produiront les mêmes effets, y compris au +sein de regroupements. + +@lilypond[verbatim,quote,staffsize=16] +\layout { + \context { + \Staff + \override VerticalAxisGroup.default-staff-staff-spacing = + #'((basic-distance . 8) + (minimum-distance . 7) + (padding . 1)) + } +} + +<< + % The very low note here needs more room than 'basic-distance + % can provide, so the distance between this staff and the next + % is determined by 'padding. + \new Staff { b,2 r | } + + % Here, 'basic-distance provides enough room, and there is no + % need to compress the space (towards 'minimum-distance) to make + % room for anything else on the page, so the distance between + % this staff and the next is determined by 'basic-distance. + \new Staff { \clef bass g2 r | } + + % By setting 'padding to a negative value, staves can be made to + % collide. The lowest acceptable value for 'basic-distance is 0. + \new Staff \with { + \override VerticalAxisGroup.default-staff-staff-spacing = + #'((basic-distance . 3.5) + (padding . -10)) + } { \clef bass g2 r | } + \new Staff { \clef bass g2 r | } +>> +@end lilypond + +@seealso +Fichiers d'initialisation : +@file{scm/define-grobs.scm}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + +Référence des propriétés internes : +@rinternals{VerticalAxisGroup}. + + +@node Espacement de portées regroupées +@unnumberedsubsubsec Espacement de portées regroupées +@translationof Spacing of grouped staves + +Dans les partitions orchestrales ou de grande ampleur, il arrive +souvent que des portées soient regroupées. L'espacement est alors plus +important entre deux regroupements qu'entre les portées d'un même +groupe. + +Les @i{regroupements de portées} tels le @code{StaffGroup} ou le +@code{ChoirStaff} sont des contextes qui peuvent contenir simultanément +une ou plusieurs portées. + +L'espacement entre les portées d'un même regroupement est géré par les +propriétés suivantes : + +@itemize +@item Propriétés du @code{VerticalAxisGroup} : +@itemize +@item @code{staff-staff-spacing} +@end itemize +@item Propriétés du @code{StaffGrouper} : +@itemize +@item @code{staff-staff-spacing} +@item @code{staffgroup-staff-spacing} +@end itemize +@end itemize + +Ces propriétés d'objet graphique sont expliquées une à une au chapitre +@ref{Propriétés d'espacement au sein d'un système}. + +L'exemple suivant illustre la manière de gérer l'espacement de portées +regroupées, à l'aide des propriétés de l'objet graphique +@code{StaffGrouper} : + +@lilypond[verbatim,quote,staffsize=16] +\layout { + \context { + \Score + \override StaffGrouper.staff-staff-spacing.padding = #0 + \override StaffGrouper.staff-staff-spacing.basic-distance = #1 + } +} + +<< + \new PianoStaff \with { + \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20 + } << + \new Staff { c'1 } + \new Staff { c'1 } + >> + + \new StaffGroup << + \new Staff { c'1 } + \new Staff { c'1 } + >> +>> +@end lilypond + + +@seealso +Fichiers d'initialisation : +@file{scm/define-grobs.scm}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + +Référence des propriétés internes: +@rinternals{VerticalAxisGroup}, +@rinternals{StaffGrouper}. + + +@node Espacement des lignes rattachées à des portées +@unnumberedsubsubsec Espacement des lignes rattachées à des portées +@translationof Spacing of non-staff lines + +Les @i{lignes de non-portée}, comme les @code{Lyrics} ou les +@code{ChordNames} sont des contextes dont les objets de rendu sont +gravés à l'instar des portées -- une ligne horizontale dans un système. +En fait, les lignes de non-portée sont des contextes qui vont créer un +objet de rendu @code{VerticalAxisGroup}. + +L'espacement des lignes de non-portée est géré par les propriétés +suivantes : + +@itemize +@item Propriétés du @code{VerticalAxisGroup} : +@itemize +@item @code{staff-affinity} +@item @code{nonstaff-relatedstaff-spacing} +@item @code{nonstaff-nonstaff-spacing} +@item @code{nonstaff-unrelatedstaff-spacing} +@end itemize +@end itemize + +Ces propriétés d'objet graphique sont expliquées une à une au chapitre +@ref{Propriétés d'espacement au sein d'un système}. + +L'exemple suivant utilise la propriété @code{nonstaff-nonstaff-spacing} +pour gérer l'espacement entre des lignes consécutives de non-portée. +Vous noterez que la valeur élevée attribuée à la clé +@code{stretchability} permet aux paroles de s'étirer plus que de raison. + +@lilypond[verbatim,quote,staffsize=16] +\layout { + \context { + \Lyrics + \override VerticalAxisGroup.nonstaff-nonstaff-spacing.stretchability = #1000 + } +} + +\new StaffGroup +<< + \new Staff \with { + \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 30)) + } { c'1 } + \new Lyrics \with { + \override VerticalAxisGroup.staff-affinity = #UP + } \lyricmode { up } + \new Lyrics \with { + \override VerticalAxisGroup.staff-affinity = #CENTER + } \lyricmode { center } + \new Lyrics \with { + \override VerticalAxisGroup.staff-affinity = #DOWN + } \lyricmode { down } + \new Staff { c'1 } +>> +@end lilypond + +@seealso +Fichiers d'initialisation : +@file{ly/engraver-init.ly}, +@file{scm/define-grobs.scm}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + +@c @lsr{spacing,page-spacing.ly}, +@c @lsr{spacing,alignment-vertical-spacing.ly}. + +Référence des propriétés internes : +@rinternals{Contexts}, +@rinternals{VerticalAxisGroup}. + + +@node Positionnement explicite des portées et systèmes +@subsection Positionnement explicite des portées et systèmes +@translationof Explicit staff and system positioning + +Pour bien comprendre comment fonctionnent les réglages de +@code{VerticalAxisGroup} et de @code{\paper} abordés dans les deux +rubriques précédentes, rien ne vaut une collection d'exemples illustrant +les différentes mises au point du décalage vertical appliqué aux portées +et systèmes distribués sur une page. + +Une autre approche de l'espacement vertical est le recours à +@code{NonMusicalPaperColumn #'line-break-system-details}. Alors que +@code{VerticalAxisGroup} et @code{\paper} gèrent un décalage vertical, +@code{NonMusicalPaperColumn #'line-break-system-details} spécifiera le +positionnement vertical absolu sur la page. + +@code{NonMusicalPaperColumn #'line-break-system-details} prend en charge +une liste associative de trois mises au point : + +@itemize +@item @code{X-offset} +@item @code{Y-offset} +@item @code{alignment-distances} +@end itemize + +Les dérogations en matière d'objet graphique, y compris celles +concernant les @code{NonMusicalPaperColumn} ci-dessus, peuvent se placer +à trois différents endroits de votre fichier source : + +@itemize +@item directement au beau milieu des notes +@item au sein d'un bloc @code{\context} +@item dans un bloc @code{\with} +@end itemize + +Le réglage de @code{NonMusicalPaperColumn} s'effectue à l'aide d'une +simple commande @code{\override} au sein d'un bloc @code{\context} ou +@code{\with}. Dans le cas ou il est stipulé au fil des notes, c'est la +commande spécifique @code{\overrideProperty} qui doit intervenir. Voici +quelques exemples de réglages de @code{NonMusicalPaperColumn} à l'aide +de la commande @code{\overrideProperty} : + +@example +\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20)) + +\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40)) + +\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20) + (Y-offset . 40)) + +\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((alignment-distances . (15))) + +\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20) + (Y-offset . 40) + (alignment-distances . (15))) +@end example + +Nous allons maintenant voir ces différents réglages en action. +Commençons par examiner un exemple dépourvu de toute mise au point. + +@c \book { } is required in these examples to ensure the spacing +@c overrides can be seen between systems. -np + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + s1*5 \break + s1*5 \break + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +Cette partition isole les informations de saut de ligne ou de page dans +une voix spécifique. La mise en forme est ainsi séparée des événements +musicaux ; ceci nous permettra d'y voir plus clair au fur et à +mesure que nous avancerons. Pour plus de précisions, relisez +@ref{Recours à une voix supplémentaire pour gérer les sauts}. + +Les @code{\break} explicites répartissent la musique en lignes de cinq +mesures chacune. L'espacement vertical est celui que LilyPond attribue +par défaut. Nous pouvons, afin de fixer explicitement le point +d'attache vertical de chacun des systèmes, définir un doublet +@code{Y-offset} en tant qu'attribut du @code{line-break-system-details} +de l'objet @code{NonMusicalPaperColumn} : + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0)) + s1*5 \break + \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40)) + s1*5 \break + \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 80)) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +Vous aurez remarqué que nous n'avons déterminé qu'une seule valeur, même +si la liste associative de @code{line-break-system-details} peut en +comporter un certain nombre. Vous aurez aussi noté que la propriété +@code{Y-offset} détermine ici le point de départ de chacun des systèmes +de la page. + +Maintenant que chaque système est explicitement positionné, nous pouvons +jouer sur la distance séparant les portées de chacun des systèmes, grâce +à la sous-propriété @code{alignment-distances} de +@code{line-break-system-details}. + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 20) + (alignment-distances . (15))) + s1*5 \break + \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60) + (alignment-distances . (15))) + s1*5 \break + \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100) + (alignment-distances . (15))) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new Staff { + \repeat unfold 15 { d'4 d' d' d' } + } + >> + } +} +@end lilypond + +Nous avons maintenant assigné deux valeurs différentes à l'attribut +@code{line-break-system-details} de l'objet +@code{NonMusicalPaperColumn}. @code{line-break-system-details} pourrait +prendre bien d'autres paramètres d'espacement, y compris un doublet +@code{X-offset}, mais nous n'avons utilisé que @code{Y-offset} et +@code{alignment-distances} pour contrôler le positionnement de chaque +système et de chaque portée. Vous noterez enfin que +@code{alignment-distances} traite le positionnement des portées, non +d'un regroupement de portées. + +@lilypond[verbatim,quote,staffsize=16] +\header { tagline = ##f } +\paper { left-margin = 0\mm } +\book { + \score { + << + \new Staff << + \new Voice { + \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0) + (alignment-distances . (30 10))) + s1*5 \break + \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60) + (alignment-distances . (10 10))) + s1*5 \break + \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100) + (alignment-distances . (10 30))) + s1*5 \break + } + \new Voice { \repeat unfold 15 { c'4 c' c' c' } } + >> + \new StaffGroup << + \new Staff { \repeat unfold 15 { d'4 d' d' d' } } + \new Staff { \repeat unfold 15 { e'4 e' e' e' } } + >> + >> + } +} +@end lilypond -@untranslated +Quelques points à prendre en considération : +@itemize +@item +Lorsque vous utilisez @code{alignment-distances}, les paroles et +autres lignes de non-portée ne comptent pas pour une portée. -@node Mise en forme de la musique -@section Mise en forme de la musique -@translationof Music layout @c external +@item +Les nombres fournis à @code{X-offset}, @code{Y-offset} et +@code{alignment-distances} sont considérés comme des multiples de la +distance entre des portées adjacentes. Des valeurs positives remontent +les portées et paroles, des valeurs négatives les descendent. -@untranslated +@item +Dans la mesure où @code{NonMusicalPaperColumn #'line-break-system-details} +permet de positionner systèmes et portées n'importe où sur une page, +vous pourriez être en contradiction avec les dimensionnements de la +feuille ou bien aboutir à des surimpressions. Soyez donc raisonnable +quant aux différentes valeurs que vous affectez à ces réglages. +@end itemize -@menu -* Définition de la taille de portée:: -* Mise en forme de la partition:: -@end menu +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. -@node Définition de la taille de portée -@subsection Définition de la taille de portée -@translationof Setting the staff size @c external -@untranslated +@node Résolution des collisions verticales +@subsection Résolution des collisions verticales +@translationof Vertical collision avoidance + +@funindex outside-staff-priority +@funindex outside-staff-padding +@funindex outside-staff-horizontal-padding + +Vous savez de manière intuitive qu'un certain nombre d'objets en +matière de notation musicale appartiennent à la portée, et que +d'autres se placent en dehors de la portée. Entre autres objets +externes, nous avons les marques repères, les textes et les +nuances ; nous les appellerons @qq{objets extérieurs à la portée}. +La règle adoptée par LilyPond pour positionner verticalement ces +objets extérieurs consiste à les placer au plus près de la portée +tout en prenant garde d'éviter qu'il y ait chevauchement. + +LilyPond utilise la propriété @code{outside-staff-priority} afin de +déterminer si un objet est ou non un objet extérieur à la portée : +lorsque la valeur de @code{outside-staff-priority} est numérique, il +s'agit d'un objet extérieur à la portée. De plus, la propriété +@code{outside-staff-priority} indique à LilyPond l'ordre dans lequel ces +objets doivent être disposés. + +Tout d'abord, LilyPond dispose tous les objets qui ne sont pas externes. +Les objets extérieurs à la portée sont alors triés selon l'ordre +croissant de leur @code{outside-staff-priority}. Enfin, LilyPond prend +chacun des ces objets et les positionne de telle sorte qu'il n'entrent +pas en collision avec ceux qui on déjà été placés. Autrement dit, +lorsque deux objets devraient se placer au même endroit, celui dont la +@code{outside-staff-priority} est la plus faible sera disposé au plus +près de la portée. + +@lilypond[quote,ragged-right,relative=2,verbatim] +c4_"Text"\pp +r2. +\once \override TextScript.outside-staff-priority = #1 +c4_"Text"\pp % this time the text will be closer to the staff +r2. +% by setting outside-staff-priority to a non-number, +% we disable the automatic collision avoidance +\once \override TextScript.outside-staff-priority = ##f +\once \override DynamicLineSpanner.outside-staff-priority = ##f +c4_"Text"\pp % now they will collide +@end lilypond +Le décalage vertical entre un objet extérieur à la portée et celui qui +le précède se contrôle par la propriété @code{outside-staff-padding}. -@node Mise en forme de la partition -@subsection Mise en forme de la partition -@translationof Score layout @c external +@c KEEP LY +@lilypond[quote,ragged-right,relative=2,verbatim,staffsize=18] +\once \override TextScript.outside-staff-padding = #0 +a'^"Ce texte est placé au plus près de la note" +\once \override TextScript.outside-staff-padding = #3 +c^"Ce texte est décalé par rapport au texte précédent" +c^"Ce texte est accolé au texte précédent" +@end lilypond -@untranslated +Par défaut, les objets extérieurs à la portée sont positionnés en +évitant les collisions horizontales avec des objets précédemment +positionnés. Ceci peut cependant générer des situations où des objets +se trouvent horizontalement trop proches. L'espacement vertical entre +les portées peut dans une certaine mesure permettre de mieux intercaler +les objets extérieurs à la portée. La propriété +@code{outside-staff-horizontal-padding} repoussera verticalement un +objet pour éviter ce genre de situation. + +@lilypond[quote,ragged-right,relative=2,verbatim] +% the markup is too close to the following note +c4^"Text" +c4 +c''2 +% setting outside-staff-horizontal-padding fixes this +R1 +\once \override TextScript.outside-staff-horizontal-padding = #1 +c,,4^"Text" +c4 +c''2 +@end lilypond +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. -@node Sauts -@section Sauts -@translationof Breaks @c external -@untranslated +@node Espacement horizontal +@section Espacement horizontal +@translationof Horizontal spacing +@cindex horizontal, espacement +@cindex espacement horizontal @menu -* Sauts de ligne:: -* Sauts de page:: -* Optimisation des sauts de page:: -* Optimisation des tournes:: -* Minimisation des sauts de page:: -* Sauts explicites:: -* Recours à une voix supplémentaire pour gérer les sauts:: +* Généralités sur l'espacement horizontal:: +* Changement d'espacement en cours de partition:: +* Modification de l'espacement horizontal:: +* Longueur de ligne:: +* Notation proportionnelle:: @end menu -@node Sauts de ligne -@subsection Sauts de ligne -@translationof Line breaking @c external -@untranslated +@node Généralités sur l'espacement horizontal +@subsection Généralités sur l'espacement horizontal +@translationof Horizontal spacing overview + +Le moteur d'espacement traduit les différences de durée en distances +étirables (@emph{springs} pour ressorts) de différentes longueurs. Des +durées importantes prennent ainsi plus de place que des durées moins +longues. Les durées les plus courtes se verront attribuer un espace +fixe, contrôlé par la propriété @code{shortest-duration-space} de +l'objet @rinternals{SpacingSpanner}. Au plus la durée s'allonge, au +plus elle prendra d'espace : le doublement d'une durée attribuera à +la note un espace fixé d'après la propriété @code{spacing-increment}. + +L'exemple suivant comporte des blanches, des noires et un certain nombre +de croches. La croche est suivie d'un espace de la largeur d'une tête +de note ; pour la noire , cet espace est de deux têtes ; il +est de trois pour la blanche. + +@lilypond[quote,verbatim,relative=1] +c2 c4. c8 c4. c8 c4. c8 c8 +c8 c4 c4 c4 +@end lilypond +@code{spacing-increment} est normalement défini à 1,2 espace de +portée -- ce qui correspond à peu près à la largeur d'une tête de note +-- et @code{shortest-duration-space} à 2,0. La note la plus courte +s'étendra donc sur l'équivalent de 2,4 espaces de portée (2 fois le +@code{spacing-increment}). Le point de départ de cet espace se situe à +l'extrémité gauche du symbole ; la note la plus courte est donc +suivie en général d'un espace égal à la largeur d'une tête de note. + +Si l'on suit à la lettre ce qui précède, ajouter une simple triple +croche à une partition qui comporte déjà des croches et des doubles +augmentera considérablement son volume : la durée la plus +courte n'est plus la double mais la triple croche, ce qui aura +pour conséquence d'ajouter une largeur de tête à chacune des notes. +Pour s'affranchir de cet effet quelque peu pervers, la durée la plus +courte prise en considération au niveau de l'espacement n'est pas la +note la plus brève de la partition, mais celle qui apparaît le plus +souvent. + +La courte durée la plus fréquente est déterminée à partir de la note la +plus courte de chaque mesure. C'est elle qui servira de base pour +l'espacement, à cette nuance près que la plus courte durée ne saurait +être strictement supérieure à la croche. Cette @qq{durée de référence} +est d'ailleurs affichée lorsque vous lancez @code{lilypond} avec l'option +@option{--verbose}. + +Ces durées peuvent être adaptées. Vous pouvez définir la durée de base +pour les espacements grâce à la propriété +@code{common-shortest-duration} de l'objet @rinternals{SpacingSpanner}. +La durée maximale de cet étalon, normalement la croche, est gérée par la +propriété @code{base-shortest-duration}. + +@funindex common-shortest-duration +@funindex base-shortest-duration +@funindex stem-spacing-correction +@funindex spacing + +Les notes plus courtes que la note témoin sont suivies d'un espace +proportionnel à la durée témoin. Si donc nous ajoutions quelques +doubles croches à l'exemple précédent, elles seraient suivies d'une +demie largeur de tête : + +@lilypond[quote,verbatim,relative=2] +c2 c4. c8 c4. c16[ c] c4. c8 c8 c8 c4 c4 c4 +@end lilypond -@node Sauts de page -@subsection Sauts de page -@translationof Page breaking @c external +Dans notre @emph{Essai sur la gravure musicale automatisée}, nous avons +vu comment la direction des hampes peut influencer l'espacement -- voir +@ressay{Espacement}. Ceci est contrôlé par la propriété +@code{stem-spacing-correction} de l'objet @rinternals{NoteSpacing}, créé +pour chaque contexte @rinternals{Voice}. L'objet +@rinternals{StaffSpacing}, généré au niveau d'un contexte @code{Staff}, +possède une même propriété qui contrôlera l'espacement hampe-barre de +mesure. L'exemple suivant montre ces adaptations, tout d'abord selon +les réglages par défaut, puis avec des corrections forcées. + +@lilypond[quote,ragged-right] +{ + c'4 e''4 e'4 b'4 | + b'4 e''4 b'4 e''4 | + \override Staff.NoteSpacing.stem-spacing-correction = #1.5 + \override Staff.StaffSpacing.stem-spacing-correction = #1.5 + c'4 e''4 e'4 b'4 | + b'4 e''4 b'4 e''4 | +} +@end lilypond -@untranslated +L'espacement spécifique à la notation proportionnelle fait l'objet d'une +@rusernamed{Notation proportionnelle,rubrique dédiée}. +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. + +Essai sur la gravure musicale automatisée : +@ressay{Espacement}. + +Référence des propriétés internes : +@rinternals{SpacingSpanner}, +@rinternals{NoteSpacing}, +@rinternals{StaffSpacing}, +@rinternals{NonMusicalPaperColumn}. + +@knownissues +Il n'existe pas de mécanisme simple et efficace qui permette de +forcer manuellement l'espacement. La solution ci-dessous permet +cependant @qq{d'aérer} artificiellement une partition ; il vous +suffit d'ajuster la valeur du décalage @emph{(padding)} autant que de +besoin. +@example + \override Score.NonMusicalPaperColumn.padding = #10 +@end example -@node Optimisation des sauts de page -@subsection Optimisation des sauts de page -@translationof Optimal page breaking @c external +Il n'y a aucun moyen de diminuer l'espacement. -@untranslated +@node Changement d'espacement en cours de partition +@subsection Changement d'espacement en cours de partition +@translationof New spacing area -@node Optimisation des tournes -@subsection Optimisation des tournes -@translationof Optimal page turning @c external +Il arrive, au cours d'un même mouvement, qu'une nouvelle partie modifie +substantiellement la notion de valeur brève et valeur longue. La +commande @code{newSpacingSection} permet alors de réinitialiser les +paramètres d'espacement. -@untranslated +Dans l'exemple qui suit, le changement de métrique marque le début +d'une nouvelle partie ; remarquez comme les doubles-croches sont +alors plus espacées : +@lilypond[relative,verbatim,quote] +\time 2/4 +c4 c8 c +c8 c c4 c16[ c c8] c4 +\newSpacingSection +\time 4/16 +c16[ c c8] +@end lilypond -@node Minimisation des sauts de page -@subsection Minimisation des sauts de page -@translationof Minimal page breaking @c external +La commande @code{\newSpacingSection} crée un nouvel objet +@code{SpacingSpanner}, ce qui permet d'appliquer de nouveaux +@code{\override}s à partir de ce point. -@untranslated +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. +Référence des propriétés internes : +@rinternals{SpacingSpanner}. -@node Sauts explicites -@subsection Sauts explicites -@translationof Explicit breaks @c external -@untranslated +@node Modification de l'espacement horizontal +@subsection Modification de l'espacement horizontal +@translationof Changing horizontal spacing + +Vous pouvez influencer l'espacement horizontal à l'aide de la propriété +@code{base-shortest-duration}. Comparons les deux partitions qui +suivent, toutes deux montrant la même musique. La première partition +applique les réglages par défaut, alors que la seconde bénéficie d'un +ajustement de la propriété @code{base-shortest-duration}. Au plus la +valeur de @code{ly:make-moment} est grande, au plus la musique sera +resserrée. En effet, @code{ly:make-moment} construit une durée : +@code{1 4} est plus long que @code{1 16}. + +@lilypond[verbatim,line-width=12\cm] +\score { + \relative c'' { + g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + } +} +@end lilypond +@lilypond[verbatim,line-width=12\cm] +\score { + \relative c'' { + g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | + g4 e e2 | f4 d d2 | c4 e g g | c,1 | + } + \layout { + \context { + \Score + \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 16) + } + } +} +@end lilypond -@node Recours à une voix supplémentaire pour gérer les sauts -@subsection Recours à une voix supplémentaire pour gérer les sauts -@translationof Using an extra voice for breaks @c external +@snippets +L'espacement au sein d'un nolet dépend par défaut d'un certain nombre de +facteurs qui ne sont pas liés à la durée (altération, changement de +clef, etc.). @w{@code{Score.SpacingSpanner #'uniform-stretching}} +permet d'ignorer ces symboles et, par voie de conséquence, forcer +l'espacement sur la simple durée. Notez bien que cette propriété +s'appliquera à toute la partition, puisque mentionnée au sein d'un bloc +@code{\layout}. -@untranslated +@lilypond[quote,ragged-right,verbatim] +\score { + << + \new Staff { + \times 4/5 { + c8 c8 c8 c8 c8 + } + c8 c8 c8 c8 + } + \new Staff { + c8 c8 c8 c8 + \times 4/5 { + c8 c8 c8 c8 c8 + } + } + >> + \layout { + \context { + \Score + \override SpacingSpanner.uniform-stretching = ##t + } + } +} +@end lilypond +L'activation du commutateur @code{strict-note-spacing} permet d'espacer +les notes sans tenir compte des clefs, barres de mesure ou notes +d'ornement qui pourraient apparaître : -@node Espacement vertical -@section Espacement vertical -@translationof Vertical spacing @c external +@lilypond[quote,ragged-right,relative=2,verbatim] +\override Score.SpacingSpanner.strict-note-spacing = ##t +\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c32] } +@end lilypond -@untranslated +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. -@menu -* Espacement vertical au sein d'un système:: -* Espacement vertical entre les systèmes:: -* Positionnement explicite des portées et systèmes:: -* Optimisation du remplissage avec un deuxième passage:: -* Résolution des collisions verticales:: -@end menu +@node Longueur de ligne +@subsection Longueur de ligne +@translationof Line length + +@cindex saut de page +@cindex pages, saut +@cindex ligne, longueur + +@funindex indent +@funindex line-width +@funindex ragged-right +@funindex ragged-last + +@c Although line-width can be set in \layout, it should be set in paper +@c block, to get page layout right. +@c Setting indent in \paper block makes not much sense, but it works. + +@c Bit verbose and vague, use examples? +Deux réglages de bases ont une influence considérable sur +l'espacement : @code{line-width} et @code{indent}. Tous deux se +placent dans le bloc @code{\layout}. Ils contrôleront la longueur des +lignes et l'indentation de la première. + +L'activation du commutateur @code{ragged-right} au sein du bloc +@code{\layout} permet de terminer les systèmes naturellement plutôt que +de les voir s'étirer sur toute la largeur de la page. Cette option est +particulièrement utile lorsque vous traitez de courts fragments, ou bien +pour vérifier ce que donnerait l'espacement naturel. Bien qu'il soit +désactivé par défaut, il sera activé si la partition ne comporte qu'un +seul système. + +@cindex page, mise en forme +@cindex vertical, espacement + +Le fonctionnement de l'option @code{ragged-last} est en tout point +identique à celui de @code{ragged-right}, à ceci près qu'il ne concerne +que la dernière ligne de la partition. Il n'y a pas de restriction +quant à cette ligne. Il en va de même que pour le formatage d'un +paragraphe de texte, la dernière ligne s'arrête au dernier caractère. + +@c Note that for text there are several options for the last line. +@c While Knuth TeX uses natural length, lead typesetters use the same +@c stretch as the previous line. eTeX uses \lastlinefit to +@c interpolate between both these solutions. -@node Espacement vertical au sein d'un système -@subsection Espacement vertical au sein d'un système -@translationof Vertical spacing inside a system @c external +@example +\layout @{ + indent = #0 + line-width = #150 + ragged-last = ##t +@} +@end example -@untranslated +@seealso +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. -@node Espacement vertical entre les systèmes -@subsection Espacement vertical entre les systèmes -@translationof Vertical spacing between systems @c external +@node Notation proportionnelle +@subsection Notation proportionnelle +@translationof Proportional notation -@untranslated +LilyPond prend en charge la notation proportionnelle. Il s'agit dans +ce cas de représenter la notation selon un espacement strictement +relatif aux durées. Ce type d'espacement pourrait se comparer à +l'utilisation de papier millimétré pour positionner les notes au fil de +la portée. Certaines œuvres de la fin du XXe siècle et à l'aube du XXIe +utilisent cette proportionnalité dans le but de clarifier des structures +rythmiques complexes, d'aider au positionnement d'indications +temporelles ou autres éléments graphiques directement dans la partition. +LilyPond met à votre disposition cinq réglages différents, qui peuvent +s'utiliser conjointement ou individuellement, aux fins de mettre au +point cette notation proportionnelle. -@node Positionnement explicite des portées et systèmes -@subsection Positionnement explicite des portées et systèmes -@translationof Explicit staff and system positioning @c external +@itemize +@item @code{proportionalNotationDuration} -@untranslated +@item @code{uniform-stretching} +@item @code{strict-note-spacing} -@node Optimisation du remplissage avec un deuxième passage -@subsection Optimisation du remplissage avec un deuxième passage -@translationof Two-pass vertical spacing @c external +@item @code{\remove "Separating_line_group_engraver"} -@untranslated +@item @code{\override PaperColumn.used = ##t} +@end itemize -@node Résolution des collisions verticales -@subsection Résolution des collisions verticales -@translationof Vertical collision avoidance @c external +Nous allons examiner, dans les différents exemples qui suivent, les +effets de ces réglages et comment ils interagissent. -@untranslated +Commençons par cette mesure toute simple qui utilise l'espacement +classique et justifiée à gauche. +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> +} +@end lilypond -@node Espacement horizontal -@section Espacement horizontal -@translationof Horizontal spacing @c external +Vous constatez que la blanche qui entame la mesure prend moins de la +moitié de l'espace. De même, les doubles croches et le quintolet de +doubles (donc des vingtièmes de ronde) qui terminent cette mesure +n'en occupent pas la moitié de l'espace horizontal. -@untranslated +En matière de gravure traditionnelle, cet espacement correspond tout à +fait à nos attentes, puisque nous pouvons rogner l'espace sur la +blanche et ainsi gagner en largeur sur toute la mesure qui fait une +ronde. +Par contre, si nous avons besoin d'insérer une indication temporelle ou +un autre graphisme en surplomb ou en dessous de notre partition, nous +aurons besoin de la notation proportionnelle. Celle-ci s'active en +définissant la propriété @code{proportionalNotationDuration}. -@menu -* Généralités sur l'espacement horizontal:: -* Changement d'espacement au cours de la partition:: -* Modification de l'espacement horizontal:: -* Longueur de ligne:: -* Notation proportionnelle:: -@end menu +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 20) + } + } +} +@end lilypond -@node Généralités sur l'espacement horizontal -@subsection Généralités sur l'espacement horizontal -@translationof Horizontal spacing overview @c external +La blanche du début et les notes plus rapides de la deuxième moitié de +la mesure occupent maintenant exactement le même espace horizontal. +Nous pourrions donc y insérer, au-dessus ou au-dessous, une indication +temporelle ou autre graphisme. + +@code{proportionalNotationDuration} est une propriété attachée au +contexte @code{Score}. Rappelez-vous que vous pouvez régler les +propriétés d'un contexte à trois différents endroits de votre +fichier : dans un bloc @code{\with}, dans un bloc @code{\context} +ou au beau milieu de la musique à l'aide de la commande @code{\set}. +Vous pouvez donc définir @code{proportionalNotationDuration} selon l'une +de ces trois façons, à l'instar de n'importe quelle définition de +contexte. + +La propriété @code{proportionalNotationDuration} prend en unique +argument la durée de référence qui servira de base pour espacer toute la +musique. La fonction Scheme @code{make-moment} intégrée à LilyPond +prend deux arguments : un numérateur et un dénominateur qui +représentent une fraction de ronde. L'appel de +@w{@code{(ly:make-moment 1 20)}} produit donc une durée de référence +égale à un vingtième de ronde. Vous pourriez tout aussi bien utiliser +@code{(ly:make-moment 1 16)}, @code{(ly:make-moment 1 8)} ou +@code{(ly:make-moment 3 97)}. + +Se pose alors le problème de fournir la juste durée de référence à +@code{proportionalNotationDuration}. Il faut en l'occurrence procéder par +tâtonnement, en commençant par une valeur proche de la note la plus +rapide (la durée la plus courte) du morceau. Au plus la durée de +référence est petite, au plus la musique sera étalée ; à l'inverse, +une durée de référence élevée produira une musique resserrée. + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 8) + } + } +} + +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 16) + } + } +} -@untranslated +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 32) + } + } +} +@end lilypond +Vous ne manquerez pas de noter qu'une durée de référence trop grande, +comme la croche pour la première ligne, a pour conséquence de resserrer +la musique, ce qui peut aboutir à des chevauchements de têtes. Vous +remarquez aussi que, par principe, la notation proportionnelle occupe +beaucoup plus d'espace horizontal que l'espacement traditionnel. La +notation proportionnelle met en évidence le rythme au détriment de +l'espacement horizontal. -@node Changement d'espacement au cours de la partition -@subsection Changement d'espacement au cours de la partition -@translationof New spacing area @c external +Examinons à présent le moyen d'optimiser l'espacement de nolets en +tuilage. -@untranslated +Reprenons notre exemple de départ, avec son espacement traditionnel, et +ajoutons lui une portée incluant un autre type de nolet. +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } + >> +} +@end lilypond -@node Modification de l'espacement horizontal -@subsection Modification de l'espacement horizontal -@translationof Changing horizontal spacing @c external +L'espacement est loin d'être idéal, pour la simple raison que +l'espacement régulier des notes de la portée inférieure ne s'étire pas +uniformément. Il est vrai que de telles constructions complexes en +nolets sont assez rares en gravure traditionnelle, ce qui explique que +les règles qu'elle applique peuvent amener à ce résultat. Le recours à +@code{proportionalNotationDuration} permet d'arranger les choses. -@untranslated +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 20) + } + } +} +@end lilypond +Cependant, si l'on observe de près, il est évident que les notes de la +deuxième moitié du ennaolet ont tendance à s'espacer légèrement plus que +celles de la première moitié. Afin d'uniformiser cet étalement, nous +allons activer le @code{uniform-stretching}, propriété attachée au +@code{SpacingSpanner}. -@node Longueur de ligne -@subsection Longueur de ligne -@translationof Line length @c external +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new RhythmicStaff { + c'2 + c'16 c'16 c'16 c'16 + \times 4/5 { + c'16 c'16 c'16 c'16 c'16 + } + } + \new RhythmicStaff { + \times 8/9 { + c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 + } + } + >> + \layout { + \context { + \Score + proportionalNotationDuration = #(ly:make-moment 1 20) + \override SpacingSpanner.uniform-stretching = ##t + } + } +} +@end lilypond -@untranslated +L'espacement sur les deux portées est maintenant correct, les relations +rythmiques sont clairement perceptibles, et nous pourrions y insérer +une indication temporelle ou autre graphisme selon notre envie. + +Notez bien que la prise en charge de la notation proportionnelle par +LilyPond demande que, dans chaque partition, soit activée la propriété +@code{uniform-stretching} du @code{SpacingSpanner}. Dans le cas +contraire, utiliser @code{proportionalNotationDuration} aura pour +conséquence, entre autres, un espacement erroné lorsque vous y aurez +inséré des silences invisibles @emph{skip}. + +Le @code{SpacingSpanner} est en fait un objet graphique abstrait attaché +au contexte @code{Score}. Tout comme pour la propriété +@code{proportionalNotationDuration}, les réglages du +@code{SpacingSpanner} peuvent se faire à trois différents endroits de +votre fichier : dans un bloc @code{\with}, dans un bloc +@code{\context} ou au beau milieu de la musique à l'aide de la +commande @code{\set}. + +Gardez bien à l'esprit qu'il n'y a qu'un seul @code{SpacingSpanner} par +@code{Score}. Il s'ensuit que @code{uniform-stretching} est soit +activé, soit désactivé, et dans tous les cas pour l'intégralité de la +partition. Vous pourriez toutefois avoir besoin de modifier ce +comportement en cours de partition, et recourir alors à l'instruction +@code{\newSpacingSection} -- pour de plus amples détails, voir la +rubrique @ref{Changement d'espacement en cours de partition}. + +Intéressons-nous maintenant au @code{Separating_line_group_engraver}, +qui est désactivé pour la plupart des partitions en notation +proportionnelle. Voici ce qui apparaît dans une partition +traditionnelle : il y a toujours un @qq{espace préservé} juste +avant la première note de chaque portée. + +@lilypond[quote,verbatim,ragged-right] +\paper { + indent = #0 +} +\new Staff { + c'1 + \break + c'1 +} +@end lilypond -@node Notation proportionnelle -@subsection Notation proportionnelle -@translationof Proportional notation +Cet espace, géré par le @code{Separating_line_group_engraver}, est aussi +présent lorsqu'intervient un changement de métrique, d'armure ou de +clef. Désactiver le @code{Separating_line_group_engraver} revient à +réduire cet espace à zéro. -Les notes peuvent s'espacer proportionnellement en assignant une durée -à @code{proportionalNotationDuration} +@lilypond[quote,verbatim,ragged-right] +\paper { + indent = #0 +} -@lilypond[quote,ragged-right,verbatim,relative=2,fragment] -<< - \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) - \new Staff { c8[ c c c c c] c4 c2 r2 } - \new Staff { c2 \times 2/3 { c8 c c } c4 c1 } ->> +\new Staff \with { + \remove "Separating_line_group_engraver" +} { + c'1 + \break + c'1 +} @end lilypond -Manipuler cette propriété affectera l'espacement idéal uniquement pour -des notes consécutives. Pour obtenir une véritable notation -proportionnelle, vous devrez tenir compte des réglages suivants : - -@itemize @bullet +Les éléments non musicaux tels que métrique, armure et clef, posent +problème lorsqu'on travaille en notation proportionnelle. Bien +qu'aucune notion de durée ne leur soit attachée, ces éléments +@qq{consomment} de l'espace. Différentes approches permettent +cependant de gérer ce problème. + +Éviter les problèmes d'espacement avec l'armure est chose aisée : +il suffit qu'il n'y en ait pas ! C'est bien souvent le cas en +musique contemporaine, où l'on trouve le plus d'ouvrages en notation +proportionnelle. Il en va de même pour la métrique, et tout +particulièrement lorsque la partition comporte un quadrillage temporel +ou autres graphismes. L'absence de métrique reste cependant +exceptionnelle et la plupart des partitions en notation proportionnelle +laissent apparaître quelques métriques. Il est par contre pratiquement +impossible de se passer de clef et d'altération. + +L'une des options permettant de s'affranchir de l'espacement dû aux +éléments non musicaux consiste en l'activation de la propriété +@code{strict-note-spacing} attachée au @code{SpacingSpanner}. Observons +les deux portées suivantes : + +@lilypond[quote,verbatim,ragged-right] +\new Staff { + \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) + c''8 + c''8 + c''8 + \clef alto + d'8 + d'2 +} -@item La véritable notation proportionnelle exige que des symboles -puissent en écraser d'autres. Pour y parvenir, il faut retirer le -@rinternals{Separating_line_group_engraver} du contexte -@rinternals{Staff}. +\new Staff { + \set Score.proportionalNotationDuration = #(ly:make-moment 1 16) + \override Score.SpacingSpanner.strict-note-spacing = ##t + c''8 + c''8 + c''8 + \clef alto + d'8 + d'2 +} +@end lilypond -@item L'influence en matière d'espacement induite par le formatage -(clés, barres de mesure, etc) s'annule en assignant -@emph{vrai}@tie{}(#t) à la propriété @code{strict-note-spacing} de -l'objet @rinternals{SpacingSpanner}. +Toutes deux affichent un espacement proportionnel. Cependant, la +première ligne laisse apparaître un espacement plus lâche en raison de +la présence d'un changement de clef. En ce qui concerne la deuxième +ligne, l'espacement est strictement observé dès lors que la propriété +@code{strict-note-spacing} a préalablement été activée. Comme vous +pouvez le constater, l'activation de @code{strict-note-spacing} a pour +conséquence que l'algorithme d'espacement ignore tout bonnement la +largeur des métriques, armures, clefs et altérations. -@item Les affinages optiques se règlent en assignant @emph{vrai} à la -propriété @code{uniform-stretching} du @rinternals{SpacingSpanner}. +En plus de ceux que nous venons de voir, vous trouverez d'autres +réglages en usage dans la notation proportionnelle comme, entre autres, +@itemize +@item @code{\override SpacingSpanner.strict-grace-spacing = ##t} +@item @code{tupletFullLength = ##t} +@item @code{\override Beam.breakable = ##t} +@item @code{\override Glissando.breakable = ##t} +@item @code{\override TextSpanner.breakable = ##t} +@item @code{\remove "Forbid_line_break_engraver"} (dans un contexte de voix) @end itemize +Ces différents réglages permettent un espacement strict des notes +d'ornement, d'étendre les indications de nolet afin d'indiquer de façon +évidente leurs bornes et d'autoriser le tronçonnement des extenseurs à +l'occasion d'un saut de ligne ou de page. Nous vous renvoyons aux +différentes rubriques associées du manuel pour chacun de ces réglages. @seealso -Exemples : @rlsr{Spacing}. +Manuel de notation : +@ref{Changement d'espacement en cours de partition}. -Le fichier @file{input/proportional.ly} illustre la notation -proportionnelle stricte. +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. @node Réduction du nombre de pages de la partition @section Réduction du nombre de pages de la partition @translationof Fitting music onto fewer pages +Vous pourriez un jour être confronté au problème suivant : l'une +des pages de votre partition ne comporte que deux portées alors que -- +ce qui est d'autant plus frustrant -- l'espace libre sur les autres +pages aurait permis une distribution différente. + +L'instruction @code{annotate-spacing} se révèle être un outil +indispensable pour l'analyse des problèmes de mise en forme. Cette +commande met en surimpression la valeur des différentes variables +d'espacement et de mise en forme, comme nous allons le voir dans la +rubrique @ref{Mise en évidence de l'espacement}. + @menu * Mise en évidence de l'espacement:: * Modification de l'espacement:: @end menu + @node Mise en évidence de l'espacement @subsection Mise en évidence de l'espacement -@translationof Displaying spacing @c external +@translationof Displaying spacing + +@funindex annotate-spacing +@cindex espacement, affichage des valeurs + +Le meilleur moyen d'appréhender les différentes variables de +dimensionnement vertical sur lesquelles vous pouvez jouer au niveau de +la mise en page consiste à activer, au sein du bloc @code{\paper}, la +fonction @code{annotate-spacing} : + +@c need to have \book{} otherwise we get the separate systems. -hwn +@lilypond[verbatim,quote] +#(set-default-paper-size "a6" 'landscape) +\book { + \score { { c4 } } + \paper { annotate-spacing = ##t } +} +@end lilypond -@untranslated +@noindent +Toutes les dimensions sont exprimées en espace de portée +@emph{(staff-space)} quelle que soit l'unité mentionnée dans les blocs +@code{\paper} ou @code{\layout}. Dans cet exemple, la hauteur de la +feuille (@code{paper-height}) est de 59,75 espaces de portée +(@code{staff-spaces}) et la taille de portée (@code{staff-size}) de +20 points -- sa valeur par défaut. Notez que : + +@multitable {1 staff-space} {staff-size)/4 * (25,4/72,27) mm} + +@item 1 point +@tab = (25,4/72,27) mm + +@item 1 staff-space +@tab = (@code{staff-size})/4 pts +@item +@tab = (@code{staff-size})/4 * (25,4/72,27) mm + +@end multitable + +@noindent +Dans le cas qui nous occupe, un @code{staff-space} égale environ +1,757 millimètres. Les 59,75 @code{staff-spaces} de +@code{paper-height} correspondent donc à 105 millimètres, soit la +hauteur d'une feuille au format A6 à l'italienne. Les paires +@code{(@var{a},@var{b})} sont des intervalles, @var{a} en étant +l'extrémité inférieure et @var{b} l'extrémité supérieure. + +@seealso +Manuel de notation : +@ref{Définition de la taille de portée}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}. @node Modification de l'espacement @subsection Modification de l'espacement @translationof Changing spacing -Parfois, une partition peut se terminer avec seulement -un ou deux systèmes sur la dernière page. Ceci peut être ennuyeux -surtout si vous constatez, en regardant les pages précédentes, qu'il -reste encore beaucoup de place sur celles-ci. - -Si vous vous intéressez aux problèmes de mise en page, -@code{annotate-spacing} peut alors être un outil d'une valeur -inestimable. Cette commande imprime les valeurs -de nombreuses commandes d'espacement concernant la mise en page. -Consultez @ref{Mise en évidence de l'espacement} pour de plus amples informations. À l'aide -des informations données par @code{annotate-spacing}, on peut -voir quelles marges il est souhaitable de modifier afin de résoudre le -problème. +Les informations fournies par @code{annotate-spacing} en matière de +dimensionnement vertical sont incomparables. Pour plus de détails sur +les manières de modifier marges et autres variables connexes, consultez +la rubrique @ref{Mise en forme de la page}. - -En plus d'agir sur les marges, il existe d'autres possibilités -qui permettent de gagner de la place. +En dehors des marges, vous disposez de quelques moyens supplémentaires +pour gagner de l'espace : @itemize @item -Demander à LilyPond de placer les systèmes aussi -près que possible les uns des autres (pour en disposer autant -que possible sur une page), tout en répartissant les systèmes afin -de ne pas laisser de blanc en bas de la dernière page. +Rapprocher les systèmes le plus possible les uns des autres, de telle +sorte qu'il en tienne un maximum sur une même page, tout en les espaçant +suffisamment pour éviter le blanc en bas de page. @example \paper @{ - between-system-padding = #0.1 - between-system-space = #0.1 + system-system-spacing = #'((basic-distance . 0.1) (padding . 0)) ragged-last-bottom = ##f ragged-bottom = ##f @} @end example @item -Obliger LilyPond à mettre un certain nombre de systèmes -par page. Par exemple, si LilyPond veut placer onze systèmes dans une page, -vous pouvez l'obliger à n'en mettre que dix. +Forcer le nombre de systèmes par page. Ceci peut se révéler judicieux à +deux titres. D'une part, le fait de définir un nombre de systèmes -- +même s'il est égal à la valeur par défaut -- peut aboutir à plus de +systèmes par page dans la mesure où l'une des étapes d'estimation des +hauteurs est tout simplement sautée. D'autre part, réduire le nombre de +systèmes par page permet d'en disposer plus sur les suivantes. Par +exemple, avec un nombre par défaut de 11 systèmes par pages, +l'instruction suivante le force à 10. @example \paper @{ @@ -346,44 +3671,81 @@ vous pouvez l'obliger à n'en mettre que dix. @end example @item -Supprimer (ou réduire) les objets qui augmentent la hauteur du -système. C'est le cas en particulier de certaines reprises (avec des -alternatives) qui placent des crochets au dessus des portées. Si ces crochets -de reprise se poursuivent sur deux systèmes, ils prendront plus de -place que s'ils sont regroupés sur un même système. +Forcer le nombre de pages. L'instruction suivante forcera la musique à +se répartir sur deux pages. -Un autre exemple : déplacer les nuances qui @qq{débordent} d'un système. +@example +\paper @{ + page-count = #2 +@} +@end example -@lilypond[verbatim,quote,fragment] -\relative c' { - e4 c g\f c - \override DynamicLineSpanner #'padding = #-1.8 - \override DynamicText #'extra-offset = #'( -2.1 . 0) - e4 c g\f c -} +@item +Éviter ou réduire les objets qui augmentent la hauteur des systèmes. +Par exemple, un crochet de reprise ou d'alternative consomme de +l'espace. Le fait de les reporter sur plusieurs systèmes regroupés +diminue d'autant l'espace disponible que si seul le premier ne +comportait l'indication. Autre exemple, les indications de nuance qui +se @qq{détachent} d'un système peuvent être rapprochés de la portée : + +@lilypond[verbatim,quote,relative=1] +e4 c g\f c +e4 c g-\tweak X-offset #-2.7 -\tweak Y-offset #2.5 \f c @end lilypond @item -Modifier l'espacement vertical avec @code{SpacingSpanner}. Reportez-vous à -@ref{Modification de l'espacement horizontal} pour plus de détails. +Modifier l'espacement horizontal à l'aide du @code{SpacingSpanner}, +comme indiqué à la rubrique +@ref{Modification de l'espacement horizontal}. Voici ce que donne +l'espacement par défaut : @lilypond[verbatim,quote] \score { \relative c'' { - g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | - d4 d d d | d4 e f2 | e4 e e e | e4 f g2 | - g4 e e2 | f4 d d2 | c4 e g g | c,1 | + g4 e e2 | + f4 d d2 | + c4 d e f | + g4 g g2 | + g4 e e2 | + } +} +@end lilypond + +@noindent +Par contre, le fait de modifier la valeur de la propriété +@code{common-shortest-duration} en passant de @code{1/4} à @code{1/2} +-- bien que la noire soit la durée la plus courante, nous prenons une +valeur plus longue -- donnera un effet @qq{resserré} à la musique : + +@lilypond[verbatim,quote] +\score { + \relative c'' { + g4 e e2 | + f4 d d2 | + c4 d e f | + g4 g g2 | + g4 e e2 | } \layout { \context { \Score - \override SpacingSpanner - #'base-shortest-duration = #(ly:make-moment 1 4) + \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1 2) } } } @end lilypond +@noindent +La propriété @code{common-shortest-duration} ne peut être modifiée +dynamiquement. Elle se place toujours dans un bloc @code{\context} et +s'applique à l'intégralité de la partition. + @end itemize +@seealso +Manuel de notation : +@ref{Mise en forme de la page}, +@ref{Modification de l'espacement horizontal}. + +Morceaux choisis : +@rlsrnamed{Spacing,Espacements}.