Empêcher un titre de section, sous-section, etc. de figurer sur la première ligne de la page

Bonjour, la liste,

J’essaie de suivre la recommandation suivante de Pierre Duplan et Roger
Jauneau (« Maquette et Mise en page », éditions de l’Usine) : quand une
page comporte un en-tête qui contient par exemple un titre de partie ou
de chapitre, sauter au moins une ligne avant un titre de section, sous-
section, etc.

Jusqu’à présent, j’avoue honteusement avoir introduit des sauts de ligne
ad hoc. Il faut dire que j’ai surtout mis en page des romans ou des
essais sans titres de section ou très peu. Le prochain livre auquel je
vais travailler en comporte quant à lui beaucoup, et il serait ridicule
(voire dangereux) de continuer à le faire manuellement.

J’ai cherché sur la Toile, demandé à deux IA de me pondre un script pour
LuaLaTeX destiné à hacker les commandes de section, mais « cha march’
pas », comme aurait dit Garcimore, et je suis trop mauvais en lua pour
comprendre ce qui cloche.

Quelqu’un aurait-il une solution ?

Exprimé de façon plus synthétique :
— si titre de section, sous-section, etc. pas en haut de page, ne
toucher à rien et appliquer le saut vertical prévu avant le titre ;
— si titre de section, etc. en première ligne du texte courant,
appliquer un saut vertical d’une valeur paramétrable (par défaut
\baselineksip)

N.B. — Cela s’appliquerait donc à \section, \subsection, \subsubsection,
\paragraph, y compris aux versions étoilées.

Merci d’avance à qui pourrait m’aider !

Thomas Savary
1 le Grand-Plessis
F-85340 L’Île-d’Olonne
Tél. 06 22 82 61 34

Bonjour Thomas,

Le 29/05/2025 à 16:31, Thomas Savary a écrit :

J’essaie de suivre la recommandation suivante de Pierre Duplan et Roger
Jauneau (« Maquette et Mise en page », éditions de l’Usine) : quand une
page comporte un en-tête qui contient par exemple un titre de partie ou
de chapitre, sauter au moins une ligne avant un titre de section, sous-
section, etc.

Je pense à quelque chose de simple (simpliste ?) : les commandes
\section and co. ajoutent un peu d’espace vertical avant elles, sauf si
elles sont appelées en haut de page (ces espaces sont des \vskip de
TeX). Une solution serait peut-être de les garder en haut de page, en
gros de les remplacer par des \vspace* de LaTeX qui eux ne disparaissent
pas en haut de page. Plus précisément, la classe memoir (que tu
utilises je crois) appelle cet espace \beforesecdim (il peut être
négatif), donc :

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass[a4paper]{memoir}

\usepackage{fourier-otf}
\usepackage[french]{babel}

\newdimen\beforesecdim
\newdimen\beforesecvspace % => valeur absolue de \beforesecdim
\beforesecdim=\beforesecskip
\ifdim \beforesecdim <0pt \beforesecvspace=-\beforesecdim
\else \beforesecvspace=\beforesecdim
\fi
\newcommand{\mysection}{\vspace*{\beforesecvspace}%
\addtolength{\beforesecskip}{-\beforesecdim}%
\section}
\begin{document}
%\showoutput

\chapter{Classique}

\section{Section-un}

\newpage
\section{Section-deux}

\chapter{Avec patch sur section}

\mysection{Section-un-bis}

\newpage
\mysection{Section-deux-bis}

\end{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Mes deux centimes…

Daniel Flipo

Bonsoir, Daniel,
Bonsoir, Éric,

Merci beaucoup pour votre aide.

Éric, désolé, mais ta solution n’a pas fonctionné chez moi — peut-être
quelque chose en rapport avec la classe Memoir ? Par ailleurs, je
préfère ne pas changer les commandes utilisées.

Daniel, ta solution fonctionne dans l’exemple minimal que tu produits,
mais attention, avec un décalage croissant des titres de section vers le
bas. J’ai supprimé la ligne

\addtolength{\beforesecskip}{-\beforesecdim}

ce qui a réglé le problème.

Tout content, j’intègre la solution au source auquel je travaille… et ça
ne fonctionne pas. Sans doute à cause de mon paramétrage des sections de
Memoir. Je regarderai cela demain.

En tout cas, une très bonne idée !

Thomas Savary
1 le Grand-Plessis
F-85340 L’Île-d’Olonne
Tél. 06 22 82 61 34

Le jeudi 29 mai 2025, 18:08:56 CEST Daniel Flipo a écrit :

Bonjour Thomas,

Le 29/05/2025 à 16:31, Thomas Savary a écrit :

J’essaie de suivre la recommandation suivante de Pierre Duplan et
Roger Jauneau (« Maquette et Mise en page », éditions de l’Usine) :
quand une page comporte un en-tête qui contient par exemple un
titre de partie ou de chapitre, sauter au moins une ligne avant un
titre de section, sous- section, etc.

Je pense à quelque chose de simple (simpliste ?) : les commandes
\section and co. ajoutent un peu d’espace vertical avant elles, sauf
si elles sont appelées en haut de page (ces espaces sont des \vskip
de TeX). Une solution serait peut-être de les garder en haut de page,
en gros de les remplacer par des \vspace* de LaTeX qui eux ne
disparaissent pas en haut de page. Plus précisément, la classe
memoir (que tu utilises je crois) appelle cet espace \beforesecdim
(il peut être négatif), donc :

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass[a4paper]{memoir}

\usepackage{fourier-otf}
\usepackage[french]{babel}

\newdimen\beforesecdim
\newdimen\beforesecvspace % => valeur absolue de \beforesecdim
\beforesecdim=\beforesecskip
\ifdim \beforesecdim <0pt \beforesecvspace=-\beforesecdim
\else \beforesecvspace=\beforesecdim
\fi
\newcommand{\mysection}{\vspace*{\beforesecvspace}%
\addtolength{\beforesecskip}{-\beforesecdim}%
\section}
\begin{document}
%\showoutput

\chapter{Classique}

\section{Section-un}

\newpage
\section{Section-deux}

\chapter{Avec patch sur section}

\mysection{Section-un-bis}

\newpage
\mysection{Section-deux-bis}

\end{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Mes deux centimes…