如果数学显示太宽,则会\eqno
出现在左侧的下一行,而不是应该出现在右侧。有人知道如何解决这个问题吗?这是一个例子:
\documentclass[a4paper]{article}
\usepackage[cmex10]{amsmath}
\usepackage{amsfonts}
\usepackage{mathtools}
\usepackage{mathptmx}
\newcommand{\E}{\mathbb{E}}
\newcommand{\si}[1]{\ensuremath{\sigma_{#1}^{2}}}
\begin{document}
\begin{equation}
C=
\begin{bmatrix}
{C_{11} } & {C_{12} } \\
{C_{21} } & {C_{22} } \\
\end{bmatrix}=
\begin{bmatrix}
\E\left[ {\left( {X-m_{X}} \right)^{2}} \right] & \E\left[ {\left( {X-m_{X}} \right)\left( {Y-m_{Y}} \right)} \right] \\
\E\left[ {\left( {X-m_{X}} \right)\left( {Y-m_{Y}} \right)} \right] & \E\left[ {\left( {Y-m_{Y}} \right)^{2}} \right]
\end{bmatrix}=
\begin{bmatrix}
\si{X} & C_{XY} \\
C_{XY} & \si{Y} \\
\end{bmatrix}
\end{equation}
\end{document}
由 Hendrik Vogt 添加:
普通的 LuaTeX 也会发生同样的事情。
\hsize=2cm
$$a^2+b^2=c^2\eqno(1)$$
\bye
编译后的输出luatex
:
编译后的输出pdftex
:
亲爱的朋友们:我认为下一个代码是一个可能的临时解决方案:
\usepackage{environ}
\NewEnviron{equationw}
{
\begin{equation}\begin{split}
\BODY
\end{split}\end{equation}
}
答案1
这似乎是 LuaTeX 引擎的一个错误,见下文。要解决此问题,请使用align
而不是equation
;align
环境不依赖 TeX 引擎来放置方程编号。这解决了您的问题(但可能会影响垂直的间距更短方程式)。
我思考我可以找到错误texmath.w
,第 2220 行至第 2225 行。那里说
if ((eqno_box != null) && (eqno_w == 0) && !l) {
tail_append(new_penalty(inf_penalty));
shift_amount(eqno_box) = line_s;
append_to_vlist(eqno_box);
g2 = 0;
}
有趣的是第三行:包含方程编号的框的移位量为line_s
,之前设置为\displayindent
(通常为零)。因此,方程编号左对齐。
以下是 Knuth 的tex.web
,第 22580 至 22585 行:
if (a<>null)and(e=0)and not l then
begin tail_append(new_penalty(inf_penalty));
shift_amount(a):=s+z-width(a);
append_to_vlist(a);
g2:=0;
end;
您可以看到,这是用另一种语言编写的完全相同的代码,eqno_box != null
翻译为a<>null
,等等。这里,包含方程编号的框的移位量为s+z-width(a)
,其中与上面s
相同,是线宽,是包含方程编号的框的宽度。这是使方程编号向右对齐的正确移位量!line_s
z
width(a)
a
也许我应该解释一下代码第一行的条件:带有方程编号的框应该是非空的,它的宽度应该是 0(!),并且我们不应该处于升eft 方程编号如\leqno
。宽度为什么是 0?这是之前设置的“标志”,表示该框应放在下一行,因为它不适合方程式所在的行。