\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-

@ignore
    Translation of GIT committish: bf25a579ef63d3e07f782e7fa7d9178fefa705ce

    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
    Guide, node Updating translation committishes..
@end ignore

@c Translators: Jean-Charles Malahieude
@c Translation checkers: Jean Abou Samra

@setfilename lilypond-changes.info
@settitle LilyPond Changes

@c no dircategory nor direntry in  French
@c since info is not translated. -JCM
@c deux lignes vides entre les items

@include fr/macros.itexi

@documentencoding UTF-8
@documentlanguage fr
@afourpaper

@macro manualIntro
Ce document recense les modifications et les nouvelles fonctionnalités
de LilyPond pour la version @version{} (depuis la 2.22).
@end macro

@lilyTitlePage{Nouveautés}

@iftex
@allowcodebreaks false
@end iftex

@ignore

HINTS

* only show verbatim input for syntax/input changes

* try to be as brief possible in those cases

* don't try to provide real-world examples, they often get too big,
which scares away people.

* Write complete sentences.

* only show user-visible changes.

@end ignore


@warning{Chaque nouvelle version de LilyPond peut comporter des
changements de syntaxe, ce qui peut exiger de modifier les fichiers que
vous avez écrits avec des vesrions précédentes, de telle sorte qu'ils
restent fonctionnels avec les nouvelles versions. Afin de mettre à jour
vos fichiers, il est @strong{fortement conseillé} d'utiliser
l'utilitaire @command{convert-ly} distribué avec LilyPond et qui est
abordé dans @rprogram{Mise à jour avec convert-ly}. @command{convert-ly}
est capable de réaliser la plupart des modifications de syntaxe
automatiquement. Les utilisateurs de Frescobaldi peuvent lancer
@command{convert-ly} directement à partir du menu de Frescobaldi en
faisant « Outils > Mettre à jour avec convert-ly@dots{} ». D'autres
environnements prenant en charge LilyPond sont susceptibles de fournir
un moyen graphique de lancer @command{convert-ly}.}


@node Modifications majeures de LilyPond
@unnumbered Modifications majeures de LilyPond
@translationof Major changes in LilyPond

@itemize

@item
LilyPond requiert désormais Guile 2.2. Même si vous n'êtes pas
personnellement l'auteur de code Scheme, vous pourriez avoir recours à
des bibliothèques de personnalisation évoluée. Si elles venaient à ne
pas fonctionner avec la version @version{} de LilyPond, veuillez vous
adresser aux développeurs de ces bibliothèques.  Si vous êtes vous-même
développeur de bibliothèques Scheme, veuillez lire @ref{Notes sur Guile 2.2}
ci-dessous.

@item
L'infrastructure permettant de générer les binaires officiels a été
complètement réécrite, de concert avec la bascule sur Guile 2.2. Nous
fournissons, à compter de cette version, des binaires 64 bits pour macOS
et Windows. Par ailleurs, tous les paquetages sont disponibles sous
forme de simples archives qui peuvent être dépliées dans n'importe quel
endroit pour « installation ». Il suffira, pour désinstaller, de
simplement supprimer le dossier en question. Est aussi abandonné
l'éditeur de base, LilyPad, qui était installé sur macOS et Windows.
Nous recommandons l'utilisation de solutions externes telles que
l'éditeur bien connu @uref{https://frescobaldi.org,Frescobaldi} ou l'un
de ceux mentionnés dans @rweb{Facilités d'édition}. Pour de plus amples
informations, veuillez consulter les instructions détaillées dans
@rlearning{Installation}.

Dans les paquetages officiels, Ghostscript ne contient plus son
propre jeu de polices par défaut, ceci afin de réduire la taille
des archives à télécharger.  LilyPond n'a pas besoin de ces
polices (l'application contient elle-même les polices dont elle a
besoin).  Cependant, quelques utilisateurs y faisaient appel avec
des instructions comme @code{/Arial findfont} dans du code
PostScript inséré avec @code{\markup \postscript}.  Il est
recommandé d'utiliser la syntaxe @code{\markup} normale pour le
texte plutôt que du code PostScript écrit à la main.


@end itemize


@node Problèmes connus de LilyPond @version{}
@unnumberedsec Problèmes connus de LilyPond @version{}
@translationof Known issues in LilyPond @version{}

Sur Windows, la compilation de partitions volumineuses (quelques
centaines de pages) peut entraîner un crash.@footnote{Il est à noter que
d'imposantes partitions pouvaient déjà crasher avec LilyPond 2.22 en
raison de restrictions inhérentes à l'architecture 32 bits.} Nous
espérons résoudre ce problème dans une future version 2.24.@var{x}.


@node Notes à propos de la compilation des sources et à l'attention des empaqueteurs
@unnumberedsec Notes à propos de la compilation des sources et à l'attention des empaqueteurs
@translationof Notes for source compilation and packagers

La présente section s'adresse aux entousiastes désirant compiler
LilyPond à partir des sources et aux empacteurs qui préparent LilyPond
pour les différentes distributions. Si vous ne faites partie d'aucun de
ces groupes, vous pouvez passer cette section.

@itemize

@item
Comme annoncé plus haut, LilyPond requiert désormais Guile 2.2. Selon
les exigences de la distribution, on peut aussi compiler avec Guile 3.0
en passant @command{GUILE_FLAVOR=guile-3.0} au script
@command{configure}. Ceci n'est toutefois pas recommandé et n'est pas
officiellement pris en charge.

@item
L'évaluateur de code Scheme est plus lent avec Guile 2.2 qu'il ne
l'était avec Guile 1.@var{x}. Pour atténuer cette baisse de performance,
nous recommandons de compiler les fichiers @file{.scm} en bytecode
ajoutant @command{make bytecode} à la compilation, puis @command{make
install-bytecode} en plus de @command{make install}.

@item
À compte de cette version stable, le système de construction de LilyPond
n'installe plus de fonte textuelle. Nous vous remercions d'en fournir en
tant que paquetages indépendants, tout en vérifiant leur licence et les
fichiers de notice.


@end itemize


@node Nouveautés en matière de notation musicale
@unnumbered Nouveautés en matière de notation musicale
@translationof New for musical notation


@node Améliorations de la représentation des hauteurs
@unnumberedsec Améliorations de la représentation des hauteurs
@translationof Pitches improvements

@itemize
@item
La prise en charge d'altérations alternatives s'améliore. Grâce à la
propriété @code{alterationGlyphs} des contextes de niveau portée,
peuvent se définir globalement les glyphes à utiliser pour tous les
objets -- voir @ruser{Glyphes d'altération alternatifs}.

@lilypond[quote]
\layout {
  \context {
    \Staff
    alterationGlyphs =
      #'((-1/2 . "accidentals.flat.arrowdown")
         (0 . "accidentals.natural.arrowup")
         (1/2 . "accidentals.sharp.arrowup"))
  }
}

\new Voice \with {
  \consists Ambitus_engraver
}
{
  \key g \major
  ces''
  \set suggestAccidentals = ##t
  c''
  \unset suggestAccidentals
  \accidentalStyle teaching
  fis''
}
@end lilypond


@item
Les crochets d'octaviation peuvent s'appliquer à une seule voix plutôt
qu'à l'intégralité de la portée. Ceci demandait auparavant quelques
circonvolutions.

@example
\layout @{
  \context @{
    \Staff
    \remove Ottava_spanner_engraver
  @}
  \context @{
    \Voice
    \consists Ottava_spanner_engraver
  @}
@}
@end example

@lilypond[quote]
\layout {
  \context {
    \Staff
    \remove Ottava_spanner_engraver
  }
  \context {
    \Voice
    \consists Ottava_spanner_engraver
  }
}

{
  \clef bass
  << { <g d'>1~ q2 <c' e'> }
  \\
    {
      r2.
      \ottava -1
      <b,,, b,,>4 ~ |
      q2
      \ottava 0
      <c e>2
    }
  >>
}
@end lilypond

@end itemize


@node Améliorations en matière de rythme
@unnumberedsec Améliorations en matière de rythme
@translationof Rhythm improvements

@itemize
@item
La nouvelle commande @code{\section} insère une double barre qui
interagit de manière optimale avec les barres de reprise. Un passage
peut être nommé à l'aide de la commande @code{\sectionLabel}.

@lilypond[verbatim,quote,line-width=9\cm]
\fixed c' {
  f1
  \break
  \section
  \sectionLabel "Trio"
  \repeat volta 2 {
    b1
  }
}
@end lilypond


@item
@code{\numericTimeSignature} et @code{\defaultTimeSignature}
s'appliquent désormais en même temps à toutes les portées -- plus
précisément à toutes les portées d'un même contexte @code{Timing} --
afin de correspondre au comportement de @code{\time}.


@item
La commande de @emph{markup} @code{\rhythm} fait son apparition. Il
s'agit d'un moyen simple de mélanger du texte et du rythme comme, par
exemple, pour afficher une indication de « swing ».

@lilypond[verbatim,quote]
\relative {
  \tempo \markup {
    Swing
    \hspace #0.4
    \rhythm { 8[ 8] } = \rhythm { \tuplet 3/2 { 4 8 } }
  }
  b8 g' c, d ees d16 ees d c r8
}
@end lilypond


@item
La commande @code{\enablePolymeter} agit comme un raccourci lors de la
saisie pour déplacer les graveurs selon le besoin et permettre d'avoir
différentes métriques en parallèle. Le code :

@quotation
@verbatim
\layout {
  \context {
    \Score
    \remove Timing_translator
    \remove Default_bar_line_engraver
  }
  \context {
    \Staff
    \consists Timing_translator
    \consists Default_bar_line_engraver
  }
}
@end verbatim
@end quotation

@noindent
peut ainsi s'abréger en :

@quotation
@verbatim
\layout {
  \enablePolymeter
}
@end verbatim
@end quotation

Par ailleurs, le @code{Default_@/bar_@/line_@/engraver} a été supprimé.


@item
La nouvelle option @code{visible-over-note-heads} permet aux crochets de
n-olets de toujours s'afficher lorsqu'ils sont placés du côté des têtes
de note. Cette option peut s'utiliser avec le style par défaut de
visibilité des crochets de n-olet ou avec @code{#'if-no-beam}.

@lilypond[quote]
music = \relative c'' {
  \tupletNeutral \tuplet 3/2 { c16[ d e } f8]
  \tupletUp \tuplet 3/2 { c8 d e }
}

\new Voice {
  \relative c' {
    \time 2/4
    \override TupletBracket.visible-over-note-heads = ##t
    \once \override Score.TextMark.break-align-symbols =
            #'(time-signature)
    { \textMark \markup "default" \music }
    \override TupletBracket.bracket-visibility = #'if-no-beam
    { \textMark \markup \typewriter "'if-no-beam" \music }
  }
}
@end lilypond


@item
Les compteurs de mesures prennent en considération les mesures à
compter et les alternatives.

@lilypond[quote,line-width=15\cm]
\new Score \with {
  \consists Measure_counter_engraver
  \override MeasureCounter.font-encoding = #'latin1
  \override MeasureCounter.font-size = 1
  \override MeasureCounter.padding = 0.5
  \override MeasureCounter.font-series = #'bold
  alternativeNumberingStyle = #'numbers-with-letters
}
\new Voice \compressMMRests \relative {
  c'4-. 4-. 4-. 4-.
  r4 4-. 4-. r
  \startMeasureCount
  <<
    { R1 }
    \new CueVoice {
      \voiceTwo
      r4 c8( d) e-. g-.
    }
  >>
  R1*2
  \repeat volta 2 {
    c,8( d e g) c,( d e g)
  }
  \alternative {
    { c,8( d e g) c,( d e4) }
    { c8\< d e g c2\! R1*2 \bar "|." }
  }
  \stopMeasureCount
}
@end lilypond


@item
Les numéros de mesure peuvent se présenter au centre de la mesure comme
il est d'usage dans les musiques de film.

@lilypond[verbatim,quote]
\layout {
  \context {
    \Score
    centerBarNumbers = ##t
    barNumberVisibility = #all-bar-numbers-visible
  }
}

<<
  { \repeat unfold 3 { c'4 d' e' f' } }
  { \repeat unfold 3 { c'4 d' e' f' } }
>>
@end lilypond


@item
L'alignement des numéros de mesure présents en cours ou en fin de ligne
s'effectue désormais sur leur extrémité gauche. Il s'agit là de suivre
la recommandation d'Elaine Gould (@cite{Behind Bars}, p. 237) et le
consensus entre les développeurs lors de la discussion de ce problème.
Aucun changement n'intervient aux numéros portés en début de ligne.


@item
L'instruction @code{\bar ","} crée une barre de mesure raccourcie.

@lilypond[quote]
\new Staff \with {
  \omit Clef
  \omit TimeSignature
} \fixed c' {
  \cadenzaOn
  e2 f g a g \bar "," f g f d e\breve
}
@end lilypond


@item
Les types de barre prédéfinie qui suivent n'apparaissent plus sous
forme de simple barre lorsqu'ils surviennent en fin de ligne. Des types
de barre annotée, tel que @code{\bar "S-|"}, ont été ajoutés en
conséquence.

@lilypond[quote]
{
  R1 \bar ".|"
  R1 \bar ".|:"
  R1 \bar "[|:"
  R1 \bar "S"
  R1 \bar "S.|:"
  r4
}
@end lilypond


@item
L'instruction @code{\bar ""} n'est plus un préalable à l'affichage du
numéro de la première mesure. Il suffit désormais de régler la propriété
@code{barNumberVisibility} à @code{all-@/bar-@/numbers-@/visible} ou
l'un des autres réglages pour lesquels le premier numéro de mesure est
visible.

Notez bien qu'il s'agit d'un changement de comportement pour les
partitions dans lesquelles @code{barNumberVisibility} est réglé à
@code{all-@/bar-@/numbers-@/visible} ou équivalent et
@code{BarNumber@/.break-@/visibility} activé sans avoir de
@code{\bar ""}. Un numéro de mesure est désormais affiché au début. Il
s'agit bien du comportement attendu (@strong{tous} les numéros devraient
être visibles) mais, en raison d'une documentation probablement pas
assez explicite, certains utilisateurs ont opté pour ces réglages afin
d'afficher les numéros de mesure en cours de portée sauf pour la
première mesure. En pareil cas, il convient de tout simplement supprimer
la clause
@code{\set Score@/.barNumberVisibility = #all-@/bar-@/numbers-@/visible}
puisque @code{\override BarNumber@/.break-@/visibility = ##t} est le
réglage approprié et suffisant.


@item
Désormais, la commande @code{\break} insère toujours un saut,
outrepassant toutes les décisions par défaut quant aux points de
rupture. Par exemple, il n'est désormais plus nécessaire d'ajouter
@code{\bar ""} pour obtenir une rupture en cours de mesure.

La nouvelle commande @code{\allowBreak} insère un point de rupture
potentiel, sans le forcer, mais outrepasse les décisions par défaut à
l'instar de @code{\break}.


@item
Le type de barre de mesure @code{"-"} a été supprimé. @command{convert-ly}
le convertit en @code{""}. Il en résulte une légère différence dans
l'espacement horizontal lors d'un saut de ligne.


@item
@code{automaticBars} a été supprimé. @command{convert-ly} convertit
@code{automaticBars = ##f} en @code{measureBarType = #'()}.


@item
Au lieu de répéter le nom de glyphe en cours de ligne,
@code{\defineBarLine} accepte désormais la valeur @code{#t}.


@item
Le @code{Bar_engraver} interdisait jusqu'à présent un saut de ligne
entre deux barres de mesure ; il ne le fait dorénavant que lorsque la
propriété de contexte @code{forbidBreakBetweenBarLines} est activée
(réglée à @code{#t}), ce qui est le cas par défaut.


@item
En raison de modifications dans le fonctionnement interne de
l'instruction @code{\bar}, il n'est désormais plus possible de
l'instancier avant la création de contextes inférieurs par un
@code{\new} sous peine de créer une portée intempestive comme lors de
l'utilisation de commandes telles que @code{\override Staff@dots{}}
(voir @rprogram{Apparition d'une portée supplémentaire}).

@lilypond[verbatim,quote]
{
  \bar ".|:"
  <<
    \new Staff { c' }
    \new Staff { c' }
  >>
}
@end lilypond

La solution consiste à placer le @code{\bar} au sein même de la musique
dans chaque portée, comme c'est généralement le cas pour la plupart des
commandes.

@lilypond[verbatim,quote]
<<
  \new Staff { \bar ".|:" c' }
  \new Staff { \bar ".|:" c' }
>>
@end lilypond


@item
Le type de barre @code{"-span|"} crée un @notation{mensurstrich} --
impression des lignes de mensuration.

@lilypond[quote]
\new StaffGroup \with { measureBarType = "-span|" } <<
  \new Staff \fixed c'' { c4 d e f e d }
  \new Staff \fixed c' { a2 f2. g4 }
>>
@end lilypond


@item
Les contextes @code{Staff} utilisent désormais le nouveau
@code{Caesura_engraver} pour réaliser la commande @code{\caesura}.

@lilypond[quote]
\fixed c' {
  c2 \caesura d2
  e1 \caesura \once \set Staff.caesuraType = #'((scripts . (fermata)))
  f1
}
@end lilypond


@end itemize


@node Améliorations en matière d'expressivité
@unnumberedsec Améliorations en matière d'expressivité
@translationof Expressive mark improvements

@itemize
@item
Les événements attachés à des notes, tels que nuances ou articulations,
peuvent être différés d'une durée arbitraire à l'aide de @code{\after}.
Ceci permet de simplifier de nombreuses situations qui jusqu'alors
demandaient de recourir à une polyphonie et des silences invisibles.

@lilypond[verbatim,quote]
{
  \after 2 \turn g'2. a'4
  \after 2 \< b'1
  \after 2. \f c''
  <>\< \after 4 \> \after 2\! d''
}
@end lilypond


@item
La deuxième portion des soufflets tronqués bénéficie maintenant d'un
rembourrage à gauche. Ceci est conforme aux canons de la gravure et
règle le problème de décallage vertical qui pouvait intervenir en raison
de l'armure.

@lilypond[verbatim,quote]
\relative {
  \key a \major
  c''4^\< c c c \break c c c c\! |
}
@end lilypond


@item
Les terminaisons des soufflets peuvent désormais s'aligner sur la
gauche, au centre ou sur la droite des @emph{grobs} @code{NoteColumn} à
l'aide d'une dérogation à la propriété @code{endpoint-alignments}.

@lilypond[quote]
{
  c'2\< <c' d'>\! |
  \override Hairpin.endpoint-alignments = #`(,RIGHT . ,LEFT)
  c'2\< <c' d'>\! |
  \override Hairpin.endpoint-alignments = #`(,CENTER . ,CENTER)
  c'2\< <c' d'>\! |
}
@end lilypond


@item
Le positionnement des extensions de trille peut désormais se spécifier
comme pour toute indication d'articulation, autrement dit à l'aide de
@code{_\startTrillSpan} ou @code{^\startTrillSpan}.


@item
L'apparence des extensions de trille a été modifiée pour mieux
correspondre aux conventions classiques de la gravure. L'extension
s'arrête désormais juste avant la note qui suit, sans la chevaucher. Ce
sera juste avant l'altération si la note qui suit en est pourvue, et au
niveau de la barre si la prochaine note est dans la mesure suivante.

@lilypond[quote]
{
  \override Score.SpacingSpanner.spacing-increment = 2.1
  d''2\startTrillSpan 2\stopTrillSpan
  2\startTrillSpan deses''2\stopTrillSpan
  d''1\startTrillSpan 1\stopTrillSpan
}
@end lilypond


@item
Le décalage par défaut des points d'orgue a été élargi. Ceci permet de
pallier certains cas où, en présence d’une note pointée, ils étaient
trop proches des points et des autres objets.

@lilypond[quote]
\relative c''' {
  \tempo 4 = 60
  a4.
  a4.\fermata
  a4.\henzeshortfermata
  a4.\henzelongfermata
  a4.\shortfermata
  a4.\longfermata
  a4.\veryshortfermata
  a4.\verylongfermata
}
@end lilypond


@item
Le symbole de flageolet est désormais plus petit et un peu plus épais.
Ceci correspond plus aux partitions que l'on peut trouver et rend
inutile la retouche @code{\tweak font-size -3 \flageolet} jusqu'ici
recommandée.

@lilypond[quote]
{
  d''2^\flageolet d''_\flageolet
}
@end lilypond


@item
Le glyphe d'accent est un peu plus petit qu'auparavant. Ceci permet de
pallier certains cas où, par exemple, la présence d'un bécarre aurait
déplacé l'accent verticalement.

@lilypond[quote]
{
  f'!8[-> f'-> f'-> f'->]
}
@end lilypond


@item
Le glyphe de virgule stylisé, tel que celui utilisé par la commande
@code{\breathe}, adopte une forme plus habituelle.

@lilypond[quote]
{ f'2 \breathe f'2 }
@end lilypond

L'ancienne forme reste accessible sous le nom de « raltcomma » :

@lilypond[quote,verbatim]
{
  \override BreathingSign.text =
    \markup { \musicglyph "scripts.raltcomma" }
  f'2 \breathe f' |
}
@end lilypond


@item
La nouvelle propriété de contexte @code{breathMarkType} sélectionne le
marqueur produit par la commande @code{\breathe} parmi plusieurs types
prédéfinis.

@lilypond[verbatim,quote]
\fixed c' {
  \set breathMarkType = #'tickmark
  c2 \breathe d2
}
@end lilypond

@end itemize


@node Améliorations en matière de reprises
@unnumberedsec Améliorations en matière de reprises
@translationof Repeat improvements

@itemize
@item
Les alternatives peuvent se placer au sein même du bloc de répétition.

@lilypond[verbatim,quote]
\repeat volta 3 { c'1 \alternative { d' e' } f' }
@end lilypond


@item
Les numéros d'alternative peuvent se définir à l'aide de la commande
@code{\volta}.

@lilypond[verbatim,quote]
\repeat volta 3 c'1 \alternative { \volta 1 d' \volta 2,3 e' }
@end lilypond


@item
La nouvelle commande @code{\repeat segno} permet de gérer
automatiquement un certain nombre de formes @emph{da-capo} et
@emph{dal-segno}.

@lilypond[verbatim,quote]
music = \fixed c' {
  \repeat segno 2 {
    b1
  }
  \fine
}

\score { \music }
\score { \unfoldRepeats \music }
@end lilypond


@item
La nouvelle commande @code{\fine} insère une barre de mesure finale qui
interagit de façon optimale avec les barres de reprise. Placée à
l'intérieur d'une reprise, elle ajoute une instruction @emph{Fine} et
termine la musique lorsque les reprises sont expansées.

@lilypond[verbatim,quote]
music = \fixed c' {
  \repeat volta 2 {
    f1
    \volta 2 \fine
    \volta 1 b1
  }
}

\score { \music }
\score { \unfoldRepeats \music }
@end lilypond

@item
La commande @code{\volta} suprime la musique lorsque la répétition est
expansée.


@item
La commande @code{\unfolded} ajoute la musique lorsque la répétition est
expansée.


@end itemize


@node Améliorations en matière d'annotations éditoriales
@unnumberedsec Améliorations en matière d'annotations éditoriales
@translationof Editorial annotation improvements

@itemize
@item
Les nouvelles commandes @code{\staffHighlight} et
@code{\stopStaffHighlight} permettent de coloriser des fragments
musicaux.

@lilypond
\relative {
  \staffHighlight lightsteelblue
  c'4 e g c
  \staffHighlight lightpink
  d, f a d
  \staffHighlight lightsteelblue
  c, e g c
}
@end lilypond


@item
Le nouvel objet graphique @code{FingerGlideSpanner} permet d'indiquer le
glissé d'un doigt sur une corde passant d'une position à une autre. Il
peut se présenter sous différentes formes selon le style adopté ; l'image
ci-dessous affiche les styles @code{line}, @code{stub-left},
@code{stub-right} et @code{stub-both}.

@lilypond[quote]
mus = {
  \set fingeringOrientations = #'(right)
  <a'\glide-1>2.
  \set fingeringOrientations = #'(left)
  <d'-1>4
}

\score {
  {
    <>^"line"
    \mus
    <>^"stub-left"
    \override FingerGlideSpanner.style = #'stub-left
    \mus
    <>^"stub-right"
    \override FingerGlideSpanner.style = #'stub-right
    \mus
    <>^"stub-both"
    \override FingerGlideSpanner.style = #'stub-both
    \mus
  }
}
@end lilypond
@noindent
D'autres styles sont disponibles : @code{dashed-line},
@code{dotted-line}, @code{zigzag}, @code{trill}, @code{bow} et
@code{none}.


@item
La mise en forme des info-bulles est désormais modifiable.

@lilypond[quote]
\new Score \with {
  \consists Balloon_engraver
  \override SpacingSpanner.spacing-increment = 5
}
{
  \balloonLengthOn
  \balloonGrobText Rest #'(1 . 2) "rest"
  r4
  \once \override Score.BalloonText.Y-attachment = #CENTER
  \once \override Score.BalloonText.text-alignment-X = #CENTER
  \balloonGrobText Rest #'(1 . 3.5) "rest"
  r4
}
@end lilypond


@item
Il est désormais possible de placer un accord entre parenthèses.
Toutefois, la taille de la fonte utilisée pour les parenthèses devra
être ajustée manuellement.

@lilypond[quote]
\new Voice {
  \tweak Parentheses.font-size -2 \parenthesize <a'' b''>2
  <<
    { \tweak Parentheses.font-size 0 \parenthesize <ces des> }
    { \parenthesize ees' }
    { \tweak Parentheses.font-size -2 \parenthesize <c'' e''> }
  >>
}
@end lilypond


@item
Les objets étendus ou bandeaux peuvent être mis entre parenthèses.

@lilypond[quote]
{
  c'\parenthesize\< d'2.\!
  \parenthesize R1
}
@end lilypond


@item
Une version « temporelle » de la commande @code{\parenthesize} est
disponible. Elle prend en considération le chemin vers un objet
graphique : @code{\parenthesize @var{NomGrob}} ou @code{\parenthesize
@var{ContextName}.@var{GrobName}}. Cette commande se comporte comme un
@code{\once \override}. Cette interface vient en complément de la forme
déjà disponible @code{\parenthesize @var{événement}}, de manière
identique à @code{\footnote}.

@lilypond[verbatim,quote]
{
  \parenthesize NoteHead
  c'1
  \parenthesize Staff.KeySignature
  \key g \major
  c'1
}
@end lilypond


@item
L'ajout du @code{Melody_engraver} à un contexte @code{Voice} prend
désormais en compte le sens de la mélodie pour orienter la hampe de la
note sur la ligne médiane. Il fallait auparavant apporter une dérogation
spécifique à la propriété @code{Stem.neutral-direction}.

@lilypond[verbatim,quote]
\new Voice \with {
  \consists Melody_engraver
}
\relative c'' {
  \autoBeamOff
  g8 b a e g b a g |
  c b d c b e d c |
}
@end lilypond

La propriété de contexte @code{suspendMelodyDecisions} permet de
désactiver temporairement ce comportement, tout comme le faisait
@code{\override Stem.neutral-direction = #DOWN}.


@item
Le nouveau @code{Mark_tracking_translator} prend le pas sur le
@code{Mark_engraver} en matière de décision quant à la création d'une
marque. Le @code{Mark_engraver} se charge toutefois de contrôler la mise
en forme et le positionnement vertical du repère.

Par défaut, des @code{Mark_engravers} dans de multiples contextes
créent une séquence commune de repères. Lorsque des séquences
indépendantes sont préférables, il faut utiliser plusieurs
@code{Mark_tracking_translator}.


@end itemize


@node Améliorations en matière de mise en forme du texte
@unnumberedsec Améliorations en matière de mise en forme du texte
@translationof Text improvements

@itemize
@item
Les nouvelles commandes @code{\textMark} et @code{\textEndMark}
permettent d'ajouter entre les notes un texte arbitraire que l'on
appelle indication textuelle. Ces commandes constituent une amélioration
de la syntaxe utilisée précédemment avec la commande @code{\mark} à
laquelle on adjoignait un @emph{markup} -- autrement dit libeller
@code{\mark "@dots{}"} ou @code{\mark \markup @dots{}}.

@lilypond[verbatim,quote]
\fixed c' {
  \textMark "Text mark"
  c16 d e f e f e d c e d c e d c8
  \textEndMark "Text end mark"
}
@end lilypond

@code{\textMark} et @code{\textEndMark} sont désormais les moyens
recommandés de créer des indications textuelles. Le propos n'est pas ici
de décourager l'utilisation de @code{\mark}, mais de plutôt la réserver
à la création des marques-repères -- avec @code{\mark \default} ou
@code{\mark @var{nombre}} -- auxquelles il est souvent fait référence en
répétition.

Ces nouvelle commandes diffèrent de @code{\mark @var{markup}} par
quelques aspects. Alors que plusieurs indications peuvent survenir en un
même endroit, il ne peut y avoir qu'une seule occurrence de @code{\mark}
(un seul repère à la fois). Elles génèrent des objets graphiques du type
@code{TextMark} particulier, alors que @code{\mark} génère un objet
@code{RehearsalMark} que ce soit pour créer un repère ou une indication
textuelle. Cette distinction permet alors de gérer des réglages
différents pour les repères et les indications textuelles. L'alignement
engendré par ces nouvelles commandes est différent : l'indication créée par
@code{\textMark} sera toujours alignée par la gauche et celle créée par
@code{\textEndMark} le sera toujours par la droite ; l'alignement d'un
@code{RehearsalMark}, par contre, dépend du point d'ancrage de l'objet
sur lequel il doit s'aligner.

Voir @ruser{Indications textuelles} pour de plus amples détails.


@item
Sont désormais disponibles dans la fonte Emmentaler, des variantes
textuelles pour les glyphes de dièse, bémol, bécarre, double dièse et
double bémol. En mode @emph{markup}, ils sont accessibles par leur
valeur Unicode standard.

@lilypond[quote]
\markup \fontsize #6 \number "1 ♯ 2 ♭ 3 ♮ 4 𝄫 5 𝄪 6"
@end lilypond


@item
Il est désormais possible de contrôler la largeur et l'aspect de
certains chiffres Emmentaler à l'aide de fonctionnalités OpenType.

@lilypond[quote]
\markuplist
  \number
  \fontsize #6
  \override #'((padding . 3)
               (baseline-skip . 7)
               (box-padding . 0)
               (thickness . 0.1))
  \table #'(-1 -1 -1 -1) {
      0123456789 \box 147 \concat { \box 1 \box 4 \box 7 }
    \normal-text \normalsize "(time signatures)"
    \override #'(font-features .("cv47")) {
      0123456789 \box 147 \concat { \box 1 \box 4 \box 7 } }
    \normal-text \normalsize "(alternatives)"
    \override #'(font-features .("tnum" "cv47" "-kern")) {
      0123456789 \box 147 \concat { \box 1 \box 4 \box 7 } }
    \normal-text \normalsize "(fixed-width)"
    \override #'(font-features . ("tnum" "cv47" "ss01")) {
      0123456789 \box 147 \concat { \box 1 \box 4 \box 7 } }
    \normal-text \normalsize "(figured bass)"
    \override #'(font-features . ("cv47" "ss01")) {
      0123456789 \box 147 \concat { \box 1 \box 4 \box 7 } }
    \normal-text \normalsize "(fingering)"
  }
@end lilypond


@item
@code{\smallCaps} est maintenant opérationnel sur tout @emph{markup},
non plus uniquement sur des chaînes brutes.


@item
La syntaxe permettant de gérer des conditions pour les @emph{markups} a
gagné en flexibilité et en simplicité. Elle utilise les nouvelles
commandes de @emph{markup} @code{\if} et @code{\unless}. Voici quelques
uns des changements apportés :

@multitable {@code{\on-the-fly #not-part-first-page @dots{}}} {@code{\unless \on-first-page-of-part @dots{}}}
@headitem Syntaxe version 2.22 @tab Syntaxe version 2.24
@item  @code{\on-the-fly #first-page @dots{}}
@tab @code{\if \on-first-page @dots{}}
@item  @code{\on-the-fly #not-part-first-page @dots{}}
@tab @code{\unless \on-first-page-of-part @dots{}}
@item  @code{\on-the-fly #(on-page @var{n}) @dots{}}
@tab @code{\if \on-page #@var{n} @dots{}}
@end multitable


@item
La nouvelle commande de @emph{markup} @code{string-lines} permet de
couper une chaîne à un caractère donné. La coupure intervient par défaut
au saut de ligne, et les éventuels espaces sont ignorés. La liste
résultante de @emph{markups} peut faire l'objet d'une mise en forme
particulière. Cette fonctionnalité constitue un moyen tout à fait adapté
pour ajouter des couplets à une chanson.

@lilypond[quote]
\markup
  \column
  \string-lines
    "Twinkle, twinkle, little star,
     How I wonder what you are!
     Up above the world so high,
     Like a diamond in the sky.
     Twinkle, twinkle, little star,
     How I wonder what you are!"
@end lilypond


@item
La nouvelle commande de @emph{markup} @code{\align-on-other} déplace un
@emph{markup} comme s'il était aligné sur un autre.

@lilypond[quote]
\markup \column {
  1
  12
  \align-on-other #X #RIGHT 12
                     #LEFT 12345
  123
}
@end lilypond


@item
Sont maintenant disponibles les deux commandes de @emph{markup}
@code{\with-dimension} et @code{\with-dimension-from}. Elles sont
similaires à @code{\with-dimensions} et @code{\with-dimensions-from}, à
ceci près qu'elles permettent de ne jouer que sur une seule des deux
dimensions.


@item
Sont maintenant disponibles les commandes de @emph{markup}
@code{\with-true-dimension} et @code{\with-true-dimensions}. Elles
procurent l'étendue réelle de la surface encrée, qui peut être quelque
peu différente de l'étendue par défaut pour certains glyphes en raison
des contraintes de régularité du texte.

@lilypond[quote]
\markup
  \fontsize #10
  \override #'((box-padding . 0) (thickness . 0.02))
  \line
  \box {
    \musicglyph "scripts.trill"
    \with-true-dimensions \musicglyph "scripts.trill"
  }
@end lilypond


@item
Des textes de remplacement peuvent désormais changer des chaînes dans
tout @emph{markup}, au lieu de modifier une chaîne en particulier.

@lilypond[verbatim,quote]
\markup
  \replace #`(("2nd" . ,#{ \markup \concat { 2 \super nd } #}))
  "2nd time"
@end lilypond


@item
La commande de @emph{markup} @code{\with-string-transformer} est
désormais disponible. Elle interprète un @emph{markup} avec l'un des
« transformateurs de chaîne » installés. Le transformateur est appelé
lorsque l'interprétation du @emph{markup} requiert l'interprétation
d'une chaîne et permet d'opérer des modifications sur cette chaîne,
comme par exemple en basculer la casse.


@item
La fonction @code{markup->string} convertit un @emph{markup} dans une
réprésentation approximative de chaîne de caractères. Ceci est utile
pour générer des métadonnées PDF ainsi que les paroles et repères en
MIDI. Il est donc possible de créer des commandes pour @emph{markups}
personnalisées afin de retraiter les chaînes converties par
@code{markup->string}, comme par exemple

@example
#(define-markup-command (upcase layout props arg) (string?)
   #:as-string (string-upcase arg)
   (interpret-markup layout props (string-upcase arg)))
@end example


@end itemize


@node Nouveautés en matière de notation spécialisée
@unnumbered Nouveautés en matière de notation spécialisée
@translationof New for specialist notation


@node Améliorations pour les cordes frettées
@unnumberedsec Améliorations pour les cordes frettées
@translationof Fretted string instrument improvements

@itemize
@item
Ajout des accordages pour banjo @code{banjo-double-c} et
@code{banjo-double-d}.


@item
Le nouvel objet graphique @code{BendSpanner} permet, dans le cadre d'un
@code{TabStaff}, d'indiquer une désinance. En plus de l'apparence par
défaut sont disponibles les styles @code{'hold}, @code{'pre-bend} et
@code{'pre-bend-hold}.

@lilypond[quote]
mus = {
  d4\5\^ e\5\^ d2\5
  c'4\3\^ d'\3\bendHold \^ d'\3\^ c'\3
  \grace c'4\3\preBendHold \^ d'\3\bendHold \^ d'\3\^ c'2\3
  \grace c'4\3 \preBend \^ d'1\3
}

\score {
  \new StaffGroup
  <<
    \new Staff { \clef "G_8" \mus }
    \new TabVoice \mus
  >>
  \layout {
    \context {
      \Voice
      \omit StringNumber
    }
    \context {
      \TabVoice
      \consists Bend_spanner_engraver
    }
  }
}
@end lilypond

@end itemize


@node Améliorations pour la notation des percussions
@unnumberedsec Améliorations pour la notation des percussions
@translationof Percussion improvements

@itemize
@item
Ajout du style de notation pour percussions @code{weinberg-drums-style}
basé sur les travaux de standardisation de Norman Weinberg.

@end itemize


@node Améliorations pour la notation des instruments à vent
@unnumberedsec Améliorations pour la notation des instruments à vent
@translationof Wind instrument improvements

@itemize
@item
Des détails peuvent désormais s'ajouter à un @code{\woodwind-diagram}, y
compris l'angle d'un trou partiellement bouché ou l'indication non
graphique d'une clé de trille.

@lilypond[verbatim,quote]
\markup {
  \override #'(graphical . #f)
  \override #'(woodwind-diagram-details . ((fill-angle . 90)
                                           (text-trill-circled . #f)))
  \woodwind-diagram #'flute #'((cc . (one1h))
                               (lh . ())
                               (rh . (besT)))
}
@end lilypond

@end itemize


@node Améliorations pour la notation des accords
@unnumberedsec Améliorations pour la notation des accords
@translationof Chord notation improvements

@itemize
@item
Les grilles harmoniques sont désormais prises en charge.

@lilypond[quote,indent=0\cm,noragged-right]
\new ChordGrid \chordmode {
  g2:7+ bes4:m7 ees:7
  \repeat percent 2 {
    a2:m7 b2:7.11+
  }
  e4:m7 e4:m7/d a4:7/cis c4:m7
}
@end lilypond


@item
Dans un @code{ChordNames}, les silences multimesure forcent désormais
l'apparition du symbole « N.C. » comme pour des silences normaux.


@item
En matière de basse chiffrée, un @code{_} crée désormais un un chiffre
vide occupant de l'espace.

@lilypond[verbatim, quote]
\figures {
  <8 _ 4]> <_ 5+ 3>
}
@end lilypond


@item
La mise en forme de la basse chiffrée s'est améliorée. En particulier,
sa taille par défaut est réduite à une valeur que l'on retrouve dans
nombre d'éditions @emph{Urtext} de musique baroque.


@item
La basse chiffrée utilise désormais par défaut des glyphes dessinés
spécifiquement dans ce cadre, à savoir les @code{6\\}, @code{7\\} et
@code{9\\}. De même, des glyphes spécifiques seront utilisés par défaut
en présence d'un signe plus après le chiffre pour les symboles
@code{2\+}, @code{4\+} et @code{5\+}.

@lilypond[quote]
\figures {
  \set figuredBassPlusDirection = #RIGHT
  <7\\ 6 4 2\+> <4\+ _-> <3 5\+ 3 > <6\\ 4 3> <9\\>
}
@end lilypond

L'utilisation de ces glypes dans le cadre d'un @emph{markup} s'obtient
à l'aide de la commande @code{\figured-bass}.

@item
En matière de basse chiffrée, il est désormais possible de placer les
altérations entre crochets.

@lilypond[quote]
\figures {
  <7 [5 3[+]]> <5[!]> <[5!]>
}
@end lilypond


@end itemize


@node Améliorations pour les notations anciennes
@unnumberedsec Améliorations pour les notations anciennes
@translationof Ancient notation improvements

@itemize
@item
Le nouveau contexte  @code{VaticanaLyrics} est similaire au contexte
@code{Lyrics}, à ceci près qu'il fournit un style d'hyphénation utilisé
communément dans le style des éditions vaticanes, à savoir un trait
d'union simple accolé à la syllabe de gauche.


@item
Les commandes prédéfinies pour les divisions grégoriennes ne sont plus
des variantes de @code{\breathe}. @code{\divisioMinima},
@code{\divisioMaior}, @code{\divisioMaxima} et @code{\virgula} sont des
variantes d'un @code{\caesura} de base. @code{\finalis} équivaut à
@code{\section}.

@code{MensuralStaff} et @code{VaticanaStaff} ont recours au
@code{Divisio_@/engraver} pour interpréter ces commandes, ainsi que
@code{\repeat volta} et @code{\fine}.

@lilypond[verbatim,quote]
\new MensuralStaff \fixed c' {
  \repeat volta 2 { f2 f }
  g1
  a1 \section
  b1 \fine
}
@end lilypond


@item
@code{KievanStaff}, @code{MensuralStaff}, @code{PetrucciStaff} et
@code{VaticanaStaff} acceptent désormais qu'un saut de ligne intervienne
n'importe où, sans qu'une barre de mesure @code{""} soit créée.


@item
Dans un @code{GregorianTranscriptionStaff}, les @emph{divisiones} sont
désormais gravées comme des objets graphiques @emph{(grobs)}
@code{BarLine}. Pour les modifier en @emph{grobs} @code{Divisio}, il
faut mentionner @code{\EnableGregorianDivisiones}.


@item
@code{GregorianTranscriptionStaff} autorise désormais un saut de ligne
apèrès n'importe quelle note et n'a plus recours au
@code{Time_signature_engraver}.

@item
@code{GregorianTranscriptionVoice} n'a désormais plu recours au
@code{Stem_engraver}.


@end itemize


@subsubheading Améliorations pour les musiques du monde

@itemize
@item
LilyPond prend désormais en charge la musique persane. Deux glyphes
d'altération ont été ajoutés à cet effet : @emph{sori} et @emph{koron}.

@lilypond[verbatim,quote,line-width=14.5\cm]
\include "persian.ly"

\relative c' {
  \key d \chahargah
  bk'8 a gs fo r g ak g |
  fs ek d c d ef16 d c4 |
}
@end lilypond

@end itemize


@node Autres améliorations diverses
@unnumbered Autres améliorations diverses
@translationof Miscellaneous improvements

@itemize
@item
Dans le cadre de la fonte Emmentaler, les têtes de notes dont l'aspect
est identique et pour lesquelles la seule différence réside dans
l'orientation de leur hampe ont été consolidées en un glyphe unique. Par
exemple, les glyphes @code{noteheads@/.u2triangle} et
@code{noteheads@/.d2triangle} ont été remplacés par le seul glyphe
@code{noteheads@/.s2triangle}. Les paires de tête de note ayant un aspect
différent selon l'orientation de la hampe conservent leur distinction.

Par ailleurs, la propriété @code{stem-attachment} des objets graphiques
@code{NoteHead} renvoie le point d'attachement réel selon l'orientation
de hampe en lieu et place d'un hypothétique point d'attachement d'une
hampe ascendante.


@item
Deux glyphes redondants ont été supprimés des fontes Emmentaler :
@code{scripts.trillelement} -- utilisez @code{scripts.trill_element} en
remplacement -- et @code{scripts.augmentum} -- à remplacer par
@code{dots.dotvaticana}.


@item
L'utilisation de @code{\paper @{ bookpart-level-page-numbering = ##t@}}
permet d'individualiser la numérotation de page des parties d'un
ouvrage. Dans le cas où l'instruction s'applique à toutes les parties,
chacune d'entre elles aura sa propre séquence, en partant de 1 par
défaut. Cette instruction peut aussi apparaître dans une partie
spécifique, comme par exemple un propos liminaire dont la pagination
peut accessoirement se présenter en chiffres romains grâce à
l'instruction @code{page-number-type = #'roman-lower}.


@item
La nouvelle fonction de rappel pour objet graphique
@code{break-alignment-list} permet de renvoyer une valeur différente
selon le positionnement d'un @emph{grob} par rapport à une rupture. Elle
permet, par exemple, de fournir un alignement du @emph{grob} différent
selon qu'il est positionné en début, en cours de ligne ou à la fin.

@lilypond[quote]
\score {
  { \repeat unfold 8 c' }
  \layout {
    \context {
      \Score
      barNumberVisibility = #all-bar-numbers-visible
      \override BarNumber.break-visibility = #'#(#t #t #t)
      \override BarNumber.self-alignment-X =
        #(break-alignment-list CENTER LEFT CENTER)
    }
  }
}
@end lilypond


@item
Le nouveau @code{Mark_performer} crée des événements MIDI à l'instar du
@code{Mark_engraver} pour les sorties imprimables.


@item
Les propriétés de @code{PaperColumn} et @code{NonMusicalPaperColumn}
telle que @code{NonMusicalPaperColumn.line-@/break-@/system-@/details}
acceptent désormais des dérogations au fil de la musique à l'aide d'une
simple instruction @code{\once \override}. Elles consituaient
jusqu'alors une exception, requérant l'utilisation de la commande
@code{\overrideProperty}.


@item
Les nouvelles propriétés @code{show-horizontal-skylines} et
@code{show-vertical-skylines} permettent d'afficher les lignes d'horizon
d'un objet. Ces propriétés sont beaucoup plus flexibles que
l'utilisation de l'option @code{debug-skylines} dans la mesure où elles
sont opérationnelles avec tous les objets graphiques. Bien que prévu à
l'origine pour le débogage de LilyPond, ceci s'avère fort utile lorsque
l'on tente de comprendre les décisions en matière d'espacement ou la
modification de stencils en Scheme.

@lilypond[quote]
#(set-global-staff-size 40)

{
  \override Staff.Clef.show-vertical-skylines = ##t
  \override Accidental.show-horizontal-skylines = ##t
  cis'
}
@end lilypond


@item
La nouvelle commande @code{\vshape} se comporte comme @code{\shape}, à
ceci près qu'elle affiche les points de contrôle et le polygone qui les
enveloppe, afin de faciliter les ajustements.

@lilypond[verbatim,quote]
{ a1\vshape #'((0 . 0) (0 . 0.5) (0 . 0.9) (0 . 0.4))^( c'1) }
@end lilypond


@item
L'instruction @code{\markup \path} est désormais également opérationnelle
pour une sortie SVG même si le chemin n'est pas initialisé par une
commande @code{moveto} ou @code{rmoveto}. Elle accepte par ailleurs les
raccourcis équivalents SVG (@code{moveto} = @code{M}, etc.).


@item
@code{set-default-paper-size} et @code{set-paper-size} acceptent
désormais des tailles de papier personnalisées.

@example
#(set-default-paper-size '(cons (* 100 mm) (* 50 mm)))
@end example


@item
@command{lilypond-book} prend en charge deux nouvelles options pour le
traitement des extraits : @option{paper-width} et @option{paper-height}
permettent de déterminer une taille particulière de papier.


@item
@command{lilypond-book} prend en charge la nouvelle option
@option{inline} pour le traitement d'extraits musicaux. Ceci permet de
faire apparaître des bribes de partition, comme
@lilypond[inline,staffsize=11]{
  { \time 2/4 r8 g'[ g' g'] | es'2 }
}
au sein même d'un paragraphe de texte.


@item
Le script @command{lilypond-book} autorise désormais l'utilisation
d'accolades dans les arguments des commandes @code{\lilypond} (pour
@LaTeX{}) et @code{@@lilypond} (pour Texinfo).


@item
@command{lilypond-book} ajoute désormais le répertoire courant comme
dernière entrée pour la recherche des fichiers inclus, au lieu de le
placer en premier dans la liste des chemins spécifiés. Ainsi, les
fichiers situés dans les dossiers d'inclusion prennent le pas sur
ceux du même nom dans le répertoire courant.  L'effet ne sera visible
que dans le cas où existent des fichiers du même nom de part et d'autre.


@item
La nouvelle fonction Scheme @code{universal-@/color} procure une palette
de huit couleurs conçue pour lever certaines ambiguïtés dont souffrent
les gens atteints de dyschromatopsie.

@lilypond[quote]
\markup \bold \column {
  \with-color #(universal-color 'black) black
  \with-color #(universal-color 'orange) orange
  \with-color #(universal-color 'skyblue) skyblue
  \with-color #(universal-color 'bluegreen) bluegreen
  \with-color #(universal-color 'yellow) yellow
  \with-color #(universal-color 'blue) blue
  \with-color #(universal-color 'vermillion) vermillion
  \with-color #(universal-color 'redpurple) redpurple
}
@end lilypond


@item
L'option @code{-dembed-@/source-@/code} permet maintenant d'embarquer
également les images ajoutées par @code{\epsfile} ainsi que les fichiers
inclus par @code{\verbatim-file}.


@item
La valeur par défaut de l'option @code{aux-files} est désormais fixée
à @code{#f}. Lorsque LilyPond est lancé avec l'argument
@code{-dbackend=eps} et que sont nécessaires les fichiers @file{.tex}
et @file{.texi}, il faut désormais specifier explicitement l'option
@code{-daux-files}. Les formats pour les images @code{lilypond-book}
peuvent se définir séparément selon qu'il s'agit de la page (donc une
sortie PNG pour du format HTML) ou des images indépendantes par système
(pour des formats imprimables EPS ou PDF) à l'aide respectivement des
sous-options @code{-dtall-page-formats} et
@code{-dseparate-page-formats}.


@item
L'unité « big point » (1@dmn{bp} = 1/72@dmn{in}) est désormais
accessible en ajoutant @code{\bp} à la dimension saisie.


@item
Les traducteurs définis en Scheme et utilisables à la fois dans le cadre
d'un @samp{\layout} et d'un @samp{\midi} peuvent désormais être créés à
l'aide de @code{make-translator}. Les exécutants définis en Scheme, qui
ne peuvent s'utiliser que dans un @samp{\midi} se créent à l'aide de
@code{make-performer}. Ces macros fontionnent tout comme la macro
préexistante @code{make-engraver} qui permet de créer un graveur,
uniquement utilisable dans un @samp{\layout}.


@item
Les traducteurs définis en Scheme peuvent désormais définir un nouveau
connecteur dénommé @code{pre-process-music}. Celui-ci sera appelé par
tous les traducteurs, après tous les @emph{listeners} mais préalablement
aux connecteurs @code{process-music}. Ceci peut s'utiliser pour un
traitement qui dépend de l'intégralité des événements entendus mais
nécessite de définir des propriétés de contexte avant que d'autres
traducteurs les lisent.


@item
Les traducteurs Scheme peuvent désormais contenir des @emph{listeners}
libellés ainsi :

@example
(listeners
 ((event-class engraver event #:once)
  ...))
@end example

Ils ne sont jamais déclenchés plus d'une fois par pas dans le temps. Ils
émettront un avertissement lorsqu'ils recevront deux événements dans un
même pas, sauf si ces événements sont équivalents.


@item
Une même définition d'objet graphique peut désormais s'utiliser pour
créer des @emph{grobs} de classe différente (@code{Item},
@code{Spanner}, @code{Paper_column}, @code{System}). Dans le cadre de
cette évolution, les types de @emph{grob} @code{FootnoteItem} et
@code{FootnoteSpanner} ont été rassemblés en un unique
type @code{Footnote}. De la même manière, @code{BalloonTextSpanner} et
@code{BalloonTextItem} ont été unifiés en @code{BalloonText}.

Lorsque la définition du @emph{grob} ne requiert pas de classe, les
graveurs doivent décider de la classe à utiliser pour créer le
@emph{grob}. Pour ceux qui créent leurs propres graveurs en Scheme, cela
signifie qu'il faudra utiliser soit @code{ly:@/engraver-@/make-@/item},
soit @code{ly:@/engraver-@/make-@/spanner}. La fonction utilitaire
@code{ly:@/engraver-@/make-@/sticky} permet de prendre en charge le cas
des @emph{sticky grobs} tels que notes de bas de page et infobulles.
Elle crée un @emph{grob} de la même classe qu'un autre et gère la
parenté et les attachements.


@item
La nouvelle option @code{-dcompile-scheme-code} pour la ligne de
commande -- on peut aussi l'inclure en tête de fichier LilyPond par une
ligne @code{#(ly:set-@/option 'compile-@/scheme-@/code)} -- permet un
meilleur diagnostic lorsque l'exécution de code Scheme provoque une
erreur. En interne, ceci utilise le compilateur de byte fournit par
guile, en lieu et place de l'interpréteur.

Néanmoins, en raison d'une limitation de Guile, il n'est pas possible à
ce jour de traiter au-delà de quelques milliers d'expressions Scheme. Il
faut aussi tenir compte du fait que le compilateur de Guile diffère
quelque peu de l'interpréteur. Par exemple, les parties constantes des
quasicitations sont traduites en constantes réelles de manière plus
agressive, ce qui a pour conséquence qu'un code comme @code{(let ((x 4))
(sort! `(,x 3 2 1)))} produira une erreur puisque le « cdr » de la liste
quasicitée est une constante, et faire subir une mutation à une donnée
littérale est une erreur pour Scheme. (Dans ce cas d'espèce, le code
pourrait éviter l'erreur s'il avait été utilisé un simple @code{sort} --
qui n'est pas destructif -- ou en créant une nouvelle liste à chaque
fois avec un @code{(list x 3 2 1)}).

De plus, cette option n'est à ce jour pas fonctionnelle sur Windows.

@end itemize


@node Notes sur Guile 2.2
@unnumbered Notes sur Guile 2.2
@translationof Notes on Guile 2.2

LilyPond utilise désormais Guile 2.2 au lieu de Guile 1.8.  Cette
section liste quelques unes des incompatibilités que l'on
rencontre le plus fréquemment en portant du code écrit pour Guile
1.8 vers Guile 2.2.

Un liste détaillée des changements apportés à Guile est disponible
dans le fichier
@uref{https://git.savannah.gnu.org/cgit/guile.git/tree/NEWS,
@file{NEWS}} des sources de Guile.

@itemize
@item
La fonction @code{format} requiert un premier argument qui est un
booléen ou un port.  Cet argument était facultatif en Guile@tie{}1.8.
Pour que la fonction renvoie la sortie formatée comme une chaîne de
caractères, il faut passer @code{#f} pour cet argument, c'est à dire
utiliser @code{(format #f "@var{chaîne}" @var{arguments} @dots{})}
au lieu de @code{(format "@var{chaîne}" @var{arguments} @dots{})}.

@item
Les règles sur les définitions internes (les @code{define} qui ne
sont pas au plus haut niveau du fichier mais à l'intérieur
d'autres expressions) sont devenues plus strictes.  En particulier,
on ne peut plus utiliser @code{define} dans certains contextes où
une expression est attendue.  À titre d'exemple, ce code n'est
plus valide :

@example
(if (not (defined? 'variable))
    (define variable 'valeur))
@end example

Dans ce cas précis, une solution est

@example
(define variable
        (if (not (defined? 'variable))
        'valeur
        variable))
@end example


@item
Les chaînes de caractères sont désormais constituées de caractères Unicode.
Auparavant, un caractère Unicode s'étendait sur plusieurs caractères.
De plus, les fonctions de Guile dédiées au traitement des chaînes de
caractères prennent maintenant en charge l'Unicode.

@item
Certaines fonctions numériques renvoient des résultats exacts dans
des cas où le résultat était auparavant inexact.  Par exemple,
@code{(sqrt 4)} renvoie maintenant @code{2} (un entier) au lieu de
@code{2.0}.

@end itemize


@ifhtml
Pour des annonces plus anciennes, rendez-vouz aux pages
@uref{https://lilypond.org/doc/v2.22/Documentation/changes/},
@uref{https://lilypond.org/doc/v2.20/Documentation/changes/},
ou @uref{../,remontez} à l'index de la documentation.


@end ifhtml

@bye
