2. Отображение и выравнивание уравнений LaTeX
Пакет amsmath содержит ряд определений сред для ввода отображаемых математических формул. Их можно классифицировать по количеству линий материала (одна или несколько) и по количеству точек выравнивания.
В этом разделе мы будем использовать термин уравнение следующим образом: для обозначения логической отдельной части математического отображения, которая часто нумеруется для справки и также маркируется (например, своим номером в скобках). Такие метки также называются тегами.
В следующем списке представлены наиболее популярные среды отображения. Там, где это уместно, они отмечены звездочками в формах, в которых уравнения не помечены.
уравнение | уравнение* | Одна линия, одно уравнение |
многострочный | многострочный* | Одно невыровненное многострочное уравнение, один номер уравнения |
собрать | собрать* | Несколько уравнений без выравнивания |
выровнять | выровнять* | Несколько уравнений с несколькими выравниваниями |
флагин | флагин* | Несколько уравнений: горизонтально развернутая форма align |
раскол | Простое выравнивание в многострочном уравнении |
Все примеры в этой главе набраны с математическим материалом по центру и номерами уравнений (тегами) справа. Чтобы визуализировать позиционирование, мы представляем на выходе синие вертикальные линии, которые обозначают левое и правое поля, а также центральную линию. В исходном коде LaTeX мы используем комментарий % -----...
для отделения строк, которые должны быть помещены в преамбулу документа, от тех, которые должны быть помещены в тело документа.
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 \]
Если вы хотите расположить математические символы с фиксированным отступом от левого поля, а не по центру текстового столбца, доступна опция fleqn
. Вы можете указать размер отступа в преамбуле, задав значение длины резины \matindent
. Его значение по умолчанию такое же, как и отступ списка первого уровня. Если вас устраивает это значение, вы можете пропустить установку длины \matindent
.
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
(поскольку она используется по умолчанию), но она переопределяет настройки класса документа, поэтому номер уравнения сдвигается вправо, что бы ни происходило.
В стандартном LaTeX &
и \\
используются для разделения столбцов и строк в отображаемых выравниваниях. Детали их использования меняются в среде amsmath.
2.1. Сравнение со стандартным LaTeX
Некоторые среды многострочного отображения позволяют выравнивать части формулы. По сравнению со стандартными средами LaTeX eqnarray и eqnarray*, структуры, определенные в пакете amsmath, обеспечивают немного другой и более простой способ обозначения точек выравнивания. В стандартном LaTeX eqnarray*
аналогичен среде array
с {rcl}
в качестве преамбулы, что означает, что для обозначения двух точек выравнивания требуются два символа &
. В пакете amsmath эквивалентные структуры имеют только одну точку выравнивания (как если бы массив имел преамбулу {rl}), поэтому вам нужно поместить только один символ &
слева от символа (обычно это отношение), которое должно быть выровнено.
Среда eqnarray
создает дополнительное пространство в точках выравнивания в зависимости от настроек параметра array
. Структуры «amsmath» в то же время обеспечивают фиксированное расстояние. Разницу наглядно иллюстрирует следующий пример. То же уравнение набрано с использованием сред equation
, align
и eqnarray
.
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}
Обратите внимание, что пространство в среде eqnarray
оказывается слишком широким для обычных стандартов математического набора текста.
Как и в стандартном LATEX, строки в отображении amsmath
отмечаются \\
(или концом окружения). Поскольку разрыв строки в математическом отображении обычно требует глубокого понимания структуры формулы, обычно считается, что он выходит за рамки возможностей современного программного обеспечения.
2.2. Одно уравнение в одной строке
Среда equation
может создать одно уравнение. Тег генерируется автоматически и размещается крайне слева или справа в зависимости от используемой опции. Среда equation*
создает то же уравнение без тега. Стандартный LaTeX также имеет «уравнение», но не «уравнение*», поскольку последнее похоже на стандартную отображаемую математическую среду.
Примечательным фактом является то, что наличие тега не влияет на позиционирование содержимого. Тег будет сдвинут вверх или вниз, если для него недостаточно места в одной строке: на предыдущую строку, когда теги уравнений находятся слева, и на следующую строку, когда теги находятся справа.
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. Одно уравнение в несколько строк без выравнивания
Разновидностью среды «уравнение» является среда «многострочный». Он используется только для уравнений, которые не умещаются в одной строке. Для обозначения разрывов строк необходимо использовать символ \\
, поскольку они не обнаруживаются автоматически.
Первая строка multiline будет выровнена по отступу от левого поля, а последняя — по тому же отступу от правого поля. Значение длины \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}
2.4. Одно уравнение в несколько строк с выравниванием
Когда вам нужно выровнять одно многолинейное уравнение, к вашим услугам среда разделения. Просто используйте один символ &
в каждой строке, чтобы отметить точки выравнивания.
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
материала окружения. Такое поведение соответствует опции «centertags». Когда вы указываете опцию tbtags, тег размещается в последней строке разделения, если тег находится справа, и в первой строке, если тег находится слева.
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. Несколько выравниваний
Среда выравнивания может определять несколько точек выравнивания. Макет содержит столько пар столбцов, сколько необходимо, и похож на массив с преамбулой в стиле {rlrl...}
. Предполагая, что он состоит из 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
аналогичен, но на полях нет места. В следующем примере вы можете видеть, что благодаря этому уравнение (3) помещается в одну строку (а уравнение (2) по-прежнему не помещается).
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}
В обоих случаях минимальное расстояние между парами столбцов можно установить, изменив \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}
Следующий пример иллюстрирует очень распространенное использование слова «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}
The words “and finally” are outside the alignment, at the left margin, but all three equations are aligned.
2.9. Нумерация уравнений и теги
В LaTeX теги для уравнений обычно генерируются автоматически и, по сути, представляют собой печатное представление «уравнения» счетчика LaTeX. LaTeX делает это в три этапа: установка значения счетчика «уравнение»; форматирование тега; и распечатайте его в правильном положении.
Первые два шага тесно связаны между собой, поскольку значение счетчика equation
увеличивается только тогда, когда соответствующий тег автоматически печатается. Давайте посмотрим на среду отображения, которая имеет как помеченные, так и не помеченные формы. Только форма без звездочки меняет значение счетчика уравнений
, поскольку она автоматически помечает каждое логическое уравнение, а форма со звездочкой — нет.
Если вам нужно подавить установку тега для определенного логического уравнения в форме без звездочки, вы помещаете \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}
Notice how the
\label
and\ref
commands are used to provide some sort of “relative numbering” for equations.
2.10. Подчиненные последовательности нумерации
Пакет amsmath также поддерживает так называемую «поднумерацию уравнений». Среда подуравнений
создает теги вида (2a), (2b), (2c) и так далее. Эта схема нумерации основана на двух обычных счетчиках LaTeX: «parentequation» и «equation». Все помеченные уравнения в среде «подуравнений» используют эту схему.
Следующий пример показывает, что тег можно в некоторой степени переопределить, но учтите, что переопределение \theequation
должно быть помещено в среду \theequation
.
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.
The
subequations
environment must appear outside the displays that it affects. It also shouldn’t be nested within itself. The “main” equation counter is incremented with each use of this environment. A\label
command within thesubequations
environment but outside any individual (logical) equation will produce a\ref
to the parent number (e.g., to 2 rather than 2i).
2.11. Сброс счетчика уравнений
Обычной практикой является нумерация уравнений в разделах или главах с тегами вида (1.1), (1.2), …, (2.1), (2.2), … . Пакет amsmath предоставляет простой способ настроить это с помощью объявления \numberwithin
.
Например, чтобы получить теги уравнений, включающие номер раздела, с автоматическим сбросом счетчика уравнений для каждого раздела, поместите это объявление в преамбулу: \numberwithin{equation}{section}
.
Приложение A. Рендеринг уравнений LaTeX с помощью API Aspose.TeX
Теперь мы рассмотрим, как API Aspose.TeX позволяет получать уравнения LaTeX как отдельные фигуры.
Допустим, вам нужно получить уравнение в виде растрового изображения, чтобы его можно было использовать в какой-либо публикации, отличной от TeX (например, на веб-странице). Используя API Aspose.TeX, вы можете сделать это следующим образом:
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 также способен конвертировать уравнение LaTeX в файл 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}
Подробную информацию об использовании параметров средства рендеринга можно найти в статье о рендеринге математических формул LaTeX с помощью Aspose.TeX для .NET или Aspose.TeX для Java. Но один из них важен для нас здесь. Используя эту опцию, вы можете указать преамбулу документа LaTeX, которая вам понадобится для получения желаемого результата. (Далее мы представим только версию исходного кода C#.)
1// The preamble for the very first example on this page
2options.Preamble = @"\usepackage[leqno]{amsmath}";
Вы также можете использовать эту опцию, когда вам нужно получить уравнение, расположенное в области, более узкой, чем LaTeX \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}";
В API Aspose.TeX по умолчанию используется следующая преамбула, поэтому, если вам не нужно передавать параметры в пакет amsmath или изменять значение по умолчанию \textwidth
или что-то еще, нет необходимости указывать преамбулу в параметрах средства рендеринга. :
1\usepackage{amsmath}
2\usepackage{amsfonts}
3\usepackage{amssymb}
Приложение B. Рендеринг уравнений LaTeX с помощью веб-приложения Aspose LaTeX Equation
Существует также веб-приложение LaTeX Equation Editor, которое позволяет редактировать и просматривать уравнения LaTeX. Вы можете ввести уравнение в текстовое поле и нажать кнопку Просмотр, чтобы увидеть результат. Или вы можете использовать панель управления над полем для построения уравнения, выбрав категорию подвыражения, затем подвыражение, а затем отредактировав аргумент, если таковой имеется. Вы можете найти преамбулу и другие параметры под полем Формула.