可以对齐方程式并压缩数学的 Displaymath 环境

可以对齐方程式并压缩数学的 Displaymath 环境

我有一个很长的方程需要对齐。如果不压缩数学,它只比 长一点\textwidth。然而,align环境根本不压缩数学,这导致了 badbox。

\documentclass[11pt]{article}
\usepackage{amsmath}
\begin{document}
 Using ``\verb|\[...\]|'':
 \[
  1+2+3+4+5+6+7+8+9+10
  = 11+12+13+14+15+16+17+18+19+20+21
 \]

 Using ``align'':
 \begin{align*}
  1+2+3+4+5+6+7+8+9+10
  &= 11+12+13+14+15+16+17+18+19+20+21\\
  &= 11+12+13+14+15+16+17+18+19+20+21
 \end{align*}
\end{document}

在此处输入图片描述

问题:

我怎样才能在压缩数学的环境中对齐方程式displaymath以避免出现坏箱?

我想要两全其美的结果:

  1. 数学的挤压(如使用时\[...\])和
  2. 对齐方程的能力(如使用时align)。

答案1

为了构建多行显示,TeX 必须将各个部分装箱以便测量它们。这将二元运算(如果\hspace公式中不使用灵活,则是唯一具有收缩性的运算)周围的粘合固定到其自然宽度。相反,当排版单个方程式时,其自然宽度超出可用空间,TeX 只会执行类似于

\hbox to \displaywidth{$\displaystyle <formula>$}

这样胶水就会收缩。

您的问题的一般解决方案是需要多次传递材料align:如果其中一行导致过满,则必须使用收缩系数重新排版该行上的框,并且必须重试对齐。

我应该说,技术上的复杂性令人生畏。而且结果可能不值得这么麻烦:对于单个方程式,轻微的收缩几乎不会被注意到,在显示中,它会在彼此旁边创建非常不同的线条:收缩程度高的线条在视觉上与没有收缩的线条不兼容。因此,真正的解决方案还应该对整个业务原因旁边的线条应用较少的收缩;等等。

也许一个案例可以用这种方式解决,一般的答案是:这样的设备很难制造,可能和鲁布·戈德堡机械一样没用。对于一个我们不需要漂亮字体的单一棘手方程,这里有一个可能性:一个命令\sq(“挤压”)可以将设置\medmuskip为所需的值。

\documentclass[11pt,draft]{article}
\usepackage{amsmath}
\newcommand{\sq}[2][0]{% "sq" for "squeeze"
  \mbox{$\medmuskip=#1mu\displaystyle#2$}%
}

\begin{document}
Using ``\verb|\[...\]|'':
\[
1+2+3+4+5+6+7+8+9+10
  = 11+12+13+14+15+16+17+18+19+20+21
\]
Using ``align'':
\begin{align*}
\sq{1+2+3+4+5+6+7+8+9+10}
  &=\sq{11+12+13+14+15+16+17+18+19+20+21}\\
\sq[.1]{1+2+3+4+5+6+7+8+9+10}
  &=\sq[.1]{11+12+13+14+15+16+17+18+19+20+21}\\
\sq[.2]{1+2+3+4+5+6+7+8+9+10}
  &=\sq[.2]{11+12+13+14+15+16+17+18+19+20+21}\\
\sq[.3]{1+2+3+4+5+6+7+8+9+10}
  &=\sq[.3]{11+12+13+14+15+16+17+18+19+20+21}
\end{align*}
\end{document}

只有最后一行超出 4pt。

在此处输入图片描述

答案2

使用multline来自amsmath包、编号环境(或其带星号的版本到未编号的版本)

\documentclass{report}
\usepackage{amsmath}

\begin{document}

\begin{multline*}
  1+2+3+4+5+6+7+8+9+10+11+12+13+14\\ +15+16+17+18+19+20+21
\end{multline*}
\end{document}

在此处输入图片描述

如果要从左对齐,只需在每行开头添加&

\begin{align*}
  & 1+2+3+4+5+6+7+8+9+\\ 
  & 10+11+12+13+14+15+16+17+18+19+\\ 
  & 20+21
\end{align*}

在此处输入图片描述

或者只是打破每一行以使其右对齐。

\begin{align*}
 1+2+3+4+5+6+7+8+9\\  
 +10+11+12+13+14+15+16+17+18+19\\ 
 +20+21
\end{align*}

答案3

我不确定你想要的是否有可能实现。

为了对齐多个不同的方程式,需要测量各个部分。为了测量一个部分,需要把它放在一个盒子里。把某物放在盒子里会“冻结”间距。

为了验证这一点,我们可以检查使用纯文本设置多行数学的机制。这是结果,后面是输入。

示例代码的输出

\hsize=30pc
\def\folio{}
\def\cs#1{{\tt\char`\\#1}}

The first (one-line) equation is too wide for the page, but
it is automatically squeezed by \TeX\ ({\sl\TeX boook}, pp.188-189).
First, set it in an \cs{hbox} to show the natural width.

\noindent
\hbox{$
  1+2+3+4+5+6+7+8+9+10
  = 11+12+13+14+15+16+17+18+19+20+21
$}

Now set it as a math display.
$$
  1+2+3+4+5+6+7+8+9+10
  = 11+12+13+14+15+16+17+18+19+20+21
$$

Expand it to multiple lines using \cs{eqalign} ({\sl\TeX book}, p.190).
$$
\eqalign{
  1+2+3+4+5+6+7+8+9+10
  &= 11+12+13+14+15+16+17+18+19+20+21\cr
  &= 21+22+23+24+25\cr
  &= 11+12+13+14+15+16+17+18+19+20+21\cr
}
$$

\bye

这不应该是一个惊喜,因为教科书上说(第 190 页;双重危险弯道):

TeX 还允许“对齐显示”,因为它们在外层不包含公式,所以不会在数学模式下处理。

由于在纯 tex 中无法挤压多行显示,因此我并不抱太大的希望,认为它可以在 latex 中实现,更不用说自动实现了。

也许可以用 luatex 制作出一些东西,但是(取决于探索使用纯 tex 会发生什么的结果)它可能不再符合教科书中描述的程序的规格。

相关内容