我知道我们可以使用以下方法调整方程的大小:
\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}