2. 乳胶方程的显示和对齐|乳胶对齐 *

在本节中,我们将以以下方式使用术语“方程式”:指代数学显示中“逻辑上”不同的部分,该部分通常编号以供参考,并带有标签(例如,用括号中的数字表示)。此类标签也称为“标签”。

以下列表包含最受欢迎的显示环境。在适当的情况下,他们出演了没有方程式标记的形式。

equation`方程*一行,一个等式
`多线`多线*一个未对齐的多线方程,一个方程编号
``聚会`收集*几个方程式没有对准
align`对齐*具有多个对齐方式的几个方程式
flalignflalign*几个方程式:水平扩散的形式的“ Align”
split多线方程中的简单对齐

本章中的所有示例均为排本,右侧的数学材料和方程编号(标签)。为了可视化定位,我们在表示左右边缘以及中心线的输出中呈现蓝色垂直线。在乳胶源代码中,我们使用``%—–…`评论对文档序言中应与应放置在体内的行中放置的单独行。

1\usepackage[leqno]{amsmath}
2% -------------------------------------------------------------------------------
3\begin{equation} (a-b)^2 = a^2-2ab+b^2 \end{equation}
4\[ \cos2\eta = \cos^2\eta-\sin^2\eta \]

Leqno

如果要将数学从左边边缘定位为固定的缩进,而不是以文本列为中心,则可以使用“ Fleqn”选项。您可以通过设置橡胶长度“ \ Mathindent”的值来指定序言中缩进的大小。它的默认值与一级列表的缩进相同。如果您对此值感到满意,则可以跳过设置“ \ Mathindent”长度。

1\usepackage[fleqn,reqno]{amsmath}
2\setlength\mathindent{0.2in}
3% -------------------------------------------------------------------------------
4\begin{equation} (a-b)^2 = a^2-2ab+b^2 \end{equation}
5\[ \cos2\eta = \cos^2\eta-\sin^2\eta \]

勒克尼,雷克诺

这里无需在此处传递“ reqno”选项(默认值为默认值),但是它覆盖了文档类设置,因此等式编号被强制到正确的情况下。

在标准乳胶中,和`\‘用于显示对齐中的列和行分离。它们使用的细节在“ AMSMATH”环境中发生了变化。

2.1. 与标准乳胶的比较

一些多行显示环境允许您对齐公式的某些部分。与标准 LaTeX 环境 eqnarrayeqnarray* 相比,amsmath 包中定义的结构提供了一种略有不同且更简单的标记对齐点的方法。在标准 LaTeX 中,eqnarray* 类似于以 {rcl} 为前缀的 array 环境,这意味着需要两个 & 字符来指示两个对齐点。在 amsmath 包中,等效结构只有一个对齐点(就好像 array 有一个 {rl} 前缀),因此您只需在需要对齐的符号(通常是关系)左侧放置一个 & 字符即可。

eqnarray 环境会根据 array 的参数设置在对齐点处产生额外的空间。同时,amsmath 结构会提供固定的间距。下一个示例清楚地说明了两者的区别。同一个等式分别使用 equationaligneqnarray 环境进行排版。

 1\usepackage{amsmath}
 2% -------------------------------------------------------------------------------
 3\begin{equation}
 4x^2 + y^2 = z^2
 5\end{equation}
 6\begin{align}
 7x^2 + y^2 &= z^2 \\
 8x^3 + y^3 &< z^3
 9\end{align}
10\begin{eqnarray}
11x^2 + y^2 &=& z^2 \\
12x^3 + y^3 &<& z^3
13\end{eqnarray}

与标准乳胶相比

与标准 LATEX 一样,amsmath 显示中的行以 \\ 标记(或环境结束)。由于数学显示中的换行通常需要深入了解公式的结构,因此通常认为这超出了当今软件的能力。

2.2. 一行的单个方程式

equation 环境可以生成单个方程式。系统会根据所使用的选项自动生成一个标签,并将其放置在最左侧或最右侧。equation* 环境可以生成相同的方程式,但不包含标签。标准 LaTeX 也包含 equation,但没有 equation*,因为后者与标准显示的数学环境类似。

一个值得注意的事实是,标签的存在不会影响内容的定位。如果一行在一行上没有足够的空间,则标签将向上或向下移动:当方程式标签在左侧时,到上一行,当标签在右侧时,到下一行。

1\usepackage[leqno]{amsmath}
2% -------------------------------------------------------------------------------
3\begin{equation*}
4n^2 + m^2 = k^2
5\end{equation*}
6\begin{equation}
7n^p + m^p \neq k^p \qquad p > 2
8\end{equation}

一条线上的一个平衡

2.3. 在几行上的单个方程式无对准

equation 环境的一个变体是 multline 环境。它仅用于无法在一行中显示的公式。必须使用 \\ 字符标记换行符,因为换行符无法自动找到。

multline 的第一行将与左边距的缩进对齐,最后一行与右边距的相同缩进对齐。\multlinegap 的长度值定义了此缩进的大小。

除第一行和最后一行之外的每一行都会在显示宽度内单独居中(除非使用了 fleqn 选项)。但是,如果您在一行中添加 \shoveleft\shoveright 命令,该行将被强制向左或向右对齐。

“多线环境”具有一个单个标签,因为它在逻辑上是一个方程。因此,无法通过使用\tag\notag更改单个线路。如果使用reqno/leqno选项时,将标签(如果存在)放在最后/第一行上的齐平/左/向左。

 1\usepackage{amsmath}
 2% -------------------------------------------------------------------------------
 3\begin{multline}
 4\text{First line of a multline} \\
 5\text{Centered Middle line} \\
 6\shoveright{\text{A right Middle}} \\
 7\text{Another centered Middle} \\
 8\text{Yet another centered Middle} \\
 9\shoveleft{\text{A left Middle}} \\
10\text{Last line of the multline}
11\end{multline}

几行的单个平衡

下一个示例展示了 \multlinegap 如何影响结果。在第一种情况下,"dy" 对齐,看起来像是方程式第一行缺少了一个标签。当 \multlinegap 设置为 0 时,第二行左侧的空格不会因为标签而发生变化,而第一行则移到了左边距,这清楚地表明这是一个单独的方程式。

 1\usepackage{amsmath}
 2% -------------------------------------------------------------------------------
 3\begin{multline} \tag{2}
 4\sum_{t \in \mathbf{T}} \int_a^t \biggl\lbrace \int_a^t f(t - x)^2 \, g(y)^2 \,dx \biggr\rbrace \,dy \\
 5= \sum_{t \notin \mathbf{T}} \int_t^a \biggl\lbrace g(y)^2 \int_t^a f(x)^2 \,dx \biggr\rbrace \,dy
 6\end{multline}
 7\setlength\multlinegap{0pt}
 8\begin{multline} \tag{2}
 9\sum_{t \in \mathbf{T}} \int_a^t \biggl\lbrace \int_a^t f(t - x)^2 \, g(y)^2 \,dx \biggr\rbrace \,dy \\
10= \sum_{t \notin \mathbf{T}} \int_t^a \biggl\lbrace g(y)^2 \int_t^a f(x)^2 \,dx \biggr\rbrace \,dy
11\end{multline}

\ multlineGap效果

2.4. 单个方程式在几行与对齐方式上

当你需要对齐单个多行方程式时,split 环境可以为你提供帮助。只需在每行上使用一个 & 字符来标记对齐点即可。

1\usepackage{amsmath}
2% -------------------------------------------------------------------------------
3\begin{equation}
4\begin{split}
5(a + b)^4 &= (a + b)^2 (a + b)^2 \\
6          &= (a^2 + 2ab + b^2)(a^2 + 2ab + b^2) \\
7          &= a^4 + 4a^3b + 6a^2b^2 + 4ab^3 + b^4
8\end{split}
9\end{equation}

一个简单对齐的单一平衡

split 本身不会创建公式标签(因此不需要带星号的变体),因为它始终用作单个公式的内容。为此,您可以将其放入外部环境。

默认情况下,该标签(以及 split 之外的公式的任何部分)在 split 环境材质的总高度上垂直居中。此行为对应于 centertags 选项。当您指定 tbtags 选项时,如果标签位于右侧,则放置在 split 的最后一行;如果标签位于左侧,则放置在第一行。

1\usepackage[tbtags]{amsmath}
2% -------------------------------------------------------------------------------
3\begin{equation}
4\begin{split}
5(a - b)^3 &= (a - b) (a - b)^2 \\
6          &= (a - b)(a^2 - 2ab + b^2) \\
7          &= a^3 - 3a^2b + 3ab^2 - b^3
8\end{split}
9\end{equation}

一个简单对准的单个平衡和最后一行的标签

2.5. 方程组无对准

当您需要将两个或多个方程式放入单个显示中而不对齐方程式之间,则可以使用“聚集”环境。它还分别将每个方程式中心在显示宽度内,并在需要的情况下用单独的标签安装。从逻辑上讲,“聚集”的每一行都是一个方程。

1\usepackage{amsmath}
2% -------------------------------------------------------------------------------
3\begin{gather}
4(a + b)^2 = a^2 + 2ab + b^2 \\
5(a + b) \cdot (a - b) = a^2 - b^2
6\end{gather}

方程组无对准

您可能需要隐藏某一行的公式编号。答案是使用\notag命令,将其放在逻辑行中。gather环境根本不标记公式。

1\usepackage{amsmath}
2% -------------------------------------------------------------------------------
3\begin{gather}
4D(a,r) \equiv \{ z \in \mathbf{C} \colon |z - a| < r \} \notag \\
5\operatorname{seg} (a, r) \equiv \{ z \in \mathbf{C} \colon \Im z < \Im a, \ |z - a| < r \} \\
6C (E, \theta, r) \equiv \bigcup_{e \in E} c (e, \theta, r)
7\end{gather}

具有标签的方程组

2.6. 简单对齐的方程组

当你需要在单个显示中排版多个公式并使其垂直对齐时,align 环境可以帮你解决这个问题。最简单的情况下,你可以在每行上使用一个 & 来标记对齐点。

 1\usepackage{amsmath}
 2% -------------------------------------------------------------------------------
 3\begin{align}
 4(a - b)^3 &= (a - b) (a - b)^2 \\
 5          &= (a - b)(a^2 - 2ab + b^2) \\
 6          &= a^3 - 3a^2b + 3ab^2 - b^3
 7\end{align}
 8\begin{align}
 9x^2 + y^2 &= 1 \\
10        y &= \sqrt{1-x^2}
11\end{align}

简单对齐的方程组

2.7. 多个路线

align 环境可以定义多个对齐点。布局包含所需数量的列对,类似于带有 {rlrl...} 类似前导码的 array。假设它由 n 个这样的 rl 列对组成,则每行 & 的数量将为 2n - 1:每个列对内有一个 & 符号用于对齐,从而得到 n 个;另外 n - 1& 符号用于分隔列对。

align环境将材料均匀地散布在显示宽度上。如果有额外的空间,则在相邻的列对和两个显示边距之间平均分布。

 1\usepackage{amsmath}
 2% -------------------------------------------------------------------------------
 3This example has two column-pairs.
 4\begin{align} \text{Compare }
 5x^2 + y^2 &= 1 &                      x^3 + y^3 &= 1 \\
 6x              &= \sqrt {1-y^2}   &           x &= \sqrt[3]{1-y^3}
 7\end{align}
 8This example has three column-pairs.
 9\begin{align}
10     x &= y        &        X &= Y      &   a &= b+c \\
11    x' &= y'       &       X' &= Y'     &  a' &= b \\
12x + x' &= y + y'   &   X + X' &= Y + Y' & a'b &= c'b
13\end{align}

多个路线

flalign的布局相似,但是边缘没有空间。在下一个示例中,您可以看到由于此事实(而公式(2)仍然没有),等式(3)适合单行。

 1\usepackage{amsmath}
 2% -------------------------------------------------------------------------------
 3This example has two column-pairs.
 4\begin{flalign} \text{Compare }
 5x^2 + y^2 &= 1               &   x^3 + y^3 &= 1 \\
 6        x &= \sqrt {1-y^2}   &           x &= \sqrt[3]{1-y^3}
 7\end{flalign}
 8This example has three column-pairs.
 9\begin{flalign}
10     x &= y        &        X  &= Y        &     a &= b+c \\
11    x' &= y'       &       X'  &= Y'       &    a' &= b \\
12x + x' &= y + y'   &   X + X'  &= Y + Y'   &   a'b &= c'b
13\end{flalign}

flalign

在这两种情况下,都可以通过更改 \minalignsep 来设置列对之间的最小间距。默认值为 10pt,可以使用 \renewcommand 进行更改,因为它是一个宏命令,而不是长度参数。下一个示例演示了更改 \minalignsep 的效果。

 1\usepackage{amsmath}
 2% -------------------------------------------------------------------------------
 3This example has two column-pairs.
 4\renewcommand\minalignsep{0pt}
 5\begin{align} \text{Compare }
 6x^2 + y^2 &= 1               &   x^3 + y^3 &= 1 \\
 7        x &= \sqrt {1-y^2}   &           x &= \sqrt[3]{1-y^3}
 8\end{align}
 9This example has three column-pairs.
10\renewcommand\minalignsep{15pt}
11\begin{flalign}
12     x &= y        &        X  &= Y        &     a &= b+c \\
13    x' &= y'       &       X'  &= Y'       &    a' &= b \\
14x + x' &= y + y'   &   X + X'  &= Y + Y'   &   a'b &= c'b
15\end{flalign}

\ minalignsep效应

下一个示例演示了 align 的一个非常常见的用法。请注意,在数学材料中使用 \text 来生成普通文本。

1\usepackage{amsmath}
2% -------------------------------------------------------------------------------
3\begin{align}
4     x &= y        &&   \text{by hypothesis} \\
5    x' &= y'       &&   \text{by definition} \\
6x + x' &= y + y'   &&   \text{by Axiom 1}
7\end{align}

\文本的使用

2.8. 中断显示:\ InterText

您可能想在显示对齐的行间插入一小段文本。这可以通过 \intertext 命令完成。务必确保所有对齐属性不受文本影响,同时文本本身将排版为设置为显示宽度的普通段落。如果您直接结束显示,然后在文本后开始新的显示,对齐将不起作用。此命令必须始终紧跟 \\\\* 命令。

1\usepackage{amsmath}
2% -------------------------------------------------------------------------------
3\begin{align}
4A_1 &= N_O (\lambda ; \Omega') - \phi ( \lambda ; \Omega') \\
5A_2 &= \phi (\lambda ; \Omega') \phi (\lambda ; \Omega) \\
6\intertext{and finally}
7A_3 &= \mathcal{N} (\lambda ; \omega)
8\end{align}

\ intertext命令

“最后”这两个词超出了对齐范围,位于左边距,但所有三个等式都是对齐的。

2.9. 方程编号和标签

在乳胶中,方程式通常会自动生成,它们本质上是乳胶计数器“方程式”的印刷表示。这是由乳胶在三个步骤中完成的:设置“方程”计数器的值;格式化标签;并以正确的位置打印。

前两个步骤紧密链接,因为仅当自动打印相应的标签时,“方程”计数器值才增加。让我们看一下既有出演和未经标记的表单的展示环境。只有未星级的形式会更改“方程”计数器的值,因为它会自动标记每个逻辑方程,而星级形式则没有。

当您需要在未加星号的形式中抑制某个逻辑等式的标签设置时,可以在 \\ 之前 添加 \notag(或 \nonumber)。您也可以使用 \tag 命令在 \\ 之前 添加,将默认标签替换为您自己设计的标签。此命令的参数可以是任意排版在括号中的普通文本,作为该等式的标签。

请注意,使用 \tag 时,计数器值的递增也会被抑制。这意味着默认标签设置仅在视觉上与 \tag{\theequation} 相同;它们并不等效。加星号的形式 \tag* 会排版其参数中的文本,而无需使用括号(并且不会使用任何其他可能添加到特定文档类的内容)。

 1\usepackage{amsmath}
 2% -------------------------------------------------------------------------------
 3\begin{align}
 4x^2+y^2 &= z^2 \label{eq:A} \\
 5x^3+y^3 &= z^3 \notag \\
 6x^4+y^4 &= r^4 \tag{$*$} \\
 7x^5+y^5 &= r^5 \tag*{$*$} \\
 8x^6+y^6 &= r^6 \tag{\ref{eq:A}$'$} \\
 9A_1 &= N_0 (\lambda ; \Omega') - \phi ( \lambda ; \Omega') \\
10A_2 &= \phi (\lambda ; \Omega') \, \phi (\lambda ; \Omega) \tag*{ALSO (\theequation)} \\
11A_3 &= \mathcal{N} (\lambda ; \omega)
12\end{align}

\ tag,\ tag*,\ notag,\ label和\ ref

请注意如何使用 \label\ref 命令为方程式提供某种“相对编号”。

2.10. 从属编号序列

以下示例表明可以在一定程度上重新定义该标签,但是请注意,\equ的重新定义必须放入subequations环境中。

 1\usepackage{amsmath}
 2% -------------------------------------------------------------------------------
 3\begin{subequations} \label{eq:1}
 4\begin{align}
 5           f &= g \label{eq:1A} \\
 6          f' &= g' \label{eq:1B} \\
 7\mathcal{L}f &= \mathcal{L}g \label{eq:1C}
 8\end{align}
 9\end{subequations}
10
11\begin{subequations} \label{eq:2}
12\renewcommand\theequation{\theparentequation\roman{equation}}
13\begin{align}
14           f &= g \label{eq:2A} \\
15          f' &= g' \label{eq:2B} \\
16\mathcal{L}f &= \mathcal{L}g + K \label{eq:2C}
17\end{align}
18\end{subequations}
19Note the relationship between~\eqref{eq:1}
20and~\eqref{eq:2}: only~\ref{eq:1C} and~\ref{eq:2C} differ.

从属编号序列

subequations 环境必须出现在其影响的显示之外。它也不应该嵌套在其自身中。每次使用此环境时,“主”方程计数器都会递增。在 subequations 环境中,但位于任何单个(逻辑)方程之外的 \label 命令将生成指向父级数字的 \ref(例如,指向 2 而不是 2i)。

2.11. 重置方程计数器

通常的做法是,在章节或章节内使用类似 (1.1), (1.2), …, (2.1), (2.2), … 的标签对公式进行编号。amsmath 包提供了一种简单的方法,即使用 \numberwithin 声明来实现。

例如,要获取包含章节编号的公式标签,并自动重置每个章节的公式计数器,请在序言中添加以下声明:\numberwithin{equation}{section}

附录A.用aspose.tex api渲染乳胶方程

现在,我们将研究Aspose.TeX API允许您将乳胶方程作为独立数字的方式。

假设您需要将方程式作为栅格图像获得,以便可以在某些非TEX出版物(例如网页)中使用它。使用aspose.tex api,您可以按以下方式执行以下操作:

1string equation = @"\begin{equation} (a-b)^2 = a^2-2ab+b^2 \end{equation}
2\[ \cos2\eta = \cos^2\eta-\sin^2\eta \]";
3Aspose.TeX.Features.PngMathRendererOptions options = new Aspose.TeX.Features.PngMathRendererOptions();
4using (Stream stream = File.Open("your-file-name-and-path", FileMode.Create))
5{
6    new Aspose.TeX.Features.PngMathRenderer().Render(equation, stream, options, out System.Drawing.SizeF size);
7    // Below is the short version for rendering with SVG
8    // new Aspose.TeX.Features.SvgMathRenderer().Render(equation, stream, new Aspose.TeX.Features.SvgMathRendererOptions(), out System.Drawing.SizeF size);
9}

如您所见,API还能够将乳胶方程转换为SVG文件。这就是使用aspose.tex进行.net的一个示例。以下是Java版本的等效代码。

 1String equation = "\\begin{equation} (a-b)^2 = a^2-2ab+b^2 \\end{equation}\r\n" +
 2		"\\[ \\cos2\\eta = \\cos^2\\eta-\\sin^2\\eta \\]";
 3Size2D size = new Size2D.Float();
 4com.aspose.tex.PngMathRendererOptions options = new com.aspose.tex.PngMathRendererOptions();
 5final OutputStream stream = new FileOutputStream(Helper.getOutputFile(Path.combine(getCurrentPath(), "doc.png")));
 6try
 7{
 8    new com.aspose.tex.PngMathRenderer().render(equation, stream, options, size);
 9}
10finally {
11    stream.close();
12}

您可以在文章中找到有关使用 Aspose.TeX for .NET或[Aspose.TeX for Java]渲染乳胶数学公式的文章中使用渲染器选项的详细信息(20)。但是其中一个对我们来说很重要。使用此选项,您可以指定您需要获得所需结果的乳胶文档序言。 (以后,我们将仅介绍源代码的C#版本。)

1// The preamble for the very first example on this page
2options.Preamble = @"\usepackage[leqno]{amsmath}";

当您需要在范围较窄的区域中布置方程式时,您也可以使用此选项,默认情况下定义了textwidth。您有两个选择实现此目标的选择:

1// The preamble for the 2.7 examples
2options.Preamble = @"\usepackage[textwidth=232pt]{geometry}
3\usepackage{amsmath}";
4// or
5options.Preamble = @"\usepackage{amsmath}
6\setlength{\textwidth}{232pt}";

在aspose.tex api中,默认情况下使用以下序言,因此,除非您需要将选项传递给amsmath软件包或更改默认值\ textwidth或其他内容,否则无需在renderer’s Options中指定序言:

1\usepackage{amsmath}
2\usepackage{amsfonts}
3\usepackage{amssymb}

附录B.用Aspose latex方程渲染乳胶方程Web应用程序

还有 乳胶方程编辑器Web应用程序,它允许您编辑和查看乳胶方程。您可以在文本字段中输入方程式,然后单击 *视图 *按钮以查看结果。或者,您可以使用字段上方的控制面板来通过选择子表达类别,然后进行子表达,然后编辑参数(如果有)来构建方程。您可以在 *公式 *字段下方找到序言和其他选项。

Have any questions about Aspose.TeX?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.