这是 eqnarray 居中的已知问题吗?

这是 eqnarray 居中的已知问题吗?

在此示例中,

\documentclass{article}

\begin{document}

\begin{eqnarray*}
A&=&B,\\
C&=&D,\\
E&=&F,
\end{eqnarray*}

\begin{eqnarray*}
A&=&\mathord{B,}\\
C&=&\mathord{D,}\\
E&=&\mathord{F,}
\end{eqnarray*}

\end{document}

我原以为两个eqnarray*' 应该在 = 符号上完全对齐,但实际上顶部的 '略微偏向底部的 ' 左侧(差异不到 1 点)。我认为这与顶部的行以标点符号结尾,而底部的行以普通符号结尾eqnarray*有关。这是一个已知问题吗?eqnarray*eqnarray*

顺便说一句,如果我eqnarray这里,中间一列周围的多余空间被消除了,但我的居中问题仍然存在。

答案1

添加\showoutput调试这类东西。

首先,因为,位于表达式的中间,所以

......\glue(\thinmuskip) 1.66663

在它之后,但是因为在第二个表达式中它位于子表达式的末尾,所以{}没有这样的空间,所以第一个表达式要宽得多,当它居中时会将事物移动一半,正如你所说的那样小于一个点。


仔细观察你会发现额外的空间是仅有的在前两行添加,因为,只有在末尾才添加空格,\\其作用类似于{}\end{eqnarray*}实际上不是。$B,{}$与 相比$B,$。这可以说是 中的一个错误eqnarray,但现在很难更改它。

添加

\makeatletter
\def\foo#1!!{\def\@eqncr{\ifnum0=`{\fi}{\ifnum0=`}\fi#1}}
\expandafter\foo\@eqncr!!
\makeatother

修复了它(我认为)

使用逗号时,间距变化仅在末尾,因此会影响整个对齐的居中,但并不那么明显。但使用逗号时,+最后一行的不同就更加明显了:

也许我们应该修复这个问题fixltx2e....

在此处输入图片描述

\documentclass{article}

\begin{document}


\showoutput
\begin{eqnarray*}
A&=&B+\\
C&=&D+\\
E&=&F+
\end{eqnarray*}

\makeatletter
\def\foo#1!!{\def\@eqncr{\ifnum0=`{\fi}{\ifnum0=`}\fi#1}}
\expandafter\foo\@eqncr!!
\let\@seqncr=\@eqncr

\begin{eqnarray*}
A&=&B+\\
C&=&D+\\
E&=&F+
\end{eqnarray*}

\end{document}

实际上我认为在这里使用简单是可以的,\bgroup所以:

\def\foo#1!!{\def\@eqncr{\egroup\bgroup#1}}

而不是特殊的\halign 技巧组。

相关内容