Contexte

Je souhaite mettre des documents au format PDF en annexe de mon document tout en gardant mes numéros de page et marges (j'ai donc renoncé à utiliser le package pdfpages). Pour parvenir à mes fins j'ai découpé mes documents PDF pour avoir une page par fichier et je les insère dans mon document à l'aide de la commande \includegraphics (du package graphicx). Je souhaite de plus avoir un titre de section avant d'insérer la première page.

Problème

J'arrive bien à ajuster les « images » lorsqu'elles sont seules sur leur page mais je n'y arrive pas lorsqu'elles doivent la partager avec un titre : l'image dépasse sur la marge du bas. J'aurais envie d'ajuster l'image à cette marge.

Tentative de résolution

Je bloque au moment de calculer la hauteur de mon titre...

\documentclass{article}

\usepackage[a4paper,showframe]{geometry}
\usepackage{graphicx}
\usepackage{mwe}

\ExplSyntaxOn

% #1 : texte optionnel à mettre avant l'image
% #2 : arguments optionnels passés à \includegraphics
% #3 : chemin vers l'image
\NewDocumentCommand \includegraphicsajusted { o o m }
  {
    % Variables :
    %   \l_tmpa_dim : hauteur du texte à mettre avant
    %   \l_tmpb_dim : hauteur de l'image
    %   \l_tmpa_box : boîte qui contient le texte à mettre avant
    %   \l_tmpb_box : boîte qui contient l'image

    % teste s'il y a du texte à mettre en haut de page
    \IfNoValueTF {#1}
      {% si non on met sa hauteur à 0 et sa boîte vide
        \dim_set:Nn \l_tmpa_dim {0pt}
        \box_set_eq:NN \l_tmpa_box \c_empty_box
      }
      {% si oui on la calcule
        % ICI JE N'ARRIVE PAS À TROUVER DE SOLUTION
        \dim_set:Nn \l_tmpa_dim {0pt}
        \box_set_eq:NN \l_tmpa_box \c_empty_box
      }

    % on détermine la hauteur de l'image si sa largeur est la même que celle du texte
    \hbox_set:Nn \l_tmpb_box
      {
        \IfNoValueTF {#2}
          { \includegraphics[width=\textwidth]{#3} }
          { \includegraphics[width=\textwidth,#2]{#3} }
      }
    \dim_set:Nn \l_tmpb_dim { \box_ht:N \l_tmpb_box + \box_dp:N \l_tmpb_box }

    % on teste si ainsi l'image dépasse dans la marge du bas
    \dim_compare:nNnTF { \l_tmpa_dim + \l_tmpb_dim } > { \textheight }
      {% si oui on ajuste l'image sur la hauteur
        \dim_set:Nn \l_tmpb_dim {\textheight - \dim_use:N \l_tmpa_dim}
        \hbox_set:Nn \l_tmpb_box
          {
            \IfNoValueTF {#2}
              { \includegraphics[height={\l_tmpb_dim}]{#3} }
              { \includegraphics[height={\l_tmpb_dim},#2]{#3} }
          }
      }
      { }
    % affiche le texte avant s'il existe
    \IfNoValueTF {#1}
      { }
      {
        \par
        % \box_use:N \l_tmpa_box
        #1% À SUPPRIMER ET DÉCOMMENTER LA LIGNE DU DESSUS
      }
    \par
    % affiche l'image centrée
    \noindent \hfill \box_use:N \l_tmpb_box \hfill \hbox{}
    \par
  }
\ExplSyntaxOff

\begin{document}
  \includegraphicsajusted[\section{Annexe : document x}]{example-image-a4}
  \includegraphicsajusted{example-image-a4}
\end{document}

Posée 02 Mai '22, 16:45

YannD's gravatar image

YannD
465410
Taux d'acceptation : 25%


\documentclass{article}

\usepackage[a4paper,showframe]{geometry}
\usepackage{graphicx}

\NewDocumentCommand \includegraphicsajusted { o O{} m }{%
  \IfNoValueTF{#1}{%
    \clearpage\noindent\includegraphics[height=\textheight,width=\textwidth,keepaspectratio,#2]{#3}%
  }{%
    \par#1%
    \nointerlineskip%
    \noindent\hfill\includegraphics[height=\dimexpr\pagegoal-\pagetotal\relax,#2]{#3}\hfill\mbox{}%
  }%
}

\begin{document}
  \includegraphicsajusted[\section{Annexe : document x}]{example-image-a4}%
  \includegraphicsajusted{example-image-a4}%
  \includegraphicsajusted{example-image-a4}%
\end{document}
Lien permanent

Publiée 02 Mai '22, 18:46

samcarter's gravatar image

samcarter
8.4k2817
Taux d'acceptation : 56%

Super, et c'est beaucoup plus élégant, merci beaucoup ! Il manque juste quelques petites modifications à votre exemple pour qu'une image seule soit centrée :)

(02 Mai '22, 20:06) YannD YannD'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.