Il m'arrive souvent de produire des documents illustrés, dans lesquels les images occupent le haut de la page et le texte, s'il y en a, figure dans la partie inférieure de la page.

Si la page commence par un titre de section, celui-ci repousse l'image vers le bas. Et si la page suivante comporte également une image, celle-ci n'est évidemment pas en regard de la précédente.

Comment faire pour que ces images soient alignées d'une page à l'autre ?

\documentclass[a4paper, 12pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{kpfonts}
\usepackage{mwe}
\usepackage{float}

\begin{document}

\section{Première partie}
\subsection{Première sous-partie}
\begin{figure}[H]
    \centering
    \includegraphics[width=\textwidth{}]{example-image-a}
\label{fig:1a}
\caption{Une première illustration}
\end{figure}

\newpage{}
\begin{figure}[H]
    \centering
\includegraphics[width=\textwidth{}]{example-image-b}
\label{fig:1b}
\caption{Une deuxième illustration}
\end{figure}

\newpage{}
\subsection{Deuxième sous-partie}
\begin{figure}[H]
    \centering
\includegraphics[width=\textwidth{}]{example-image-c}
\label{fig:1c}
\caption{Une troisième illustration}
\end{figure}

\newpage{}
\section{Deuxième partie}
\begin{figure}[H]
    \centering
\includegraphics[width=\textwidth{}]{example-image-a}
\label{fig:2a}
\caption{Une autre illustration, guère plus alignée que les précédentes}
\end{figure}

\newpage{}
\begin{figure}[H]
    \centering
\includegraphics[width=\textwidth{}]{example-image-b}
\label{fig:2b}
\caption{Et une dernière illustration}
\end{figure}

\end{document}

Je précise que j'utilise le package float à dessein ; j'ai réellement besoin de positionner les images ainsi, après les titres de section.

Posée 18 Mar '21, 11:34

Pathe's gravatar image

Pathe ♦♦
7.5k42204251
Taux d'acceptation : 55%

PS : dans le visualiseur pdf qui figure désormais au-dessous des blocs de code, je suggère de choisir le défilement horizontal, qui permet de mettre en évidence le problème posé.

(18 Mar '21, 11:36) Pathe ♦♦ Pathe's gravatar image
1

Remplacer la balise [H] par la balise [t]? Pour que toutes les images soient en haut de page?

(18 Mar '21, 12:59) pluton pluton's gravatar image

@pluton : la suggestion est bonne, mais je désire que les titres figurent en haut de page, de telle sorte que les images apparaissent dessous.

Il faudrait donc créer un empagement comprenant une zone de hauteur déterminée où les titres potentiels apparaîtraient, et qui resterait vide le reste du temps. Les images seraient situées au-dessous de cette zone dévolue aux titres.

(18 Mar '21, 14:39) Pathe ♦♦ Pathe's gravatar image

Voici une solution qui consiste à ajouter des sections et sous-sections vides.


\documentclass[a4paper, 12pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{kpfonts}
\usepackage{mwe}
\usepackage{float}

\newcommand{\sectionfantome}{\section*{}}
\newcommand{\subsectionfantome}{\subsection*{}}

\begin{document}

\section{Première partie}
\subsection{Première sous-partie}
\begin{figure}[H]
    \centering
    \includegraphics[width=\textwidth{}]{example-image-a}
\label{fig:1a}
\caption{Une première illustration}
\end{figure}

\newpage{}
\sectionfantome
\subsectionfantome
\begin{figure}[H]
    \centering
\includegraphics[width=\textwidth{}]{example-image-b}
\label{fig:1b}
\caption{Une deuxième illustration}
\end{figure}

\newpage{}
\sectionfantome
\subsection{Deuxième sous-partie}
\begin{figure}[H]
    \centering
\includegraphics[width=\textwidth{}]{example-image-c}
\label{fig:1c}
\caption{Une troisième illustration}
\end{figure}

\newpage{}
\section{Deuxième partie}
\subsectionfantome
\begin{figure}[H]
    \centering
\includegraphics[width=\textwidth{}]{example-image-a}
\label{fig:2a}
\caption{Une autre illustration, guère plus alignée que les précédentes}
\end{figure}

\newpage{}
\sectionfantome
\subsectionfantome
\begin{figure}[H]
    \centering
\includegraphics[width=\textwidth{}]{example-image-b}
\label{fig:2b}
\caption{Et une dernière illustration}
\end{figure}

\end{document}

Attention cela ne fonctionnera pas comme souhaité avec des titres qui prennent plusieurs lignes. Dans ce cas, on pourra bidouiller en ajoutant des \\~ dans les arguments des sections et sous-sections fantômes, et en ajustant les titres trop courts, par exemple \section[⟨titre⟩]{⟨titre⟩\\~}.

Pour aller plus loin dans le positionnement absolu on peut utiliser l'environnement tikzpicture (du package tikz) avec les options remember picture ou overlay.

Lien permanent

Publiée 21 Mar '21, 02:07

YannD's gravatar image

YannD
465310
Taux d'acceptation : 25%

1

Le résultat correspond à ce que je désire ; très chouette !

(21 Mar '21, 17:26) Pathe ♦♦ Pathe's gravatar image

En demandant que les flottants soient placés en haut de page (option t) et ce même dans des pages où il n'y a que des flottants qui sont alors normalement défaut centrés verticalement (\setlength{\@fptop}{0pt}), ça devrait fonctionner (la commande \setlength{\@fpbot}{0pt plus 1fil} n'étant qu'un garde-fou) :

\documentclass[a4paper, 12pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{kpfonts}
\usepackage{mwe}
% \usepackage{float}
\makeatletter
\setlength{\@fptop}{0pt}
\setlength{\@fpbot}{0pt plus 1fil}
\makeatother

\begin{document}

\section{Première partie}
\subsection{Première sous-partie}
\begin{figure}[t]
    \centering
    \includegraphics[width=\textwidth{}]{example-image-a}
\label{fig:1a}
\caption{Une première illustration}
\end{figure}

\newpage{}
\begin{figure}[t]
    \centering
\includegraphics[width=\textwidth{}]{example-image-b}
\label{fig:1b}
\caption{Une deuxième illustration}
\end{figure}

\newpage{}
\subsection{Deuxième sous-partie}
\begin{figure}[t]
    \centering
\includegraphics[width=\textwidth{}]{example-image-c}
\label{fig:1c}
\caption{Une troisième illustration}
\end{figure}

\newpage{}
\section{Deuxième partie}
\begin{figure}[t]
    \centering
\includegraphics[width=\textwidth{}]{example-image-a}
\label{fig:2a}
\caption{Une autre illustration, guère plus alignée que les précédentes}
\end{figure}

\newpage{}
\begin{figure}[t]
    \centering
\includegraphics[width=\textwidth{}]{example-image-b}
\label{fig:2b}
\caption{Et une dernière illustration}
\end{figure}

\end{document}

Crédit : https://tex.stackexchange.com/a/28565/18401

Lien permanent

Publiée 21 Mar '21, 15:24

denis's gravatar image

denis ♦♦
7.3k1510
Taux d'acceptation : 53%

@denis : Merci ! C'est pas mal, mais raisonnablement, il faudrait mettre les titres des sections au-dessus des photos. Ces documents seront utilisés sur téléphone portable, en faisant défiler le texte vers le bas, d'où l'importance de ce détail de mise en page.

(21 Mar '21, 17:21) Pathe ♦♦ Pathe's gravatar image

Voici une solution qui demande deux passes.

alt text

\documentclass[a4paper, 12pt]{scrartcl}
\usepackage{kpfonts}
\usepackage[T1]{fontenc}

\usepackage[savepos]{zref}
\usepackage[Export]{adjustbox}

\usepackage{mwe}
\newcounter{mtimg}[page]

\makeatletter 
\newenvironment{mtfigure}
  {\par\noindent
  \begin{minipage}[t]{\textwidth}%
    \def\@captype{figure}
    \centering
    \ifnum\value{mtimg}=0
      \stepcounter{mtimg}%
      \ifodd\value{page}%
        \zsaveposy{pg\arabic{page}}%
      \else
         \@ifundefined{Z@R@pg\the\numexpr\value{page}-1}\relax{\vskip\dimexpr\paperheight-\zposy{pg\the\numexpr\value{page}-1}sp-\topmargin-\headheight-\headsep-\topskip-1in\relax}   
      \fi\fi}
  {\end{minipage}\par}
\makeatother
\begin{document}

\section{Première partie}
\subsection{Première sous-partie}
\begin{mtfigure}
    \includegraphics[width=\textwidth,valign=T]{example-image-a}
    \captionof{figure}{Une première illustration}
    \label{fig:1a}
\end{mtfigure}

\newpage 
\begin{mtfigure}
    \includegraphics[width=\textwidth, height=8cm,valign=T]{example-image}
    \captionof{figure}{Une deuxième illustration}
    \label{fig:1b}
\end{mtfigure}

\newpage
\begin{mtfigure}
    \includegraphics[width=\textwidth,valign=T]{example-image-a}
    \captionof{figure}{Une première illustration}
    \label{fig:2a}
\end{mtfigure}

\newpage 
\begin{mtfigure}
    \includegraphics[width=\textwidth, height=8cm,valign=T]{example-image}
    \captionof{figure}{Une deuxième illustration}
    \label{fig:2b}
\end{mtfigure}

\newpage
\subsection{Première sous-partie}
\begin{mtfigure}
    \includegraphics[width=\textwidth,valign=T]{example-image-a}
    \captionof{figure}{Une première illustration}
    \label{fig:3a}
\end{mtfigure}

\newpage 
\begin{mtfigure}
    \includegraphics[width=\textwidth, height=8cm,valign=T]{example-image}
    \captionof{figure}{Une deuxième illustration}
    \label{fig:3b}
\end{mtfigure}

\end{document}
Lien permanent

Publiée 21 Mar '21, 17:13

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

Modifiée 22 Mar '21, 08:51

Je n'obtiens pas le résultat escompté. C'est étrange, certaines images sont alignées par le milieu.

En revanche, cela me permet de découvrir le package zref, qui est très intéressant. Pas tout à fait de mon niveau, mais intéressant.

(21 Mar '21, 17:30) Pathe ♦♦ Pathe's gravatar image

Peut être, puisque j'ai oublié de poser la question suivante : est-il possible qu'une page reçoit plus d'une image?

(21 Mar '21, 17:46) touhami touhami's gravatar image

@touhami : oui, c'est possible. Deux illustrations, dirons-nous : certaines sont formées de plusieurs images. Mais l'idée est d'avoir au maximum deux illustrations par page, chacune occupant toute la largeur de la zone de texte (\textwidth) et situées l'une au-dessus de l'autre.

(21 Mar '21, 23:25) Pathe ♦♦ Pathe's gravatar image
Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.