@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: c299f84d574ac9b97ab7ffbb640b5c3a1cdca5cc
+ Translation of GIT committish: 9034fc53a974a6d006157ebcf52f091a85be30f5
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
l'emploi du Scheme. Les fragments de Scheme, dans un fichier
@file{.ly}, sont introduits par le caractère @emph{hash} (@code{#}),
improprement surnommé @qq{dièse}.
-@footnote{Le @rextendnamed{Scheme tutorial,Tutoriel Scheme} fournit
-quelques notions de base pour saisir des nombres, des listes, des
-chaînes de caractères ou des symboles, en Scheme.}
+@footnote{Le @rextend{Tutoriel Scheme} fournit quelques notions de base
+pour saisir des nombres, des listes, des chaînes de caractères ou des
+symboles, en Scheme.}
@menu
* Contextes d'interprétation::
@unnumberedsubsubsec Score -- le père de tous les contextes
@translationof Score - the master of all contexts
-Il s'agit en l'occurence du contexte le plus élevé, autrement dit le
+Il s'agit en l'occurrence du contexte le plus élevé, autrement dit le
plus important, en matière de notation. En effet, c'est au niveau de la
partition -- @emph{score} en anglais -- que se gèrent le temps et la
tonalité@tie{}; c'est donc là qu'il faut s'assurer que les différents
arts = @{ s4-. s4-> @}
@end example
-Elles sont ensuites fusionnées par affectation au même contexte
+Elles sont ensuite fusionnées par affectation au même contexte
@code{Voice}.
@example
Cette variante s'utilise lorsque les expression musicales peuvent être
interprétées à différents niveaux, comme par exemple lorsque intervient
la commande @code{\applyOutput} -- pour de plus amples détails, voir
-@rextendnamed{Running a function on all layout objects, Application
-d'une fonction à tous les objets de mise en forme}. En l'absence de
-@code{\context} explicite, LilyPond considère qu'il s'agit de
-@code{Voice}.
+@rextend{Application d'une fonction à tous les objets de mise en forme}.
+En l'absence de @code{\context} explicite, LilyPond considère qu'il
+s'agit de @code{Voice}.
@example
\applyOutput #'@var{contexte} #@var{fonction} % s'applique à Voice
Ces sous-programmes sont chargés de créer les différents éléments de
notation@tie{}: on trouve ainsi dans le contexte @code{Voice} un graveur
@code{Note_heads_engraver}, chargé des têtes de notes et, dans le
-contexte @code{Staff}, un graveur @code{Key_signature_engraver}, chargé
-de l'armure.
+contexte @code{Staff}, un graveur @code{Key_engraver}, chargé de
+l'armure.
Vous trouverez une description exhaustive de chaque graveur dans
@ifhtml
Pour aller encore plus loin, plutôt que de simplement parler de l'objet
@code{Fingering}, ce qui ne nous avance pas à grand chose, on peut aller
explorer son âme même, dans les fichiers source de LilyPond (voir
-@rlearning{Autres sources de documentation}), en l'occurence le fichier
+@rlearning{Autres sources de documentation}), en l'occurrence le fichier
@file{scm/define-grobs.scm}@tie{}:
@example
@cindex padding
@noindent
-En-dessous de cette description se trouve décrite la variable
+En dessous de cette description se trouve décrite la variable
@code{padding}@tie{}:
@quotation
@itemize
@item Qu'est-ce qui relève des conventions, et qu'est-ce qui relève de
la règle@tie{}?
-@item Qu'est-ce qui relève des règles du langage sous-jascent, et
+@item Qu'est-ce qui relève des règles du langage sous-jacent, et
qu'est-ce qui est propre à LilyPond@tie{}?
@end itemize
Les contextes s'organisent de façon hiérarchique@tie{}: aussi, lorsqu'un
contexte de niveau supérieur est spécifié (par exemple @code{Staff}), la
-propriété sera modifée dans tous les contextes inférieurs (tous les
+propriété sera modifiée dans tous les contextes inférieurs (tous les
contextes @code{Voice}, par exemple) qu'il contient.
@funindex \unset
La valeur de @var{contexte}.@var{NomObjet} (une liste associative, ou
@emph{alist}) permet d'initialiser les propriétés des objets un par un.
-Les objets eux-même ont leurs propriétés, dont les noms, dans la
+Les objets eux-mêmes ont leurs propriétés, dont les noms, dans la
tradition du langage Scheme, comprennent un trait d'union
(@code{toto-titi}). Ces propriétés internes changent constamment au
cours de la mise en page@tie{}: en fait, la gravure d'une page n'est
@funindex \once
L'instruction @code{\override} doit être précédée d'un @code{\once} dès
-lors que les effets de l'accomodement ne concernent que l'événement qui
+lors que les effets de l'accommodement ne concernent que l'événement qui
la suit directement@tie{}:
@lilypond[quote,verbatim,relative=2]
\tweak #'@code{objet-propriété} #@code{valeur}
@end example
-La commande @code{\tweak} s'applique à l'objet qui apparait
+La commande @code{\tweak} s'applique à l'objet qui apparaît
immédiatement après @code{valeur}.
@ignore
@noindent
Voir pour plus de détails
-@rextendnamed{Displaying music expressions,Affichage d'expressions musicales}.
+@rextend{Affichage d'expressions musicales}.
@end ignore
Pour une introduction à la syntaxe et l'utilisation des retouches, voir
que le fichier source est converti en flux musical. LilyPond peut
parfois être amené à ajouter d'autres éléments au flux musical lors de
la phase d'analyse. C'est la raison pour laquelle, puisque LilyPond
-peut insérer une note dans un accord alos qu'elle n'en fait pas partie
+peut insérer une note dans un accord alors qu'elle n'en fait pas partie
explicitement, il est impératif d'adopter une construction d'accord
lorsque l'instruction @code{\tweak} concerne une note isolée@tie{}:
Vous pouvez examiner le flux musical généré par une portion de votre
fichier source, y compris les éléments automatiquement insérés, en
suivant les indications portées à la rubrique
-@rextendnamed{Displaying music expressions,Affichage d'expressions
-musicales}. Ceci s'avère tout à fait approprié pour déterminer ce qui
-peut se modifier à l'aide d'un @code{\tweak} ou bien vous aider à
-rectifier votre source de telle sorte que le @code{\tweak} produise ses
-effets.
+@rextend{Affichage d'expressions musicales}. Ceci s'avère tout à fait
+approprié pour déterminer ce qui peut se modifier à l'aide d'un
+@code{\tweak} ou bien vous aider à rectifier votre source de telle sorte
+que le @code{\tweak} produise ses effets.
@seealso
@rlearning{Méthodes de retouche}.
Manuel d'extension :
-@rextendnamed{Displaying music expressions, Affichage d'expressions musicales}.
+@rextend{Affichage d'expressions musicales}.
@knownissues
(stretchability . 7))
@end example
-L'une des conséquences, parfois involontaire, de ceci est la supression
+L'une des conséquences, parfois involontaire, de ceci est la suppression
de réglages standards effectués par un fichier d'initialisation chargé à
chaque compilation de votre fichier source. Dans l'exemple précédent,
les réglages standards de @code{padding} et @code{minimum-distance},
@item une commande @code{\tag},
@item les indications de corde, par exemple @code{-"corde"},
@item les indications de doigté, par exemple @w{@code{-1}},
-@item les racourcis d'articulation, par exemple @w{@code{-.}},
+@item les raccourcis d'articulation, par exemple @w{@code{-.}},
@w{@code{->}} ou @w{@code{--}}.
@end itemize
Les distances absolues permettent de spécifier les marges, indentations
et autres détails de mise en page@tie{}; elles s'expriment par défaut en
-milimètres. Vous pouvez utiliser d'autres systèmes de mesure, dès lors
+millimètres. Vous pouvez utiliser d'autres systèmes de mesure, dès lors
que la quantité est suivie de la mesure@tie{}: @code{\mm}, @code{\cm},
@code{\in}@tie{}(pouces) ou @code{\pt}@tie{}(points, 1/72,27 pouce).
Les mesures de mise en page peuvent aussi s'exprimer en unité extensible
@funindex magstep
-Lorsque seulement une portion de partition doit apparaitre dans une
+Lorsque seulement une portion de partition doit apparaître dans une
taille, comme par exemple une portée d'ossia ou une note de bas de page,
influer sur la taille globale de portée affecterait l'intégralité de la
partition. Il convient donc dans ce cas de modifier à la fois la
localisation des deux bornes de l'extenseur soit calculée à la volée,
vous pouvez cependant forcer leur ordonnée (coordonnée-Y). Les
propriétés que vous devrez ajuster résident au deuxième niveau dans la
-hiérarchie, mais la syntaxe de la commmande @code{\override} nécessaire
+hiérarchie, mais la syntaxe de la commande @code{\override} nécessaire
demeure relativement simple@tie{}:
@lilypond[relative=2,quote,verbatim]
@item arrow
L'activation de cette sous-propriété (lui affecter @code{#t}) ajoutera
-à l'extenseur une terminaison en flêche.
+à l'extenseur une terminaison en flèche.
@item padding
Cette sous-propriété contrôle l'espace qui doit séparer l'extrémité de
@end lilypond
L'utilisation de @code{\endSpanners} permet de s'affranchir d'insérer un
-@code{\stopTextSpan} pour cloturer un @code{\startTextSpan} ou un
+@code{\stopTextSpan} pour clôturer un @code{\startTextSpan} ou un
@code{\!} pour terminer un soufflet.
certains cependant, tels les barres de mesure, clefs, métriques ou
armures, apparaîtront deux fois lors d'un saut de ligne -- une première
fois en fin de ligne, puis à nouveau au début de la ligne suivante. Ces
-objets, que l'on peut traîter de @emph{changeables} (@emph{breakable} en
+objets, que l'on peut traiter de @emph{changeables} (@emph{breakable} en
anglais) disposent de la propriété @code{break-visibility} spécialement
chargée de contrôler leur visibilité aux trois endroits où il sont
susceptibles d'apparaître@tie{}: en début de ligne, en cours de ligne ou
Ce comportement est géré par la propriété @code{break-visibility}, dont
vous trouverez une explication à la rubrique
@rlearning{Visibilité et couleur des objets}. Cette propriété est
-constituée d'un vecteur de trois boléens qui, dans l'ordre, déterminent
+constituée d'un vecteur de trois booléens qui, dans l'ordre, déterminent
si l'objet sera imprimé à la fin, en cours, et au début d'une ligne --
on pourrait aussi dire avant un saut de ligne, là où il n'y a pas de
saut de ligne, et après un saut de ligne.
@end lilypond
Avec de tels réglages particuliers, seules les altérations accidentelles
-premettront d'indiquer le changement de tonalité.
+permettront d'indiquer le changement de tonalité.
@c TODO Add visibility of cautionary accidentals before notes
* Regroupement vertical d'objets graphiques::
* Modification des stencils::
* Modification de l'allure des éléments::
+* Conteneurs requalifiants::
@end menu
@seealso
@rlsrnamed{Tweaks and overrides,Retouches}.
Manuel d'extension :
-@rextend{Interfaces for programmers}.
+@rextend{Interfaces pour programmeurs}.
Référence des propriétés internes :
@rinternals{All layout objects}.
@seealso
Manuel d'extension :
-@rextend{Callback functions}.
+@rextend{Fonctions de rappel}.
@node Détermination directe de X-offset et Y-offset
@cindex alignement sur un objet
@cindex break-align-symbols
-Indications de répère et numéros de mesure peuvent s'aligner sur des
+Indications de repère et numéros de mesure peuvent s'aligner sur des
objets de notation autres qu'une barre de mesure. Parmi ces objets,
nous citerons @code{ambitus}, @code{breathing-sign}, @code{clef},
@code{custos}, @code{staff-bar}, @code{left-edge},
Les différents objets sur lesquels l'alignement pourrait intervenir
seront regroupés dans une liste. Si l'un des objets est invisible à
l'endroit voulu, en raison d'un réglage de @code{break-visibility} ou
-bien par forçage de la visiblité des armures et clefs, le repère ou le
+bien par forçage de la visibilité des armures et clefs, le repère ou le
numéro de mesure viendra s'aligner sur le premier élément de cette liste
qui soit visible. Dans le cas où aucun objet de la liste n'est visible,
l'alignement se fera sur la barre de mesure ou, dans le cas où la barre
Le symbole standard d'un objet quel qu'il soit peut être remplacé à
partir du moment où la propriété @code{stencil} référence une procédure
-différente et écrite à cet effet. Ceci recquiert une bonne maîtrise du
+différente et écrite à cet effet. Ceci requiert une bonne maîtrise du
fonctionnement interne de LilyPond, mais est grandement facilité dans
bien des cas et permet d'obtenir le résultat escompté.
En effet, rien ne nous interdit, à partir de la propriété
@code{stencil}, d'appeler la procédure qui génère du texte,
-@code{ly:text-interface::print} en l'occurence, et d'adjoindre à l'objet
+@code{ly:text-interface::print} en l'occurrence, et d'adjoindre à l'objet
une propriété @code{text} qui contiendra, sous forme de @emph{markup},
le symbole à dessein. Grâce à l'extrême flexibilité des @emph{markups},
vous pourrez parvenir à bien des choses -- voir à ce sujet
d'une liste de quatre paires de nombres décimaux (ou nombres réels).
L'une des manières de procéder consiste à tout d'abord estimer les
coordonnées des deux extrémités puis, par tâtonnement, déterminer les
-deux points intremédiaires.
+deux points intermédiaires.
Remarque intéressante au sujet des courbes@tie{}: une courbe sera
symétrique si ses points de contrôle sont symétriques. L'une des
@rinternals{TieColumn}.
+@node Conteneurs requalifiants
+@subsection Conteneurs requalifiants
+@translationof Unpure-pure containers
+
+@cindex Scheme, pure containers
+@cindex Scheme, unpure containers
+@cindex pure containers, Scheme
+@cindex unpure containers, Scheme
+@cindex espacement horizontal, affinage
+
+Les conteneurs requalifiants permettent de faciliter le calcul des
+espacements en cas de modification du @emph{Y-axis} -- plus
+particulièrement les composantes @code{Y-offset} et @code{Y-extent} -- à
+l'aide d'une fonction scheme en lieu et place de valeurs.
+
+L'envergure verticale (@code{Y-extent}) de certains objets dépend de la
+propriété @code{stencil}@tie{}; jouer sur leur stencil requiert alors une
+intervention supplémentaire au niveau du @code{Y-extent} à l'aide d'un
+conteneur transitoire. Lorsqu'une fonction affecte un @code{Y-offset} ou
+un @code{Y-extent}, cela déclenche la détermination des sauts de ligne
+de manière anticipée dans la séquence des traitements. Il en résulte
+que cette opération n'est en fait pas exécutée@tie{}; elle renvoie
+habituellement @code{0} ou @code{'(0 . 0)}, ce qui peut engendrer des
+collisions. Une fonction @qq{pure} évitera d'avorter la construction
+des propriétés ou objets, qui de ce fait verront leurs arguments liés à
+la verticalité (@code{Y-axis}) correctement évalués.
+
+Il existe actuellement une trentaine de fonctions que l'on peut
+qualifier de @qq{pures}. Le recours à un conteneur transitoire permet
+de requalifier une fonction de telle sorte qu'elle soit reconnue comme
+@qq{pure} et soit donc évaluée @strong{avant} détermination des sauts de
+ligne -- l'espacement horizontal sera de fait ajusté en temps et en heure.
+La fonction @qq{impure} sera ensuite évaluée @strong{après} le
+positionnement des sauts de ligne.
+
+@warning{Il n'est pas toujours facile d'avoir l'assurance qu'une
+fonction soit qualifiée de @qq{pure}@tie{}; aussi nous vous recommandons
+d'éviter d'utiliser les objets @code{Beam} or @code{VerticalAlignment}
+lorsque vous désirez en créer une.}
+
+Un conteneur requalifiant se construit selon la syntaxe
+
+@code{(ly:make-unpure-pure-container f0 f1)}
+
+où @code{f0} est une fonction prenant @var{n} arguments (@var{n >= 1}),
+le premier devant être l'objet en question@tie{}; il s'agit de la
+fonction dont le résultat sera réutilisé. @var{f1} est la fonction qui
+sera qualifiée de @qq{pure}. Elle prend @var{n + 2} arguments, le
+premier devant être lui aussi l'objet en question, et les second et
+troisième étant respectivement les @qq{point de départ} (@var{start}) et
+@qq{point d'arrivée} (@var{end}).
+
+@var{start} et @var{end} sont dans tous les cas des valeurs fictives qui
+trouveront leur utilité dans le cas d'objets de type @code{Spanner},
+tels les soufflets (@code{Hairpin}) ou barres de ligature (@code{Beam}),
+en retournant les différentes estimations de hauteur basées sur leurs
+début et fin d'extension.
+
+Viennent ensuite les autres arguments de la fonction initiale @code{f0}
+-- autrement dit aucun si @var{n = 1}.
+
+Les résultats de la deuxième fonction (@code{f1}) permettent une
+approximation des valeurs qui seront ensuite utilisées par la fonction
+initiale aux fins d'ajustement lors des phases ultérieures d'espacement.
+
+@lilypond[verbatim,quote,ragged-right]
+#(define (square-line-circle-space grob)
+(let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
+ (notename (ly:pitch-notename pitch)))
+ (if (= 0 (modulo notename 2))
+ (make-circle-stencil 0.5 0.0 #t)
+ (make-filled-box-stencil '(0 . 1.0)
+ '(-0.5 . 0.5)))))
+
+squareLineCircleSpace = {
+ \override NoteHead #'stencil = #square-line-circle-space
+}
+
+smartSquareLineCircleSpace = {
+ \squareLineCircleSpace
+ \override NoteHead #'Y-extent =
+ #(ly:make-unpure-pure-container
+ ly:grob::stencil-height
+ (lambda (grob start end) (ly:grob::stencil-height grob)))
+}
+
+\new Voice \with { \remove "Stem_engraver" }
+\relative c'' {
+ \squareLineCircleSpace
+ cis4 ces cisis c
+ \smartSquareLineCircleSpace
+ cis4 ces cisis c
+}
+@end lilypond
+
+La première mesure de l'exemple ci-dessus ne fait pas appel à un
+conteneur requalifiant@tie{}; le moteur d'espacement n'a donc aucune
+connaissance de la largeur des têtes de note et ne peut empêcher
+qu'elles chevauchent les altérations. Dans la deuxième mesure, par
+contre, le recours à un conteneur requalifiant informe le moteur
+d'espacement de la largeur des têtes de note@tie{}; les collisions sont
+alors évitées du fait de l'espace réservé à chacune des têtes.
+
+Lorsqu'il s'agit de calculs simples, les fonctions, tant pour la partie
+@qq{pure} que pour la partie @qq{impure}, peuvent être identiques au
+détail près du nombre d'arguments utilisés ou du domaine d'intervention.
+
+@warning{Le fait de qualifier une fonction de @qq{pure} alors qu'elle ne
+l'est pas peut générer des résultats imprévisibles.}
+
+
@node Utilisation de fonctions musicales
@section Utilisation de fonctions musicales
@translationof Using music functions
Une adaptation ou un affinage qui devient récurrent parce que doit
s'appliquer à différentes expressions musicales peut faire l'objet d'une
-@emph{fonction musicale}. Nous ne traîterons ici que des fonctions de
-@emph{subtitution}, dont le but est de substituer une variable en un
+@emph{fonction musicale}. Nous ne traiterons ici que des fonctions de
+@emph{substitution}, dont le but est de substituer une variable en un
bout de code LilyPond. D'autres fonctions, plus complexes, sont
-abordées au chapitre @rextendnamed{Music functions,Fonctions musicales}.
+abordées au chapitre @rextend{Fonctions musicales}.
@menu
* Syntaxe d'une fonction de substitution::
Les arguments @code{parser} et @code{location} sont obligatoires@tie{};
ils sont utilisés dans certaines situations évoluées, comme indiqué dans
le manuel d'extension des fonctionnalités à au chapitre
-@rextendnamed{Music functions,Fonctions musicales}. Assurez-vous bien
-de ne pas les omettre dans vos fonctions de subtitution.
+@rextend{Fonctions musicales}. Assurez-vous bien de ne pas les omettre
+dans vos fonctions de substitution.
La liste des types de prédicat est elle aussi obligatoire. Voici
quelques uns des types de prédicat les plus utilisés dans les fonctions
@ref{Types de prédicats prédéfinis}.
Manuel d'extension :
-@rextendnamed{Music functions, Fonctions musicales}.
+@rextend{Fonctions musicales}.
Fichiers d'initialisation :
@file{lily/music-scheme.cc},
\relative c' { c4 d e f \custosNote g }
@end lilypond
-Une fonction de subtitution peut traiter plusieurs argument@tie{}:
+Une fonction de substitution peut traiter plusieurs argument@tie{}:
@lilypond[quote,verbatim,ragged-right]
tempoPadded =