Autres améliorations diverses (LilyPond Changes)

## Autres améliorations diverses

- La commande `\tempo` accepte désormais des valeurs rationnelles exactes. Le formateur par défaut arrondi au quart le plus proche ; la propriété de contexte `tempoCountPrecision` permet de le contrôler.

  >     \fixed c' {
  >       \once \set Timing.tempoCountPrecision = #1/1000000
  >       \tempo 4 = #200/3
  >       g4 e2 f4
  >     }

- La nouvelle fonction Scheme `ly:parser-define-once!` définit une variable qui ne l’aurait pas déjà été.
- La propriété de contexte `timeSignatureFraction` est déclarée obsolète, au profit de `timeSignature`. La nouvelle propriété accepte des métriques subdivisées ou alternatives, en plus des simples fractions jusqu’à présent prises en charge. Accéder à l’ancienne propriété résultera pour la nouvelle en une simple fraction et déclenchera un avertissement.
- `(make-music 'Music)` et `(make-music 'Event)` créent désormais des expressions musicales dont la propriété `void` est définie par défaut à`#t`. La fonction `empty-music` a été supprimée au profit de `(make-music 'Music)`. Le nouveau prédicat `unspecified-music?` reconnaît toute expression musicale affublée d’un `void`.
- La nouvelle fonction Scheme `ly:number->duration` convertit une durée exprimée en unité relative de ronde en `ly:duration`. Le log, le nombre de points et le facteur d’échelonnement sont déterminés automatiquement.
- Les commandes de markup `\hspace` et `\vspace` permettent d’insérer de l’espace, qui peut être négatif. Les autres objets sont déplacées en conséquence. Ce déplacement peut s’indiquer par une flèche qui s’imprimera à l’aide de la nouvelle commande `annotate-moving`. Il est à noter que ces flèches ne reflètent pas l’étendue réelle des objets créés par `\vspace` et `\hspace`; on pourrait utiliser `\box` à cette fin.

  >     \markup {
  >       left \annotate-moving \hspace #4 right
  >       \column { top \annotate-moving \vspace #-4/3 bottom }
  >     }

- La nouvelle commande `\contextPropertyCheck` vérifie qu’une propriété est définie à une valeur attendue ou n’est pas définie dans un contexte spécifique.
- Un certain nombre de propriétés de contexte qui jusqu’à présent reposaient sur `ly:moment` prennent dorénavant des nombres rationnels. Afin de faciliter cette transition, chaque propriété numérique est appairée avec une propriété de secours `ly:moment`. L’utilisation d’une propriété de secours accède de manière transparente à la propriété numérique et déclenche un avertissement.

  > Propriété de contexte obsolète | Nouvelle propriété de contexte
  > `baseMoment` | `beatBase`
  > `completionUnitAsMoment` | `completionUnit`
  > `gridIntervalAsMoment` | `gridInterval`
  > `measureLengthAsMoment` | `measureLength`
  > `minimumPageTurnLength` | `pageTurnMinimumRestLength`
  > `minimumRepeatLengthForPageTurn` | `pageTurnMinimumRepeatLength`
  > `proportionalNotationDurationAsMoment` | `proportionalNotationDuration`
  > `tempoWholesPerMinuteAsMoment` | `tempoWholesPerMinute`
  > `tupletSpannerDurationAsMoment` | `tupletSpannerDuration`
  > `voltaSpannerDurationAsMoment` | `voltaSpannerDuration`

- `\tempo dur = min - max` déterminait la propriété de contexte `tempoWholesPerMinute` après arrondi à l’entier le plus proche. Ceci n’est plus le cas. Par voie de conséquence, le tempo MIDI peut être modifié dans certains cas.
- Les fonctions Scheme `duration-length` et `ly:duration-length` ont été respectivement renommées en `ly:duration->number` et `ly:duration->moment`.
- La nouvelle fonction Scheme `ly:parser-append-to-include-path` ajoute son argument au chemin de recherche courant de l’analyseur.
- La valeur de la propriété de contexte `timeSignatureSettings` utilise désormais le symbole `beatBase` en remplacement de `baseMoment`. `convert-ly` n’est pas en mesure de traiter ce changement.
- L’inclusion d’images PNG est désormais possible à l’aide de la commande de markup `\image`. Ceci vient en supplément de la commande `\epsfile` pour les images EPS.

  La commande `\image` traite aussi bien les images PNG que EPS, à ceci près que la commande `\image` insère un fond blanc, contrairement à `\epsfile`.

- La nouvelle commande de markup `\qr-code` permet d’insérer un QR-code de la taille spécifiée pour l’URL correspondante. Ceci peut servir à fournir un lien vers le site du compositeur ou de l’éditeur, ou bien vers les sources LilyPond ou des enregistrements, etc.

  >     \markup \qr-code #10 "https://lilypond.org"

- Des parenthèses pour texte de markup ont été ajoutées aux fontes Emmentaler, pour s’harmoniser avec les nombres (contrairement à celles déjà disponibles pour les altérations).
- Ont été ajoutés à la fonte Emmentaler les glyphes figure-dash (U+2012), en-dash (U+2013) (quart de catradin) et slash (U+002F).
- Une espace pour nombres (U+2007), une espace fine (U+2009) et une espace ultrafine (U+200A) ont été ajoutées à la fonte Emmentaler.
- L’option `-dinclude-settings` peut désormais apparaître à plusieurs reprises, afin de pouvoir inclure différentes feuilles de style.
- Dans l’utilisation conjointe de LaTeX et `lilypond-book`, les images au fil du texte sont désormais décalées verticalement. Ce décalage peut se contrôler en ligne de commande à l’aide de l’option `--inline-vshift` et, localement, en ajoutant `inline` en argument aux options de l’extrait.
- Il est possible d’utiliser en ligne de commande les diverses options de `musicxml2ly` en tant qu’options de la commande `musicxmlfile` de `lilypond-book`. Bien que disponible depuis la version 2.15.9 publiée en 2011, ceci n’était jusqu’alors pas documenté.
- Deux nouvelles options en ligne de commande font leur apparition : `-dfirst` and `-dlast`. Elles sont équivalentes aux réglages respectifs de `showFirstLength` et `showLastLength` dans un fichier LilyPond. Par exemple, taper

      lilypond -dlast=R1*5 ...

  aura pour résultat que LilyPond générera seulement les cinq dernières mesure (partant du principe d’une métrique à 4/4).

- Est désormais disponible un nouveau manuel constituant un index de tous les objets graphiques (grobs) de LilyPond. Il est basé sur le travail de Joram Berger pour LilyPond 2.19.
- LilyPond prend en charge les annotations au fil du texte, autrement dit des sortes de notes de bas de page entre les systèmes. Bien que ce ne soit pas nouveau, puisque disponible depuis la version 2.15.17 publiée en 2011, cette possibilité n’était pas si stable et manquait de documentation jusqu’à présent.
- Le script `lilysong` a été supprimé. En dehors du fait qu’il ne disposait d’aucune documentation, il n’était plus maintenu depuis fort longtemps. De plus, il reposait sur un programme externe de synthèse vocale – `festival` – laissé à l’abandon.
- Deux nouveaux styles sont disponibles pour la propriété d’objet graphique `space-alist` : `shrink-space` et `semi-shrink-space`. Ils contractent les espaces au lieu de les étendre. Ils sont aussi directement utilisés par LilyPond afin d’améliorer le formatage des portées resserrées.
- Le binaire `lilypond` dispose d’une nouvelle option en ligne de commande, `-dstaff-size`, pour régler la taille globale des portées. Elle est équivalente à la présence d’un `set-global-staff-size` dans un fichier LilyPond.
- En remplacement des fonctions `\bookOutputName` et `\bookOutputSuffix`, nous recommandons dorénavant l’utilisation des variables de papier `output-filename` et `output-suffix`. Bien que les premières restent pleinement fonctionnelles, ces dernières sont plus cohérentes et facilement compréhensibles, notamment si elles sont combinées avec des variables de papier prédéfinies.
- La propriété `Stem.details.lengths` accepte maintenant des paires en tant qu’éléments de liste. Ceci permet de définir séparément les longueurs de hampe ascendante ou descendante.
- La fonction `ly:self-alignment-interface::aligned-on-x-parent` – utilisée par de nombreux objets graphiques pour calculer leur x-offset – écoute désormais la nouvelle propriété `X-alignment-extent` de `PaperColumn`. Activée par défaut, elle fournit une largeur de secours au grob `PaperColumn` dans le cas où il ne contiendrait pas de tête de note. Ceci permet d’aider à l’alignement des scripts de nuance attachés à des silences invisibles, entre autres.

  >     music =
  >       \new Staff <<
  >         { f'2 g'2 }
  >         { s4\f s\f s\f s\f }
  >       >>

  >     \score {
  >       \music
  >     }

  >     \score {
  >       \music

  >       \layout {
  >         \context {
  >           \Score
  >           \override PaperColumn.X-alignment-extent = ##f
  >         }
  >       }
  >     }

- Les objets `BassFigureContinuation` prennent désormais en charge la `horizontal-line-spanner-interface`. La propriété `padding` a été remplacée par des sous-propriétés correspondantes dans `bound-details`.
- La commande de markup `\align-on-other` accepte désormais la valeur `#f` pour l’alignement, indiquant le point de référence d’un markup.
- Une nouvelle fonction `\withRelativeDir` est désormais disponible pour les commandes de markup qui incluent des fichiers lorsque ces fichiers devraient se trouver relativement au fichier source. Par exemple :

      \markup { \image #X #3 \withRelativeDir "test.png" }

- Le positionnement des crochets horizontaux d’analyse a été amélioré. En particulier, l’objet `HorizontalBracket` a désormais une valeur de `outside-staff-priority` fixée à 800. Par conséquent, il se pourrait que des crochets imbriqués voient leur positionnement modifié. Ceci peut se corriger en ajustant les valeurs de `outside-staff-priority` par un `\tweak`, tout en sachant que le crochet externe doit garder une valeur de priorité supérieure.
- La nouvelle fonction Scheme `to-staff-space` permet de convertir des dimensions absolues (exprimées en diverses unités) en unités d’espace de portée. Par exemple :

      top-markup-spacing.basic-distance = #(to-staff-space 2 'cm)

      % l'unité par défaut est le point (pt)
      \markup
        \override #`(baseline-skip . ,(to-staff-space 20))
        \column {
          foo
          bar
        }

- Les deux nouvelles fonctions de markup `\abs-hspace` et `\abs-vspace` permettent de déterminer des dimensions absolues qui subsistent quelle que soit la taille de portée en cours.
- Les données émises par l’option en ligne de commande `-dshow-available-fonts` sont désormais envoyées sur la sortie standard.
- La fonction `ly:font-config-display-fonts` accepte désormais un argument optionnel pour sélectionner le port de sortie.
- La gestion des options Scheme en ligne de commande gagne en robustesse. Quelques changements mineurs ont été rendus nécessaires par cette nouvelle implémentation.
  - − Sur la ligne de commande, l’argument à l’option `-dpaper-size` ne nécessite plus d’être mis entre guillemets. En d’autres termes, mentionner `-dpaper-size=a3` est tout à fait valide.
  - − L’option `pixmap-format` requiert désormais une valeur sous forme de chaîne, non plus un symbole. Rien ne change pour la ligne de commande, mais un appel tel que

        #(ly:set-option 'pixmap-format 'pngalpha)

    devra être changé en

        #(ly:set-option 'pixmap-format "pngalpha")

    Il en va de même pour les options `separate-page-formats` et `tall-page-formats`. Notez que `convert-ly` se charge d’effectuer la modification automatiquement.

- La `side-position-interface` dispose de deux nouvelles propriétés, `X-padding` et `minimum-X-space`, aux fins de contrôler le décalage horizontal et la distance minimale d’un grob avec son objet parent, indépendamment du décalage vertical et de la distance minimale. Ceci se révèle utile pour des objets tels que `Fingering` qui peuvent avoir un attachement à une tête de note tant dans la verticalité que l’horizontalité, et dont le décalage dans chacun des axes peut requérir des valeurs différentes.
- `\pushContextProperty` et `\popContextProperty` sont deux nouvelles commandes permettant de manipuler les propriétés de contexte. La première insère la valeur courante dans une pile, alors que la seconde supprime cette valeur de la pile et restaure la valeur initiale.

  >     {
  >       c'
  >       \pushContextProperty Staff.fontSize
  >       \set Staff.fontSize = 3
  >       c'
  >       \pushContextProperty Staff.fontSize
  >       \set Staff.fontSize = 6
  >       c'
  >       \popContextProperty Staff.fontSize
  >       c'
  >       \popContextProperty Staff.fontSize
  >       c'
  >     }

- La nouvelle propriété d’objet graphique `whiteout-color` permet de définir la couleur de mise en surbrillance. Dans la même veine, la commande de markup `\whiteout` attend une propriété `color` pour faire de même.
- Le script `musicxml2ly` a été complètement remanié afin de mieux convertir les fichiers MusicXML en LilyPond. Il prend désormais en charge plus de fonctionnalités et éléments MusicXML et tente d’être plus fiable dans la conversion afin de respecter au mieux l’apparence originelle.

  Voici une liste des quelques changements notables, exception faite des corrections de bogue.

  - − Le script est beaucoup plus rapide.
  - − Le chevauchement et l’imbrication des liaisons fonctionnent comme on est en droit de s’y attendre.
  - − Meilleure prise en charge automatique pour contrecarrer l’infâme ticket 34 de LilyPond (problème de synchronisation avec une appoggiature en début de pièce avec plusieurs portées).
  - − Prise en charge des trémolos sur deux hampes et n-olets imbriqués.
  - − Prise en charge de la couleur et de la taille de fonte pour la plupart des éléments MusicXML. Une nouvelle option en ligne de commande `--dynamics-scale` aide à compenser les différences de taille des glyphes de nuance pour diverses fontes musicales.
  - − Prise en charge correcte des fins d’octaviation pour les fichiers MusicXML créés par Finale. Le script vérifie l’élément `<software>` pour déterminer le logiciel de notation utilisé. On peut y déroger si nécessaire à l’aide de l’option en ligne de commande `--ottavas-end-early`.
  - − L’option `--shift-meter` a été remplacée par l’option `--shift-durations` qui utilise une syntaxe plus simple.
  - − La nouvelle option en ligne de commande `--no-tagline` supprime la génération de la tagline de LilyPond.
  - − La nouvelle option en ligne de commande `--book` encapsule la partition de premier niveau dans un `\book`.
  - − Lorsque des éléments `<credit>` sont présents, ils alimentent les champs du bloc `\header` de LilyPond au lieu des métadonnées telles que `<work-title>` ou `<creator>`.
  - − La nouvelle option en ligne de commande `--credit-page` spécifie la page où LilyPond devra récupérer les données `<credit>` pour alimenter le bloc `\header`.
  - − Tous les éléments de métadonnée qui n’ont pas de correspondant dans les champs standards de `\header` (et qui ne sont pas ignorés comme le type « page number ») sont rendus dans des champs au nom plus cohérent : le préfixe ‘`id:` ’ est ajouté pour les éléments de `<identification>`, ‘`credit:` ’ pour les éléments de `<credit>`, et le nom de l’élément MusicXML (sans préfixe) dans tous les autres cas. Par conséquent, certains champs (non utilisés) prennent un nouveau nom.

    > ancien | nouveau
    > --- | ---
    > `movementnumber` | `movement-number`
    > `encodingsoftware` | `id: software`
    > `encodingdate` | `id: encoding-date`
    > `encoder` | `id: encoder`
    > `encodingdescription` | `id: encoding-description`
    > `source` | `id: source`

  - − Les numéros de mesure insérés en commentaire dans le fichier LilyPond créé sont conformes, leur valeur indiquant la mesure précédente.
- La commande de markup `\page-ref` dispose d’une nouvelle propriété `x-align` destinée à contrôler l’alignement horizontal de la jauge de remplacement.

  >     \markup {
  >       \box
  >         \page-ref #'foo "???" "?" " aligné à droite (par défaut)"
  >     }
  >     \markup {
  >       \box
  >         \override #`(x-align . ,LEFT)
  >         \page-ref #'foo "???" "?" " aligné à gauche"
  >     }
  >     \markup {
  >       \box
  >         \override #'(x-align . -2.5)
  >         \page-ref #'foo "???" "?" " repoussé sur la gauche"
  >     }

- La propriété `ledger-extra` peut désormais se régler aussi à partir de l’objet `NoteHead`.

  >     \score {
  >       {
  >         c'''1
  >         \tweak ledger-extra #4 c'''1
  >         c'''1
  >       }
  >     }

- Pour les objets graphiques `NonMusicalPaperColumn`, la sous-propriété `bottom-space` de `line-break-system-details` a été renommée en `bottom-padding`. Alors qu’elle existait depuis la version 2.13.4 sortie en 2009, cette sous-propriété n’était pour l’instant pas documentée.
- Il est désormais possible de modifier des regroupements de balises créés par `\tagGroup` ou `\tagGroupRef`, à l’aide des commandes `\resetTagGroups`, `\resetTagGroup`, `\addToTagGroup` et `\removeFromTagGroup`.
- La langue de saisie – telle que définie par `\language` – est accessible au travers de la la nouvelle variable Scheme `input-language`, en tant que symbole.
- La nouvelle fonction `\breakAlignInsert` facilite la modification de l’ordre des éléments de notation tels que clefs, métriques, barres de mesure, etc. Jusqu’à présent, ceci demandait de redéfinir le vecteur `Score.BreakAlignment.break-align-orders`.

  >     {
  >       g'1
  >       \key f \major
  >       g'
  >       \breakAlignInsert staff-bar after key-signature
  >       \key g \minor
  >       g'
  >     }

- L’option de sortie `-dcrop` tient désormais compte de tous les stencils pour déterminer la boîte englobante. Ceci peut modifier la taille des sorties rognées.
- Les fonctions suivantes, qui étaient dépréciées depuis la version 2.13.19, ont été supprimées : `\deprecatedcresc`, `\deprecatedendcresc`, `\deprecateddim` et `\deprecatedenddim`.

Pour des annonces plus anciennes, rendez-vouz aux pages https://lilypond.org/doc/v2.22/Documentation/changes/, ou remontez à l’index de la documentation.

#### LilyPond Changes v2.26.0 (stable-branch).

- Modifications majeures de LilyPond
  - Notes à propos de la compilation des sources et à l’attention des empaqueteurs
- Nouveautés en matière de notation musicale
  - Améliorations de la représentation des hauteurs
  - Améliorations en matière de rythme
  - Améliorations en matière d’expressivité
  - Améliorations en matière de reprises
  - Améliorations en matière d’annotations éditoriales
  - Améliorations en matière de fontes et de mise en forme du texte
- Nouveautés en matière de notation spécialisée
  - Améliorations pour la musique vocale
  - Améliorations pour instruments à portées multiples
  - Améliorations pour les cordes non frettées
  - Améliorations pour les cordes frettées
  - Améliorations pour la notation des accords
  - Améliorations pour les notations anciennes
  - Améliorations pour les musiques du monde
- Autres améliorations diverses