在中间的例子中,$\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
环境系列、split
和multline
环境。
我愿意不是鼓励以下 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}