当将方程式在奇数位置对齐时,如何保留方程式中的空格?

当将方程式在奇数位置对齐时,如何保留方程式中的空格?

在中间的例子中,$\equiv$ 和右侧之间的空格是错误的。我可以不将对齐 & 放在我想要的任何位置吗?

例子

\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}

\begin{document}
\begin{align*}
a + b \equiv c\\
x + y \equiv z.
\end{align*}
\begin{align*}
a + b \equiv& c\\
x + y \equiv& z.
\end{align*}
\begin{align*}
a + b &\equiv c\\
x + y &\equiv z.
\end{align*}
\end{document}

答案1

我能不把对齐放在&任何我想要的位置吗?

不可以。正如您在第三个示例中发现的那样,当您将对齐标签 & 关系符号。如果你把它关系符号,您会得到错误的间距,如第二个例子中所示。

为什么?让我们用你的align*例子来说明。amsmath.dtx我们发现以下涉及align环境系列的代码:

\def\align@preamble{%
   &\hfil
    \strut@
    \setboxz@h{\@lign$\m@th\displaystyle{##}$}%
    \ifmeasuring@\savefieldlength@\fi
    \set@field
    \tabskip\z@skip
   &\setboxz@h{\@lign$\m@th\displaystyle{{}##}$}%
    \ifmeasuring@\savefieldlength@\fi
    \set@field
    \hfil
    \tabskip\alignsep@
}

需要注意的最重要的事情是:$\m@th\displaystyle{##}$$\m@th\displaystyle{{}##}$。这两行表明,当创建“右对齐和左对齐的两列”对时,左对齐的第二列 {}在开头插入了一个空原子,这就是amsmath关系符号右(但只有将对齐标签放在关系符号之前时)。

类似的实现适用于aligned环境系列、splitmultline环境。


我愿意不是鼓励以下 hack!我认为更改稳定内容的源代码是 amsmath危险的,而且是极其糟糕的做法。我希望下一个例子可以说明为什么amsmath不添加 {}到两列。

只是为了向您展示如果我改变右对齐第一列的定义会发生什么:

\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
%\usepackage{amsfonts}% <- you don't need `amsfonts' if `amssymb' is loaded
\usepackage{amssymb}

% Do not do the following! It is just for this illustration!
\makeatletter
\def\align@preamble{%
   &\hfil
    \strut@
%    \setboxz@h{\@lign$\m@th\displaystyle{##}$}% <- commented out
    \setboxz@h{\@lign$\m@th\displaystyle{##{}}$}% <- inserted here
    \ifmeasuring@\savefieldlength@\fi
    \set@field
    \tabskip\z@skip
   &\setboxz@h{\@lign$\m@th\displaystyle{{}##}$}%
    \ifmeasuring@\savefieldlength@\fi
    \set@field
    \hfil
    \tabskip\alignsep@
}
\makeatother

\begin{document}
\subsection*{I~do not encourage this hack! This leads to bad coding habits}
\begin{align*}
a + b \equiv c \qquad\qquad & a + b \equiv +1 \\
x + y \equiv z \qquad\qquad & x + y \equiv -1.
\end{align*}
\begin{align*}
a + b \equiv& c \quad \text{Seems fine} & a + b \equiv& +1 \quad \text{Wrong spacing!}\\
x + y \equiv& z                         & x + y \equiv& -1.
\end{align*}
\begin{align*}
a + b &\equiv c \quad \text{This is good} & a + b &\equiv +1 \quad \text{Correct spacing!}\\
x + y &\equiv z                           & x + y &\equiv -1.
\end{align*}
\end{document}

对齐间距

相关内容