当方程大于线宽时如何缩放方程?

当方程大于线宽时如何缩放方程?

我知道我们可以使用以下方法调整方程的大小:

\resizebox{1\hsize}{!}{$ $}

但是当我有一个大等式时我总是必须将其数字化。

那么,如何让乳胶感知方程大于线宽并自动重新缩放。

我认为应该创造一个新的环境...

答案1

您可以定义一个简单的宏,在其中可以进行长度比较,这里是使用calc包和包\resizebox中的命令的尝试graphicx

\documentclass{article}
\usepackage{graphicx}
\usepackage{calc}

\newlength{\eqhsize}
\newcommand{\myinlineeq}[1]{%
    \setlength{\eqhsize}{\minof{\widthof{\mbox{\ensuremath{#1}}}}{\linewidth}}
    \resizebox{\eqhsize}{!}{\ensuremath{#1}}}

\begin{document}
    $x = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25$

    \resizebox{1\hsize}{!}{$ x = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25$}

    \myinlineeq{x = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25}

    \myinlineeq{1}

\end{document}

您应该将方程长度与线宽进行比较,因为这是调整大小框的效果。

结果: 在此处输入图片描述

答案2

相同的想法,仅适用于显示数学。环境 eqnsize 和 eqnsize* 类似于 equation 和 equation*。请注意\tag\notag已实现。

我最初尝试尽可能多地整合 amsmath,但最终却迷失了方向。比较 eqnsize 和 eqnsize* 可以发现很多可以移至单独宏的通用代码。我想这就是 amsmath 变得如此复杂的原因。

\documentclass{article}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{environ}
\usepackage{showframe}

\makeatletter
\newcommand{\mytag}[1]{\setcounter{equation}{\reset}%
    \gdef\df@tag{\tagform@{#1}}%
    \gdef\@currentlabel{#1}}%

\newcommand{\mynotag}{\setcounter{equation}{\reset}%
  \global\let\df@tag\@empty%
  \global\let\@currentlabel\@empty}%

\NewEnviron{eqnsize}{\edef\reset{\arabic{equation}}%
  \refstepcounter{equation}%
  \def\df@tag{\normalfont\normalcolor\tagform@{\theequation}}%
  \let\tag=\mytag
  \let\notag=\mynotag
  \sbox1{$\displaystyle\BODY$}%
  \sbox2{\df@tag}%
  \@beginparpenalty\predisplaypenalty
  \@endparpenalty\postdisplaypenalty
  \@topsep\abovedisplayskip
  \trivlist
    \item\leavevmode
    \@tempdima=\dimexpr \wd1+2\wd2+2em\relax
    \ifdim\linewidth<\@tempdima
      \iftagsleft@ \resizebox{\linewidth}{!}{\hbox to \@tempdima{\rlap{\usebox2}\hfil\usebox1\hfil}}%
      \else \resizebox{\linewidth}{!}{\hbox to \@tempdima{\hfil\usebox1\hfil\llap{\usebox2}}}%
      \fi
    \else
      \iftagsleft@ \hbox to \linewidth{\rlap{\usebox2}\hfil\usebox1\hfil}%
      \else \hbox to \linewidth{\hfil\usebox1\hfil\llap{\usebox2}}%
      \fi
    \fi
  \endtrivlist}

\NewEnviron{eqnsize*}[0]{\edef\reset{\arabic{equation}}%
  \refstepcounter{equation}% hyperref target for \tag
  \mynotag
  \let\tag=\mytag
  \let\notag=\mynotag
  \sbox1{$\displaystyle\BODY$}%
  \sbox2{\df@tag}%
  \@beginparpenalty\predisplaypenalty
  \@endparpenalty\postdisplaypenalty
  \@topsep\abovedisplayskip
  \trivlist
    \item\leavevmode
    \@tempdima=\dimexpr \wd1+2\wd2+2em\relax
    \ifdim\linewidth<\@tempdima
      \iftagsleft@ \resizebox{\linewidth}{!}{\hbox to \@tempdima{\rlap{\usebox2}\hfil\usebox1\hfil}}%
      \else \resizebox{\linewidth}{!}{\hbox to \@tempdima{\hfil\usebox1\hfil\llap{\usebox2}}}%
      \fi
    \else
      \iftagsleft@ \hbox to \linewidth{\rlap{\usebox2}\hfil\usebox1\hfil}%
      \else \hbox to \linewidth{\hfil\usebox1\hfil\llap{\usebox2}}%
      \fi
    \fi
  \endtrivlist}
\makeatother

\begin{document}
In which case one has
\begin{eqnsize}
x = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14
\end{eqnsize}
which can be expanded as
\begin{eqnsize}
x = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20
\end{eqnsize}
if one so desires.
\end{document}

演示

相关内容