修改 \everydisplay 导致 align* 环境停止工作

修改 \everydisplay 导致 align* 环境停止工作

我希望我的文档中显示的所有数学运算都以内联数学的样式排版。在他回答这个问题,Matthew Leingang 解释了如何通过仔细修改标记列表来做相反的事情(将所有内联数学排版为显示数学的样式)\everymath。通过类比推理,我认为以下测试文档应该有效:

\documentclass[a4paper,reqno]{amsart}

\usepackage{amssymb,amsmath,amsthm,fullpage}

\everydisplay=\expandafter{\the\everydisplay\textstyle}

\begin{document}

\begin{align*}x
&=\sum_{i=1}^{10}i^2\\
&=t^3+\int_3^9y^a\,\mathrm{d}y\end{align*}

\end{document}

但事实并非如此。尝试编译此文档时,TeXWorks 给出以下错误:

! Improper \halign inside $$'s.
<recently read> \halign

它显示的代码,好像是为了提醒我注意错误,是 附近的代码\end{align*}。如果注释掉前导修改中的行,则不会出现此错误\everydisplay。为什么这不起作用?

答案1

Internall,align使用对齐显示,TeXbook 第 190 页描述如下:

TeX 还允许“对齐显示”[...] 对齐显示由一般形式的命令创建

$$ <assignments> \halign{ <alignment> } <assignments> $$

其中<assignments>[...] 不产生任何数学列表。

但这\textstyle不是一项任务:事实上,它启动了一个数学列表。因此,\halign在该等式中不再是单独的,TeX 会发出警告。

现在有一个解决方案:由于在内部align构建了一个类似的结构$\displaystyle ...$,我们可以使用重新定义大小\let\displaystyle\textstyle

\documentclass{article}
\usepackage{amsmath}
\begin{document}

\let\displaystyle\textstyle

An example of aligned equations,
\begin{align}
\sum_{i=1}^N \frac{x^2}{2} + \frac{y^2}{2} &= \frac{\sqrt{z^{\frac{2}{3}}}}{2}
&\frac{\sqrt{z^{\frac{2}{3}}}}{2} &= \sum_{i=1}^N \frac{x^2}{2} + \frac{y^2}{2} 
\\
\frac{\sqrt{z^{\frac{2}{3}}}}{2} &= \sum_{i=1}^N \frac{x^2}{2} + \frac{y^2}{2} 
&\sum_{i=1}^N \frac{x^2}{2} + \frac{y^2}{2} &= \frac{\sqrt{z^{\frac{2}{3}}}}{2}
\end{align}
which seem to work.

But the \verb|equation| environment won't:
\begin{equation}
\frac{\sqrt{z^{\frac{2}{3}}}}{2} = \sum_{i=1}^N \frac{x^2}{2} + \frac{y^2}{2} 
\end{equation}

\end{document}

您可能希望在使用之前保存定义,\let\olddisplaystyle\displaystyle以备不时之需。

答案2

部分解决方法是定义一些可用于替换\[ ... \]align*环境的宏。请注意以下内容:

\documentclass[a4paper,reqno]{amsart}

\usepackage{amssymb,amsmath,amsthm,fullpage}

\newcommand{\t}{\textstyle}
\newcommand{\blob}[1]{\[\t#1\]}
\newcommand{\calc}[2]{\begin{align*}\t#1&\t#2\end{align*}}
\newcommand{\nl}{\\&\t}

\begin{document}

\blob{4^x + 5^y = 6^z \quad\mathrm{unless}\quad x = \frac{y}{z}}

\calc{x}{
    =\sum_{i=1}^{10} i^2 \nl
    \leq t^3 + \int_3^9y^a\,\mathrm{d}y
}

\end{document}

这将显示数学排版为内联数学,并提供一些命令,这些命令几乎可以完成我想要的工作,并使代码具有足够的可读性。对于和\blob不够\calc好的不寻常情况,至少\t是相当简洁的,即使它必须几乎无处不在。

不过,这并不是我问题的真正答案。我还是想知道原始问题是怎么回事……

相关内容