GNU LilyPond – Manuel de notation: 4.3.2 Sauts de page

### 4.3.2 Sauts de page

Cette section présente les différentes méthodes de gestion des sauts de page, ainsi que les moyens de les modifier.

#### Saut de page manuel

La gestion automatique des sauts de page se contrôle à l’aide des commandes `\pageBreak` et `\noPageBreak`. Ces commandes fonctionnent de manière analogue à `\break` et `\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 à la prochaine barre de mesure. Comme on peut s’y attendre, `\pageBreak` force aussi le saut de ligne.

Les commandes `\pageBreak` et `\noPageBreak` peuvent se trouver à des niveaux supérieurs, entre deux partitions ou markups de premier rang.

Au sein même d’une pièce, les sauts de page automatiques sont inhibés dans la musique encadrée par les commandes `\autoPageBreaksOff` et `\autoPageBreaksOn`. Les sauts de page manuels ne sont pas affectés par ces commandes.

Tout comme `ragged-right` et `ragged-last` qui permettent de gérer la répartition horizontale, LilyPond dispose de commutateurs équivalents au niveau de la verticalité. `ragged-bottom`, une fois activé, empèchera les systmèes de se répartir sur la page. Quant à `ragged-last-bottom` (valorisé à `#t` par défaut), il laissera un espace vide en dernière page, y compris pour chaque `\bookpart`. Pour de plus amples détails, reportez-vous à Variables d’espacement vertical fixe.

Les sauts de page sont générés par la fonction `page-breaking`. LilyPond dispose de plusieurs algorithmes en la matière : `ly:optimal-breaking`, `ly:page-turn-breaking` et `ly:minimal-breaking`. C’est `ly:optimal-breaking` qui est activé par défaut, mais rien ne vous empêche d’en changer, par l’intermédiaire du bloc `\paper` :

>     \paper {
>       page-breaking = #ly:page-turn-breaking
>     }

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 `\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.

>     \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 { … }
>       …
>     }
>     \bookpart {
>       %% Cette partie étant purement musicale,
>       %% retour au style par défaut (optimal-breaking).
>       \header {
>         subtitle = "Premier mouvement"
>       }
>       \score { … }
>       …
>     }

#### Commandes prédéfinies

`\pageBreak`, `\noPageBreak`, `\autoPageBreaksOn`, `\autoPageBreaksOff`.

#### Voir aussi

Manuel de notation : Variables de gestion des sauts de page.

Morceaux choisis : Espacements.

#### Problèmes connus et avertissements

Le préfixe `\once` est ineffectif en ce qui concerne les commandes `\autoPageBreaksOn` et `\autoPageBreaksOff`. Si le positionnement automatique des sauts de page est désactivé et qu’il est réactivé pour permettre un saut de page, il doit le rester pendant quelques mesures (le nombre précis de mesures dépendant de la pièce) avant d’être à nouveau désactivé, autrement l’opportunité de passer à la page suivante ne sera pas saisie.

#### Optimisation des sauts de page

LilyPond, pour déterminer où placer un saut de page, utilise par défaut la fonction `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 `ly:page-turn-breaking`, elle n’a aucune notion de ce qu’est une « tourne ».

#### Voir aussi

Morceaux choisis : Espacements.

#### Minimisation des sauts de page

La fonction `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 `\paper` :

>     \paper {
>       page-breaking = #ly:minimal-breaking
>     }

#### Voir aussi

Morceaux choisis : Espacements.

#### Présentation en page continue

La fonction `ly:one-page-breaking` constitue un algorithme de calcul des sauts de page particulier en ceci que la hauteur de page sera automatiquement ajustée à la longueur de la partition, de telle sorte que toute la musique tienne sur une seule page. La variable `paper-height` du bloc `\paper` est ignorée, mais les autres réglages restent disponibles. En particulier, l’espacement entre le dernier système (ou un markup de premier niveau) et le pied de page est réglable à l’aide de la variable `last-bottom-spacing` du bloc `\paper`. La largeur de page n’est, par défaut, pas modifiée ; ceci peut s’ajuster à l’aide de la variable `paper-width` du bloc `\paper`.

#### Problèmes connus et avertissements

`ly:one-page-breaking` est à ce jour incompatible avec l’utilisation de `\bookpart`.

#### Présentation en ligne continue

La fonction `ly:one-line-breaking` constitue un algorithme de calcul des sauts de page 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 `paper-width`, `line-width` et `indent` du bloc `\paper` seront ignorées ; les `left-margin` et `right-margin` seront honorées. La hauteur de page ne sera pas modifiée.

#### Présentation en rouleau

La fonction `ly:one-line-auto-height-breaking` opère comme `ly:one-line-breaking`, à ceci près que la hauteur de page s’adapte automatiquement à la hauteur de la musique. Dans les faits, la variable `paper-height` du bloc `\paper` s’ajuste de façon à englober la hauteur de la partition la plus étendue, plus les `top-margin` et `bottom-margin`.

L’affectation d’une valeur à `top-system-spacing` influencera le positionnement vertical de la musique. Sa désactivation – valorisation à `##f` au sein du bloc `\paper` – aura pour effet de simplement placer la musique entre les marges supérieure et inférieure.

#### Optimisation des tournes

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 `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 `\paper` comme indiqué à la rubrique 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 `\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 `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 `\allowPageTurn` à la barre terminant ce fragment, à moins qu’il ne rencontre en chemin une « barre spéciale » – telle une double barre – auquel cas il y déposera le `\allowPageTurn`.

Le `Page_turn_engraver` examine la propriété de contexte `minimumPageTurnLength` pour déterminer quelle doit être la longueur d’un fragment sans note avant une tourne. La valeur par défaut de `minimumPageTurnLength` est `(ly:make-moment 1 1)`, soit une ronde, et s’ajuste de la manière suivante :

>     \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
>     }

Le `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 puisse aisément revenir à la page précédente. Le `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 `minimumRepeatLengthForPageTurn`.

Les commandes de tourne – `\pageTurn`, `\noPageTurn` et `\allowPageTurn` – peuvent s’utiliser à des niveaux supérieurs, entre des blocs `\score` ou des markups de haut niveau.

#### Commandes prédéfinies

`\pageTurn`, `\noPageTurn`, `\allowPageTurn`.

#### Voir aussi

Manuel de notation : Variables de gestion des sauts de ligne.

Morceaux choisis : Espacements.

#### Problèmes connus et avertissements

Une partition ne devrait contenir qu’une seule instance du `Page_turn_engraver`, au risque de les voir se contredire.

#### LilyPond — Manuel de notation v2.22.2 (branche stable).