web-dev-qa-db-fra.com

Mettre à l'échelle une équation pour s'adapter à la largeur de page exacte

J'ai une équation qui n'est qu'un tout petit peu trop large pour une ligne. J'aimerais vraiment éviter d'avoir le numéro d'équation sur la ligne suivante. Comment y parvenez-vous? J'utilise actuellement \small, mais c'est exagéré.

Veuillez noter. J'ai essayé scalebox et fittowidth mais j'obtiens des erreurs de manque \endgroup. J'ai également utilisé \! dans toute son étendue. J'espère une solution qui me permettra de mettre à l'échelle l'équation d'une ligne appropriée à la largeur de la page.

Voici un exemple (pas mon équation réelle): Long equation

37
Geoff
\begin{equation}
\resizebox{.9\hsize}{!}{$A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z$}
\end{equation}

ou

\begin{equation}
\resizebox{.8\hsize}{!}{$A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z$}
\end{equation}
58
Alexey Malistov

Le graphicx package fournit la commande \resizebox{width}{height}{object}:

\documentclass{article}
\usepackage{graphicx}
\begin{document}
\hrule
%%%
\makeatletter%
\setlength{\@tempdima}{\the\columnwidth}% the, well columnwidth
\settowidth{\@tempdimb}{(\ref{Equ:TooLong})}% the width of the "(1)"
\addtolength{\@tempdima}{-\the\@tempdimb}% which cannot be used for the math
\addtolength{\@tempdima}{-1em}%
% There is probably some variable giving the required minimal distance
% between math and label, but because I do not know it I used 1em instead.
\addtolength{\@tempdima}{-1pt}% distance must be greater than "1em"
\xdef\Equ@width{\the\@tempdima}% space remaining for math
\begin{equation}%
\resizebox{\Equ@width}{!}{$\displaystyle{% to get everything inside "big"
 A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z}$}%
\label{Equ:TooLong}%
\end{equation}%
\makeatother%
%%%
\hrule
\end{document}
2
Stephen

Je viens d'avoir la situation que je voulais cela uniquement pour les lignes dépassant \linewidth, c'est-à-dire: en serrant légèrement les longues lignes. Puisqu'il m'a fallu des heures pour comprendre cela, je voudrais l'ajouter ici.

Je tiens à souligner que la mise à l'échelle des polices dans LaTeX est un péché mortel! Dans presque toutes les situations, il existe un meilleur moyen (par exemple multline du package mathtools). Alors utilisez-le consciemment.

Dans ce cas particulier, je n'ai eu aucune influence sur la base de code à part le préambule et certaines lignes dépassant légèrement la bordure de la page lorsque je l'ai compilé en format PDF à l'échelle d'un livre électronique.

\usepackage{environ}         % provides \BODY
\usepackage{etoolbox}        % provides \ifdimcomp
\usepackage{graphicx}        % provides \resizebox

\newlength{\myl}
\let\origequation=\equation
\let\origendequation=\endequation

\RenewEnviron{equation}{
  \settowidth{\myl}{$\BODY$}                       % calculate width and save as \myl
  \origequation
  \ifdimcomp{\the\linewidth}{>}{\the\myl}
  {\ensuremath{\BODY}}                             % True
  {\resizebox{\linewidth}{!}{\ensuremath{\BODY}}}  % False
  \origendequation
}

Avant before Après after

1
Suuuehgi