Espace vertical en bas de page

Tout ce qui concerne le langage LaTeX et ses variantes. Ce langage est supporté sur le forum via les balises tex.

Modérateur : gdm_tex

Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
MB
Administrateur
Administrateur
Messages : 7132
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Espace vertical en bas de page

Message par MB »

Bonsoir, il me semblait que LaTeX supprimait l'espace vertical en haut et en bas de page lors de l'utilisation des commandes \vspace ou \addvspace (et qu'on pouvait justement forcer cet espacement avec \vspace*). Avec l'ecm suivant, je constate que l'espace en bas de page n'est pas supprimé, ce qui ne me convient pas. Comment expliquer ce fonctionnement et comment faire pour que l'espace en bas de page ne soit pas ajouté ?

Code : Tout sélectionner

\documentclass[a6paper]{article}
\usepackage[showframe]{geometry}
\begin{document}
\addvspace{1cm}
blabla.
\vfill
blabla.\par
\addvspace{1cm}
\end{document}
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 433
Inscription : dimanche 11 février 2007, 11:45

Re: Espace vertical en bas de page

Message par touhami »

Bonjour.

(La)TeX supprime l'espace vertical en haut de page pas en bas.
Pour que l'espace en bas de page ne soit pas ajouté, vous pourriez peut être essayer

Code : Tout sélectionner

\vspace{\stretch{FAC}}
ECM

Code : Tout sélectionner

\documentclass{article}
\usepackage[a6paper,showframe]{geometry}
\begin{document}
\vspace{\stretch{.01}}
blabla.

\vspace{\stretch{1}}
blabla.
\vspace{\stretch{.01}}
%\par
%%foo
\end{document}

MB
Administrateur
Administrateur
Messages : 7132
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Espace vertical en bas de page

Message par MB »

touhami a écrit :(La)TeX supprime l'espace vertical en haut de page pas en bas.
Voici ce que l'on peut trouver dans la documentation latex2e.
\vspace[*]{length}
The \vspace command adds the vertical space length, i.e., a rubber length. length can be negative or positive.
Ordinarily, LaTeX removes vertical space added by \vspace at the top or bottom of a page. With the optional * argument, the space is not removed.
En ce qui concerne la solution proposée, il me faudrait un système qui détecte automatiquement si on se trouve en bas de page.
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 433
Inscription : dimanche 11 février 2007, 11:45

Re: Espace vertical en bas de page

Message par touhami »

MB a écrit : Voici ce que l'on peut trouver dans la documentation latex2e.
\vspace[*]{length}
The \vspace command adds the vertical space length, i.e., a rubber length. length can be negative or positive.
Ordinarily, LaTeX removes vertical space added by \vspace at the top or bottom of a page. With the optional * argument, the space is not removed.
Je crains que ce ne soit pas correct.
MB a écrit : En ce qui concerne la solution proposée, il me faudrait un système qui détecte automatiquement si on se trouve en bas de page.
Vous pouvez faire une comparaison des numéros des pages.

MB
Administrateur
Administrateur
Messages : 7132
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Espace vertical en bas de page

Message par MB »

J'ai vérifié dans la version 2018 de latex2e.pdf (car j'utilisais la version 2014) et voici ce qu'on y trouve.
LaTeX removes the vertical space from \vspace at a page break, that is, at the top or bottom of a page. The starred version \vspace*{...} causes the space to stay.
Dans LaTeX for Linux: A Vade Mecum, on trouve ceci.
\vspace will be ignored if the program decides to break the page at that point. To force a specific amount of vertical space, even if it is a page break (at the bottom of page) write an asterisk immediately after the command.
Tout ça n'est pas très clair pour moi.
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 433
Inscription : dimanche 11 février 2007, 11:45

Re: Espace vertical en bas de page

Message par touhami »

Bonjour.

(La)TeX supprime l'espace ajoutée par \vspace (\vskip pour TeX) lorsqu'il y a une coupure de page. En top de page, c'est toujours vrai, en bas de page ça dépend de la classe (options oneside ou twoside).
Ici, c'est la classe article (option oneside) l'espace n'est pas supprimé. Mais ce n'est pas la seule raison. En effet, c'est la dernière page, et il y a une autre espace verticale insérée par la commande \clearpage au moment de \end{doument}.

MB
Administrateur
Administrateur
Messages : 7132
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Espace vertical en bas de page

Message par MB »

Merci pour les ces précisions qui expliquent un peu les choses !
Je ne sais pas d'où proviennent ces informations mais je crois comprendre que ces suppressions d'espace vertical sont directement gérées par \vskip ?
Voici le code de la commande \vspace.

Code : Tout sélectionner

\DeclareRobustCommand\vspace{\@ifstar\@vspacer\@vspace}
\def\@vspace #1{%
  \ifvmode
    \vskip #1
    \vskip\z@skip
   \else
     \@bsphack
     \vadjust{\@restorepar
              \vskip #1
              \vskip\z@skip
              }%
     \@esphack
   \fi}
\def\@vspacer#1{%
  \ifvmode
    \dimen@\prevdepth
    \hrule \@height\z@
    \nobreak
    \vskip #1
    \vskip\z@skip
    \prevdepth\dimen@
  \else
    \@bsphack
    \vadjust{\@restorepar
             \hrule \@height\z@
             \nobreak
             \vskip #1
             \vskip\z@skip}%
    \@esphack
  \fi}
Comment faire pour que l'espace soit supprimé en bas de page quelque soit le cas ?
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 433
Inscription : dimanche 11 février 2007, 11:45

Re: Espace vertical en bas de page

Message par touhami »

En dernière page, c'est difficile. Pourriez vous poster un exemple minimale plus complet.

touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 433
Inscription : dimanche 11 février 2007, 11:45

Re: Espace vertical en bas de page

Message par touhami »

La solution simple est d'utiliser l'option de classe twoside ou d'ajouter, au préambule, la commande \flushbottom. Pour le problème de la dernière page, pourquoi voulez vous utiliser \vspace{} just avant \end{document} ? S'il agit d'un document généré automatiquement, il faut trouver un outil qui peut le supprimer.

MB
Administrateur
Administrateur
Messages : 7132
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Espace vertical en bas de page

Message par MB »

En fait c'est pour le développement d'un package dans lequel on a différents environnements qui comportent des marges verticales de type \addvspace. Il faudrait qu'une marge verticale se retrouvant en bas de page soit automatiquement désactivée. Je pensais que ça serait automatique étant donné le fonctionnement de LaTeX, mais au final ça se complique. Peut-être avec des commandes \@ifnextchar en testant un \pagebreak ou un \clearpage ?
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

evariste_G
Utilisateur chevronné
Utilisateur chevronné
Messages : 1448
Inscription : vendredi 19 décembre 2008, 19:13
Localisation : Bordeaux

Re: Espace vertical en bas de page

Message par evariste_G »

Bonjour.

Je ne sais pas si ça va t'aider, mais en utilisant la commande \enlargethispage*{0pt}, cela force à laisser l'espace vertical. Ce n'est pas une solution optimale, mais sait-on jamais... Si ça te permet d'obtenir ce que tu souhaites...
Mathématiques, LaTeX et Python : http://www.mathweb.fr

touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 433
Inscription : dimanche 11 février 2007, 11:45

Re: Espace vertical en bas de page

Message par touhami »

Il faut savoir que la plupart des environnements LaTeX (center, abstract, itemize, theorem) ont ce genre de séparation.

Code : Tout sélectionner

\documentclass{article}
\usepackage[showframe]{geometry}
\begin{document}
bla bla
\vfill
\begin{itemize}
\item foo
\item foo
\end{itemize}
\end{document} 

MB
Administrateur
Administrateur
Messages : 7132
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Espace vertical en bas de page

Message par MB »

@evariste_G. Je souhaite au contraire ne pas conserver cet espace vertical (en bas de page).

@touhami. Plusieurs d'entre eux sont basés sur l'environnement trivlist il me semble, je vais tenter de regarder un peu le code de \endtrivlist pour voir. Mais pour l'instant c'est le fonctionnement de \vskip en bas de page qui ne me semble pas très clair.
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 433
Inscription : dimanche 11 février 2007, 11:45

Re: Espace vertical en bas de page

Message par touhami »

Commencer par comparer ces deux exemples :

Code : Tout sélectionner

\documentclass[%
%twoside
]{article}
\usepackage[showframe,height=5cm]{geometry}
\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean et vehicula mi. 
In et nisi massa. Donec sed libero bibendum sapien dictum finibus vel eu sapien. 
Vestibulum euismod id lacus a cursus. Suspendisse et nibh vitae ligula cursus gravida vel id libero.
Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
 
Duis at tellus a leo ultricies venenatis a vel sem. Fusce dapibus tincidunt nibh eget ultrices. 
Donec mattis et metus sed tincidunt. Donec eget gravida eros, vitae porttitor massa. 
Pellentesque tempus consequat tellus, ac ultricies risus tristique quis. 
Sed sollicitudin risus in orci rutrum, id sodales urna pellentesque. Donec at luctus velit.

Duis at tellus a leo ultricies venenatis a vel sem. Fusce dapibus tincidunt nibh eget ultrices. 
Donec mattis et metus sed tincidunt. Donec eget gravida eros, vitae porttitor massa. 
Pellentesque tempus consequat tellus, ac ultricies risus tristique quis. 
\vskip2cm\relax
Duis at tellus a leo ultricies venenatis a vel sem. Fusce dapibus tincidunt nibh eget ultrices. 
Donec mattis et metus sed tincidunt. Donec eget gravida eros, vitae porttitor massa. 
Pellentesque tempus consequat tellus, ac ultricies risus tristique quis. 
Sed sollicitudin risus in orci rutrum, id sodales urna pellentesque. Donec at luctus velit.
\end{document}

touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 433
Inscription : dimanche 11 février 2007, 11:45

Re: Espace vertical en bas de page

Message par touhami »

Exemples

Code : Tout sélectionner

\documentclass[%
%twoside
]{article}
\usepackage[showframe,height=5cm]{geometry}
\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean et vehicula mi. 
In et nisi massa. Donec sed libero bibendum sapien dictum finibus vel eu sapien. 
Vestibulum euismod id lacus a cursus. Suspendisse et nibh vitae ligula cursus gravida vel id libero.
Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
 
Duis at tellus a leo ultricies venenatis a vel sem. Fusce dapibus tincidunt nibh eget ultrices. 
Donec mattis et metus sed tincidunt. Donec eget gravida eros, vitae porttitor massa. 
Pellentesque tempus consequat tellus, ac ultricies risus tristique quis. 
Sed sollicitudin risus in orci rutrum, id sodales urna pellentesque. Donec at luctus velit.

Duis at tellus a leo ultricies venenatis a vel sem. Fusce dapibus tincidunt nibh eget ultrices. 
Donec mattis et metus sed tincidunt. Donec eget gravida eros, vitae porttitor massa. 
Pellentesque tempus consequat tellus, ac ultricies risus tristique quis. 
\vskip2cm\relax
Duis at tellus a leo ultricies venenatis a vel sem. Fusce dapibus tincidunt nibh eget ultrices. 
Donec mattis et metus sed tincidunt. Donec eget gravida eros, vitae porttitor massa. 
Pellentesque tempus consequat tellus, ac ultricies risus tristique quis. 
Sed sollicitudin risus in orci rutrum, id sodales urna pellentesque. Donec at luctus velit.
\end{document}
Brève explication

Parmi les points où TeX (le programme) peut couper la page on trouve les ressorts.
Un ressort est un élément effaçable, c'est-dire, lorsque TeX déicide de couper la page sur un ressort, il l'efface (...).
Une espace verticale insérée par \vskip est un ressort. Donc, normalement elle doit être effacer par TeX. C'est le cas de l'exemple avec l'option twoside (comportement par défaut de TeX). Dans l'exemple avec l'option oneside l'espace verticale ajoutée par \vskip a été effacée, mais il y a un autre ressort qui a été ajouté à la page plus tard par la routine de sortie de LaTeX.

MB
Administrateur
Administrateur
Messages : 7132
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Espace vertical en bas de page

Message par MB »

Je constate effectivement une différence au niveau de l'espacement en bas de page dans entre les options oneside et twoside.
J'ai ajouté un \newpage et j'ai comparé les deux options avec et sans le \vskip qui précède.

Code : Tout sélectionner

\documentclass[oneside]{article}
\usepackage[showframe,height=5cm]{geometry}
\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean et vehicula mi.
In et nisi massa. Donec sed libero bibendum sapien dictum finibus vel eu sapien.
Vestibulum euismod id lacus a cursus. Suspendisse et nibh vitae ligula cursus gravida vel id libero.
Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
 
Duis at tellus a leo ultricies venenatis a vel sem. Fusce dapibus tincidunt nibh eget ultrices.
Donec mattis et metus sed tincidunt. Donec eget gravida eros, vitae porttitor massa.
Pellentesque tempus consequat tellus, ac ultricies risus tristique quis.
Sed sollicitudin risus in orci rutrum, id sodales urna pellentesque. Donec at luctus velit.

Duis at tellus a leo ultricies venenatis a vel sem. Fusce dapibus tincidunt nibh eget ultrices.
Donec mattis et metus sed tincidunt. Donec eget gravida eros, vitae porttitor massa.
Pellentesque tempus consequat tellus, ac ultricies risus tristique quis.

\vskip2cm\relax
\newpage

Duis at tellus a leo ultricies venenatis a vel sem. Fusce dapibus tincidunt nibh eget ultrices.
Donec mattis et metus sed tincidunt. Donec eget gravida eros, vitae porttitor massa.
Pellentesque tempus consequat tellus, ac ultricies risus tristique quis.
Sed sollicitudin risus in orci rutrum, id sodales urna pellentesque. Donec at luctus velit.
\end{document}
  • Avec oneside : aucune différence avec ou sans vskip.
  • Avec twoside : il y a moins d'espace en bas de page (plus aucun) avec le vskip que sans (cas dans lequel on retrouve le même espacement qu'avec oneside).
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 433
Inscription : dimanche 11 février 2007, 11:45

Re: Espace vertical en bas de page

Message par touhami »

Je n'ai pas bien compris votre dernier message, et en particulier
MB a écrit :
  • Avec twoside : il y a moins d'espace en bas de page (plus aucun) avec le vskip que sans (cas dans lequel on retrouve le même espacement qu'avec oneside).

MB
Administrateur
Administrateur
Messages : 7132
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Espace vertical en bas de page

Message par MB »

Voici ce que j'obtiens avec le code suivant (twoside avec vskip).

Code : Tout sélectionner

\documentclass[twoside]{article}
\usepackage[showframe,height=5cm]{geometry}
\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean et vehicula mi.
In et nisi massa. Donec sed libero bibendum sapien dictum finibus vel eu sapien.
Vestibulum euismod id lacus a cursus. Suspendisse et nibh vitae ligula cursus gravida vel id libero.
Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
 
Duis at tellus a leo ultricies venenatis a vel sem. Fusce dapibus tincidunt nibh eget ultrices.
Donec mattis et metus sed tincidunt. Donec eget gravida eros, vitae porttitor massa.
Pellentesque tempus consequat tellus, ac ultricies risus tristique quis.
Sed sollicitudin risus in orci rutrum, id sodales urna pellentesque. Donec at luctus velit.

Duis at tellus a leo ultricies venenatis a vel sem. Fusce dapibus tincidunt nibh eget ultrices.
Donec mattis et metus sed tincidunt. Donec eget gravida eros, vitae porttitor massa.
Pellentesque tempus consequat tellus, ac ultricies risus tristique quis.
\vskip2cm\relax
\newpage
\end{document}
[attachment=1]twoside_vskip.png[/attachment]


Voici ce que j'obtiens avec le code suivant (twoside sans vskip).

Code : Tout sélectionner

\documentclass[twoside]{article}
\usepackage[showframe,height=5cm]{geometry}
\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean et vehicula mi.
In et nisi massa. Donec sed libero bibendum sapien dictum finibus vel eu sapien.
Vestibulum euismod id lacus a cursus. Suspendisse et nibh vitae ligula cursus gravida vel id libero.
Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
 
Duis at tellus a leo ultricies venenatis a vel sem. Fusce dapibus tincidunt nibh eget ultrices.
Donec mattis et metus sed tincidunt. Donec eget gravida eros, vitae porttitor massa.
Pellentesque tempus consequat tellus, ac ultricies risus tristique quis.
Sed sollicitudin risus in orci rutrum, id sodales urna pellentesque. Donec at luctus velit.

Duis at tellus a leo ultricies venenatis a vel sem. Fusce dapibus tincidunt nibh eget ultrices.
Donec mattis et metus sed tincidunt. Donec eget gravida eros, vitae porttitor massa.
Pellentesque tempus consequat tellus, ac ultricies risus tristique quis.
%\vskip2cm\relax
\newpage
\end{document}
[attachment=0]twoside_novskip.png[/attachment]


Il y a donc moins d'espace en bas de page avec le vskip que sans.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 433
Inscription : dimanche 11 février 2007, 11:45

Re: Espace vertical en bas de page

Message par touhami »

Ok.

Sans \vskip : la commande \newpage est à-peu-près \vfil\break donc TeX va remplir le reste de la page par de blanc puis couper la page.

Avec \vskip : TeX va ajouter 2cm d'espace (ressort) ce qui fait une page très longue (essayer par exemple avec \vskip 2mm\relax) . Par suite TeX décide de couper la page sur le ressort (avant le \newpage, le \newpage est donc sans effet) et d'effacer cet espace.

MB
Administrateur
Administrateur
Messages : 7132
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Espace vertical en bas de page

Message par MB »

Donc il faudrait faire en sorte que généraliser le comportement de tex en mode twoside au mode oneside (qui sont pourtant des concepts latex il me semble).
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.