Texte d'une équation qui déborde de la page

Bonjour
Je vous prie de m'excuser d'avance étant donné que je risque de vous poser un problème qui a déjà dû être résolu, mais je n'en ai pas trouvé la solution sur internet après de nombreuses recherche. Mon problème est le suivant.
Voulant écrire un texte explicatif à côté d'une équation afin d'expliquer au lecteur comme je passe de cette ligne à la ligne suivante, il arrive que parfois, lorsque l'explication est trop longue, que le texte déborde à droite de la page, et même disparaisse (comme si le texte continuait dans le vide à droite de la page). Je voulais donc vous demander s'il était possible d'indiquer dans mon code au logiciel qu'il y a une "limite" (1 cm en partant de la droite de la page) à ne pas dépasser, comme une marge à droite qui oblige le texte à revenir à la ligne lorsqu'il s'apprête à la rencontrer.
Voici un exemple :
\begin{align*}
-4x^{2}+14x=4x^{2}-14x+12 & \iff 0 = 4x^{2}-14x+12+4x^{2}-14x &i.e.\text{, en faisant une certaine opération et ce texte permet d'expliquer le passage à la ligne suivante, cependant il est trop grand est déborde de la page à droite...}
\end{align*}
qui donne
\begin{align*}
-4x^{2}+14x=4x^{2}-14x+12 & \iff 0 = 4x^{2}-14x+12+4x^{2}-14x &i.e.\text{, en faisant une certaine opération et ce texte permet d'expliquer le passage à la ligne suivante, cependant il est trop grand est déborde de la page à droite...}
\end{align*}

Je vous remercie d'avance !

Réponses

  • Bonsoir,

    Dans beaucoup de cas, il doit suffire, je pense, d'une petite phrase pour faire la transition entre deux équations. Mais pour répondre techniquement à la demande, on peut faire ça :
    \begin{align*}
    -4x^{2}+14x=4x^{2}-14x+12 & \iff 0 = 4x^{2}-14x+12+4x^{2}-14x
                                \ % il y a un espace ici
                                \raisebox{0pt}[0pt][0pt]{%
                                \begin{minipage}[t]{6cm}
                                  en faisant une certaine opération et ce texte
                                  permet d'expliquer le passage à la ligne
                                  suivante, cependant il est trop grand est
                                  déborde de la page à droite...
                                \end{minipage}}
    \end{align*}
    
    \vspace{4\baselineskip}%
    \begin{align*}
    -4x^{2}+14x=4x^{2}-14x+12 & \iff 0 = 4x^{2}-14x+12+4x^{2}-14x
                                \ % il y a un espace ici
                                \raisebox{0pt}[0pt][0pt]{%
                                \begin{minipage}[c]{6cm}
                                  en faisant une certaine opération et ce texte
                                  permet d'expliquer le passage à la ligne
                                  suivante, cependant il est trop grand est
                                  déborde de la page à droite...
                                \end{minipage}}
    \end{align*}
    
    \vspace{4\baselineskip}%
    \begin{align*}
    -4x^{2}+14x=4x^{2}-14x+12 & \iff 0 = 4x^{2}-14x+12+4x^{2}-14x
                                \makebox[0pt][l]{ % il y a un espace ici
                                \raisebox{0pt}[0pt][0pt]{%
                                \begin{minipage}[c]{3cm}
                                  en faisant une certaine opération et ce texte
                                  permet d'expliquer le passage à la ligne
                                  suivante, cependant il est trop grand est
                                  déborde de la page à droite...
                                \end{minipage}}}
    \end{align*}
    
    Dans les 3 cas, on fait croire à TeX que la minipage a une hauteur et une profondeur nulles[1], dans le but de ne pas décaler verticalement les équations (ou texte) précédentes et suivantes. Évidemment, en faisant comme ça, il faut faire attention à ce que deux telles annotations consécutives soient suffisamment éloignées pour ne pas entrer en collision.

    Les deux premiers exemples se distinguent par l'alignement vertical de la minipage par rapport à la ligne de base de l'équation (3 options : t(op), c(enter) et b(ottom)). Pour un positionnement plus précis, on peut modifier le premier argument du \raisebox. Dans le troisième exemple, en plus de ce qui précède, on diminue la largeur de ligne dans la minipage et on fait croire à TeX que la totalité de l'annotation (espace séparateur compris) a une largeur nulle, grâce à la commande \makebox. Ceci modifie le placement horizontal de l'équation si les équations de ce type [display formulas] sont centrées, comme c'est le cas dans la capture d'écran ci-dessous (i.e., si l'on a pas utilisé l'option fleqn de \documentclass ou quelque chose du même genre).

    yBD8GQf.png

    [1] Utiliser les deux arguments optionnels de \raisebox si l'on veut donner à la minipage de la hauteur et/ou de la profondeur (dont TeX tiendra compte pour déterminer l'espace entre cette équation, ce qui précède et ce qui suit).
  • Bonjour,

    Merci beaucoup brian pour la solution apportée, c'est exactement ce que je voulais faire ! Toutefois, en essayant de l'adapter au véritable document que je dois rédiger, j'ai rencontré un petit problème assez embêtant pour lequel je crains qu'il puisse être possible de le résoudre.
    Le problème est le suivant : pour chaque \minipage, on doit lui attribuer une longueur particulière dans l'exemple que vous m'avez fourni, c'était 6 cm. Seulement, cette longueur de 6 cm est dépendante de la longueur de l'équation précédente de manière à ce que l'équation + le texte "s'étalent" parfaitement bien dans la page. Ainsi, lorsqu'il s'agit d'écrire d'autres équations, il faut manuellement trouver la longueur adéquate de notre \minipage de manière à ce que l'équation + le texte rentrent parfaitement. Je voulais donc vous demander s'il était possible que cette longueur ''soit trouvée automatiquement par latex" de manière à ce que le texte aille jusqu'à la marge de droite (ou que la longueur de la minipage soit pile celle qui sépare l'équation de la marge de droite de la page). Je précise que j'utilise l'option fleqn de \documentclass.

    Voici un petit exemple :
    \begin{align*}
    -4x^{2}+14x=4x^{2}-14x+12 & \iff 0 = 4x^{2}-14x+12+4x^{2}-14x & &\raisebox{0pt}[0pt][40pt]{\begin{minipage}[t]{6cm} $i.e.$ en faisant une certaine opération et ce texte permet d'expliquer le passage à la ligne suivante, cependant il est trop grand est déborde de la page à droite... \end{minipage}}\\
    -4x^{2}+14x=4x^{2}-14x+12 & \iff 0 = 4x^{2}-14x &&\raisebox{0pt}[0pt][40pt]{\begin{minipage}[t]{6cm} $i.e.$ en faisant une certaine opération et ce texte permet d'expliquer le passage à la ligne suivante, cependant il est trop grand est déborde de la page à droite... \end{minipage}}
    \end{align*}
    
    \begin{align*}
    \left(\prod_{j=1}^{k}(X-\lambda_j)\right)(f)(x) &=\left(\prod_{j=1}^{k}(f-\lambda_jid_E)\right)(x) &&\raisebox{0pt}[0pt][40pt]{\begin{minipage}[t]{6cm} $i.e.$ en faisant une certaine opération et ce texte permet d'expliquer le passage à la ligne suivante, cependant il est trop grand est déborde de la page à droite... \end{minipage}}\\
    &=\left(\prod_{j=1}^{k}(f-\lambda_jid_E)\right)(x)&&\raisebox{0pt}[0pt][40pt]{\begin{minipage}[t]{6cm} $i.e.$ en faisant une certaine opération et ce texte permet d'expliquer le passage à la ligne suivante, cependant il est trop grand est déborde de la page à droite... \end{minipage}}
    \end{align*}
    

    En espérant que vous puissiez m'aider et en vous remerciant pour la première solution qui est tout de même très satisfaisante.
  • Bonjour,

    Ce n'est pas très joli au niveau du code, mais il est possible de mesurer l'équation la plus longue en la mettant dans un environnement aligned :
    \documentclass[a4paper,fleqn]{article}
    \usepackage{amsmath}
    \usepackage{calc}
    
    \newlength{\annotationWidth}
    \newlength{\annotationSep}
    \setlength{\annotationSep}{1em} % comme un \quad
    
    \newcommand*{\alignedWidth}[1]{%
      \widthof{%
        \ensuremath{%
          \begin{aligned}
            #1
          \end{aligned}%
        }}%
    }
    
    \newcommand*{\equationLongue}{} % pour stocker l'équation longue courante
    \newcommand*{\nelleEquationLongue}[1]{%
      % Stocke l'équation, mesure et retourne l'espace restant pour la minipage
      % une fois qu'on a retiré tout le reste.
      \renewcommand*{\equationLongue}{#1}%
      \setlength{\annotationWidth}{%
        \linewidth-\mathindent-\alignedWidth{\equationLongue}-\annotationSep}%
    }
    
    \begin{document}
    \nelleEquationLongue{%
      \left(\prod_{j=1}^{k}(X-\lambda_j)\right)(f)(x)%
       &= \left(\prod_{j=1}^{k}(f-\lambda_jid_E)\right)(x)%
    }%
    %
    \begin{align*}
      \equationLongue
      \raisebox{0pt}[0pt][90pt]{\hspace*{\annotationSep}%
      \begin{minipage}[t]{\annotationWidth}
        \emph{i.e.,} en faisant une certaine opération et ce texte permet
        d'expliquer le passage à la ligne suivante, cependant il est trop grand
        est déborde de la page à droite...
      \end{minipage}}\\
      &=\left(\prod_{j=1}^{k}(f-\lambda_jid_E)\right)(x)
        \raisebox{0pt}[0pt][40pt]{\hspace*{\annotationSep}%
        \begin{minipage}[t]{\annotationWidth}
          \emph{i.e.,} en faisant une certaine opération et ce texte permet
          d'expliquer le passage à la ligne suivante, cependant il est trop grand
          est déborde de la page à droite...
        \end{minipage}}
    \end{align*}
    \end{document}
    

    Edit : il manquait un % après le '\newcommand*{\nelleEquationLongue}[1]{'.
  • Bonjour,

    Merci beaucoup brian, votre solution marche à la perfection, c'est super ! Certes le code n'est pas très "joli" mais le plus important c'est le résultat.
  • De rien, j'ai ajouté un un % (initialement oublié) après le '\newcommand*{\nelleEquationLongue}[1]{'.
  • J'ai oublié un truc, mais je ne peux pas tester pour l'instant (ordi). Pour que les minipages correspondant aux différentes lignes soient bien alignées même avec des équations de diverses longueurs, on doit pouvoir mettre soit un \hspace*{\fill} juste avant, soit utiliser deux & de suite avant chacun des machins suivant les expressions mathématiques comme, je crois, tu l´avais fait.

    (Si l'on souhaite des minipages de différentes longueurs au sein d'un même environnement align*, on ne peut pas utiliser directement les commandes que j'ai écrites, car il faut stocker toutes les longueurs mesurées avant de commencer l'environnement align*.)
  • Voici ce que je voulais dire, concernant la solution avec les deux & consécutifs dans align*. J'ai également commenté les deux \raisebox pour montrer qu'on peut utiliser la hauteur naturelle des minipages sans avoir besoin de l'approcher par tâtons :
    \documentclass[a4paper,fleqn]{article}
    \usepackage{amsmath}
    \usepackage{calc}
    
    \newlength{\annotationWidth}
    \newlength{\annotationSep}
    \setlength{\annotationSep}{1em} % largeur d'un \quad
    
    \newcommand*{\alignedWidth}[1]{%
      \widthof{%
        \ensuremath{%
          \begin{aligned}
            #1
          \end{aligned}%
        }}%
    }
    
    \newcommand*{\equationLongue}{} % pour stocker l'équation longue courante
    \newcommand*{\nelleEquationLongue}[1]{%
      % Stocke l'équation, mesure et met dans \annotationWidth l'espace restant
      % pour la minipage une fois qu'on a retiré tout le reste.
      \renewcommand*{\equationLongue}{#1}%
      \setlength{\annotationWidth}{%
        \linewidth-\mathindent-\alignedWidth{\equationLongue}-\annotationSep}%
    }
    
    \begin{document}
    \nelleEquationLongue{%
      \left(\prod_{j=1}^{k}(X-\lambda_j)\right)(f)(x)%
       &= \left(\prod_{j=1}^{k}(f-\lambda_jid_E)\right)(x) &&
    }%
    %
    \begin{align*}
      \equationLongue
      %\raisebox{0pt}[0pt][90pt]{
      \hspace*{\annotationSep}%
      \begin{minipage}[t]{\annotationWidth}
        \emph{i.e.,} en faisant une certaine opération et ce texte permet
        d'expliquer le passage à la ligne suivante, cependant il est trop grand
        est déborde de la page à droite...
      \end{minipage}%}%
      \\
      &= g(x) &&
        %\raisebox{0pt}[0pt][40pt]{
        \hspace*{\annotationSep}%
        \begin{minipage}[t]{\annotationWidth}
          \emph{i.e.,} en faisant une certaine opération et ce texte permet
          d'expliquer le passage à la ligne suivante, cependant il est trop grand
          est déborde de la page à droite...
        \end{minipage}%}%
    \end{align*}
    \end{document}
    
    Les underfull \hbox sont uniquement dus au fait que les minipages constituent des colonnes très étroites, d'où une tâche impossible pour TeX (le package microtype pourrait aider un peu). On peut s'en convaincre en mettant de petites marges pour tester, par exemple avec :
    \usepackage{lmodern}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage[top=4cm, headsep=1cm, lines=50, width=18cm]{geometry}
    
    en-dessous du \documentclass, de sorte que les minipages sont alors assez larges pour pouvoir être remplies sans underfull \hbox.

    Zh8yMhc.png
  • Bonjour,

    Je viens d'adapter ta solution à mon document et ça marche parfaitement, je n'ai plus qu'à le rédiger maintenant. Je te remercie, mon document est beaucoup plus propre désormais. Et pour l'alignement des minipages, j'utilise le "&&", ça marche assez bien et les calculs sont beaucoup plus clairs car cela permet de bien les distinguer par rapport aux explications, lorsqu'il y en a.
    Encore merci pour l'aide apportée.
  • Bonjour,

    Je me permets de faire remonter le sujet car je viens de découvrir le package witharrows de François Pantigny et il me semble qu'il apporte une bien meilleure solution au problème dont il est question ici que mes petits bricolages.
Connectez-vous ou Inscrivez-vous pour répondre.