Post by François PatteBonjour,
J'essaie d'utiliser le package titlesec pour redéfinir les sections
conformément à ce que demande un éditeur,
Celui qui préfère Word à du PDF ? :-)
Post by François Pattemais j'ai du mal avec les
champs "espace avant" et "espace après" qui ne fonctionnent visiblement
pas de manière "absolue".
Cela dépend de ce qu'on appelle absolue mais si.
Post by François PattePar exemple on me demande: Les intertitres de niveaux 1 sont en corps
13, composés en petites capitales, avec un interligne de 14 points.
*L’espace avant et après le titre est de 14 points (env. 5 mm).*
\titlespacing*{\section}{0pt}{14pt}{14pt}
L'espace avant est démesuré et ne correspond absolument pas à ce qui est
\titlespacing*{\section}{0pt}{-10pt}{14pt}
Arrrgl ! À supprimer de tout urgence si on ne veut pas de mauvaise
surprise.
Post by François PatteEt j'obtiens à peu près ce qui est demandé (mais pas partout). Y a-t-il
une méthode moins empirique?
On va commencer par indiquer ce qui fonctionne ! Les indications
d'espacements fournies par \titlespacing* sont scrupuleusement
respectées mais ce sont des espacements *en plus* de l'interlignage
normal. Petit ECM pour voir :
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{titlesec}
\usepackage[french]{babel}
\titlespacing*{\section}{0pt}{24pt}{14pt}
\newcommand\Line[1]{%
\leavevmode
\hbox{\vbox to0pt{\vss\hrule width0.4pt depth0pt height#1}}%
}
\begin{document}
Un texte avant
\section{\Line{\dimexpr\baselineskip+24pt} Titre de section}
\Line{\dimexpr\baselineskip+14pt}Un texte après
\end{document}
Post by François Patte\titlespacing*{\section}{0pt}{-10pt plus 5pt minus 2pt}{14pt plus 5pt
minus 2pt}
Il ne *faut* pas, on peut en relation avec une discussion avec
l'éditeur... sauf que si c'est l'éditeur qui préfère Word à un PDF, j'ai
un gros doute sur sa compréhension d'une telle discussion mais peut-être
suis-je trop méchant :-)
Post by François PatteEt si oui 1) comment déterminer les limites imposées à l'élasticité? 2)
est-ce que latex respecte alors *absolument* cette élasticité
Non. J'aime les réponses définitives :-)
Post by François Patteie. ne
tire pas plus que 5pt et ne compresse pas plus que 2pt dans l'exemple
ci-dessus, compte tenu du fait que l'option \flushbottom est activée?
Le problème est effectivement le \flushbottom. C'est le syndrome, on
ne peut pas avoir le beurre et l'argent du beurre (et le sourire de la
crémière). ECM pour voir.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{titlesec}
\usepackage{lipsum}
\usepackage[french]{babel}
\titlespacing*{\section}{0pt}{24pt}{14pt}
\newcommand\grosbloc{%
\par
\fbox{%
\begin{minipage}[c][3cm]{0.5\linewidth}
\vspace*{\stretch{1}}
\centering
Une superbe figure
\vspace*{\stretch{1}}
\end{minipage}
}
\par
}
\flushbottom
\newcommand\Line[1]{%
\leavevmode
\hbox{\vbox to0pt{\vss\hrule width0.4pt depth0pt height#1}}%
}
\begin{document}
\lipsum[1-2]
\grosbloc
\section{\Line{\dimexpr\baselineskip+24pt} Titre de section}
\Line{\dimexpr\baselineskip+14pt}Une ligne de texte avant un gros
bloc;
\grosbloc
\grosbloc
\end{document}
Dans cet exemple, les espacements verticaux sont bien plus grands que
ceux indiqués par \titlespacing*. C'est justement dû à ce \flushbottom.
Dans le cas présent, comme les composantes d'étirement et de contraction
étaient nulles, la seule chose qui il y a eu est un message
d'avertissement dans le rapport de compilation :
Underfull \vbox (badness 10000) has occurred while \output is active [1]
Si on change la ligne \titlespacing* en :
\titlespacing*{\section}{0pt}{24pt plus35pt}{14pt}
il n'y a plus de message d'avertissement et la seule chose que cela
change c'est que cet espacement se mange quasiment tout seul
l'élasticité verticale de la page (avant, l'espacement inter-paragraphe
s'en chargeait en partie). Avec plus34pt, on a un Underfull \vbox mais
avec une badness non infinie (environ 1000 au lieu de 10000 qui est
l'infini TeXien en la matière).
Bref, cela n'améliore pas vraiment les choses. Donner une valeur non
nulle aux composantes d'étirement et de compression va juste indiquer
qu'on rend les choses verticalement plus souples au niveau des titres de
section par rapport aux sauts inter-paragraphes « normaux ». Je ne suis
pas certain que ce soit une bonne idée.
Maintenant, mon ECM montre pourquoi, les choses se passe bien la
plupart du temps. Si on a une page normale avec du texte normal et des
paragraphes normaux, TeX trouvera toujours une coupure de ligne proche
des espacements verticaux naturels (sans étirement et compression). De
temps, en temps, s'il y a des gros pavés insécables au niveau d'une
coupure de page, les choses peuvent se passer un peu plus
douloureusement. C'est inévitable, sauf à modifier le texte. Ici, mon
exemple était évidemment anti-naturel au possible mais on peut envisager
qu'une section soit suivie d'un peu de texte puis d'une succession d'une
section, sous-section et sous-sous-section à la queue-leu-leu. Si ce
trois titres à la suite tombent juste avant une coupure de page on va
avoir le problème décrit ici.
Avec une définition du type
\titlespacing*{\section}{0pt}{14pt minus10pt}{14pt}
la loi de Murphy aidant, si une telle striucture apparaît assez en avant
d'une coupure de page et qu'en tassant au maximum, cela fait rentrer
les trois titres et une ligne de texte qui suit en fin de page, on va
utiliser la compression maximum. Si la fonte est en 13pt, on a un
\baselineskip qui vaut 15.6pt (normalement). Cela va donc donner
potentiellement une distance de 5.6pt entre la ligne de base du texte
qui précède et celle du titre de section. Le qualificatif d'horrible me
semble tout à fait séduisant pour décrire le résultat obtenu :-)
Tout ce qui précède valait pour une compression de 10pt, c'est-à-dire
pour la syntaxe énoncée ci-dessus. Ta définition indiquée dans le post est :
\titlespacing*{\section}{0pt}{-10pt}{14pt}
et là, soit tu nous cache quelque chose, soit tu as fait un lapsus de
clavier. Sinon, ici, c'est simple : le résultat est *toujours* horrible
:-). Re ECM :
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{titlesec}
\usepackage[french]{babel}
\titlespacing*{\section}{0pt}{-10pt}{14pt}
\begin{document}
Un texte avant
\section{Titre de section}
Un texte après
\end{document}
Jean-Côme Charpentier
--
Hé oui, avec LaTeX, on peut difficilement aspirer à d'autres fortunes
qu'un fichier de citations trollesques. Snif.
-+- Joss in fr.comp.text.tex -+-