Le 17 janv. 2023 à 16:50, xyz@xyz.tld a écrit :
17 janvier 2023 14:03 “Michel Bovani” <xyz@xyz.tld mailto:xyz@xyz.tld?to=“Michel%20Bovani”%20%xyz@xyz.tld>> a écrit:
Bonjour,
Je crois me souvenir qu’il y a un moyen de tester si on est en haut d’une page (comprendre un saut de page vient d’avoir lieu et on n’a encore rien écrit dans la nouvelle page). Mais cela ne me revient pas…
(…)
Bonjour,
Regarde du côté de \pagegoal et \pagetotal si ces commandes peuvent te tirer d’affaire.
En tout cas, c’est bien ce qu’il y avait dans mes vagues souvenirs. Merci !
J’ai par conséquent relu le chapitre 15 du Texbook qui m’a donné d’autres idées. Je mets en page une pièce de théâtre et j’ai donc une commande \pers que j’emploie comme ceci.
%%%%%
\pers{Don Diègue}
Rodrigue, as-tu du cœur ?
\pers{Don Rodrigue}
\phantom{Rodrigue, as-tu du cœur ?}Tout autre que mon père
L’éprouverait sur l’heure.
%%%%%
La commande \pers était à l’origine définie comme ceci
%%%%%
\newcommand{\pers}[1]{%
\vspace{0.5\baselineskip}\par%
{\centering #1i\par}\vspace{0.5\baselineskip\par}
%%%%%
La chose occupe donc deux lignes : une demi-ligne, la ligne avec le nom du personnage, puis une demi-ligne. Mais il y a un problème : lorsque le nom du personnage tombe en haut de page, le premier saut n’a pas lieu et le registre est décalé d’une demi-ligne, ce dont je ne veux pas. J’ai donc finalement fait :
%%%%%
\newcommand{\pers}[1]{%
\addtolerngth{\topskip}{0.5\baselineskip}
\vspace{0.5\baselineskip}\par%
{\centering #1i\par}\vspace{0.5\baselineskip
\addtolength{\topskip}{-0.5\baselineskip}
\par}
%%%%%
Qui fonctionne très bien, si ce n’est que je dois ajouter à chaque fois que le rejet à la page se produit un \pagebreak explicite avant la commande \pers. Je n’ai pas encore bien compris pourquoi, mais je pense que c’est parce que, sinon, avant que le coupe des pénalités ne déborde Tex a placé l’ensemble des instructions de la commande dans la liste verticale et que lors du saut de page effectif, les motifs du \topskip ne sont pas récupérées dans la liste de la nouvelle page (pas sûr que cette explication soit la bonne).
En l’occurence, le principe du \pagebreak explicite ne me dérange pas ou pas trop, mais je vais peut-être essayer de gagner en automatisation (peut-être mettre un \goodbreak dans la commande).
Michel