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.1 (branche stable).