似乎有多达、、、、、align
和/ -有些也在带星号的版本中。aligned
alignedat
alignat
xalignat
xxalignat
falign
amsmath
mathtools
我只是发现了一些像这样的草率的言论:
“对齐的优点是水平和垂直间距更好。“,第 52 页
我何时使用哪种对齐环境(最佳实践)?
它们之间究竟有哪些区别?
这个环境为什么会存在(如果适用的话,示例用例)?
我应该避免哪些以及为什么?
具体来说,
align
和xalignat
xxalignat
和flalign*
alignat*
和alignedat
align*
和之间的语义差异 / 不同用例是什么aligned
? 什么时候使用哪个?
在我看来,它似乎是align
为了打印独立的列,而alignat
旨在对齐受抚养人列(例如,方程式 [行] 按其运算符 [列] 对齐)。
多谢!
附录
来源:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{mathtools,onlyamsmath}
\newlength{\Short}
\newlength{\LShort}
\newlength{\Long}
\setlength{\Short}{.05\columnwidth}
\setlength{\LShort}{.08\columnwidth}
\newcommand{\env}[2][]{\begin{#2}#1
\framebox[\Short]{} &= \framebox[\LShort]{} & \framebox[\LShort]{} &= \framebox[\LShort]{} & \framebox[\LShort]{} &= \framebox[\LShort]{}\\
\framebox[\Short]{} &= \framebox[\Short]{} & \framebox[\Short]{} &= \framebox[\Short]{} & \framebox[\Short]{} &= \framebox[\Short]{}
\end{#2}}
\newcommand{\Align}[2][]{\paragraph{#2}\env[#1]{#2}}
\newcommand{\mAlign}[2][]{\paragraph{#2}\[\env[#1]{#2}\]}
\begin{document}
\thispagestyle{empty}
\enlargethispage{\baselineskip}
\Align{align*}
\Align{align}
\Align[{3}]{alignat*}
\Align[{3}]{alignat}
\mAlign{aligned}
\mAlign[{3}]{alignedat}
\Align[{3}]{xalignat}
\Align[{3}]{xxalignat}
\Align{flalign*}
\Align{flalign}
\newpage
\Align{align}
\Align[{3}]{xalignat}
\Align[{3}]{xxalignat}
\Align{flalign*}
\Align[{3}]{alignat*}
\mAlign[{3}]{alignedat}
\Align{align*}
\mAlign{aligned}
\end{document}
答案1
amsmath
源自 AMSTeX ( amstex.tex
),它没有*
形式,但其他方面命名大体相似,包括x-
变体。启动数学显示的环境记录amsmath.pdf
在
% \begin{environment}{align}
% \begin{environment}{align*}
% \begin{environment}{flalign}
% \begin{environment}{flalign*}
% \begin{environment}{alignat}
% \begin{environment}{alignat*}
% \begin{environment}{xalignat}
% \begin{environment}{xalignat*}
% \begin{environment}{xxalignat}
% The definitions of the various \env{align} environments are quite
% straight-forward.
%
% \begin{macrocode}
\newenvironment{alignat}{%
\start@align\z@\st@rredfalse
}{%
\endalign
}
\newenvironment{alignat*}{%
\start@align\z@\st@rredtrue
}{%
\endalign
}
\newenvironment{xalignat}{%
\start@align\@ne\st@rredfalse
}{%
\endalign
}
\newenvironment{xalignat*}{%
\start@align\@ne\st@rredtrue
}{%
\endalign
}
\newenvironment{xxalignat}{%
\start@align\tw@\st@rredtrue
}{%
\endalign
}
\newenvironment{align}{%
\start@align\@ne\st@rredfalse\m@ne
}{%
\math@cr \black@\totwidth@
\egroup
\ifingather@
\restorealignstate@
\egroup
\nonumber
\ifnum0=`{\fi\iffalse}\fi
\else
$$%
\fi
\ignorespacesafterend
}
\newenvironment{align*}{%
\start@align\@ne\st@rredtrue\m@ne
}{%
\endalign
}
\newenvironment{flalign}{%
\start@align\tw@\st@rredfalse\m@ne
}{%
\endalign
}
\newenvironment{flalign*}{%
\start@align\tw@\st@rredtrue\m@ne
}{%
\endalign
}
您可以看到它们都是相同底层代码的变体。
比较,说xalignat*
和align*
你看
\start@align\@ne\st@rredtrue
\start@align\@ne\st@rredtrue\m@ne
所以align*
只是\xalignat*
提供了 -1 作为列对的数量,这使得环境不需要{3}
在您的示例中为 3 个列对提供参数,它只是做了正确的事情。因此,版本x...
并不是真正需要的,并且根本没有记录在用户级amslguide.pdf
文档中。
根据文档,命名环境不会启动数学显示,必须在外部数学环境中启动。它们与或-ed
有更多共同之处,只是它们设置条目为左对齐和右对齐,而不是居中对齐,并使用 displaystyle 而不是 textstyle。array
matrix