2. Відображення та вирівнювання рівнянь LaTeX | LaTeX
Пакет amsmath містить ряд визначень середовищ для введення відображених математичних формул. Їх можна класифікувати за кількістю матеріальних ліній (одиночних або кількох) і за кількістю точок вирівнювання.
У цьому розділі ми будемо використовувати термін рівняння таким чином: для позначення логічної окремої частини математичного дисплея, яка часто нумерується для довідки, а також позначається (наприклад, своїм номером у дужки). Такі мітки також називають тегами.
Наступний список містить найпопулярніші середовища відображення. Там, де це доречно, вони мають форми із зірочками, у яких немає тегів рівнянь.
рівняння | рівняння* | Один рядок, одне рівняння |
багаторядковий | багаторядковий* | Одне невирівняне багаторядкове рівняння, один номер рівняння |
збирати | збирати* | Кілька рівнянь без вирівнювання |
вирівняти | вирівняти* | Кілька рівнянь з кількома вирівнюваннями |
flagign | flagign* | Кілька рівнянь: горизонтально розгорнута форма 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
. Ви можете вказати розмір відступу в преамбулі, встановивши значення довжини \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
(оскільки він є типовим), але він перекриває параметри класу документа, тому номер рівняння примусово зміщується праворуч, що б не трапилося.
У стандартному LaTeX &
і \\
використовуються для поділу стовпців і рядків у вирівнюваннях, що відображаються. Деталі їх використання змінюються в середовищах amsmath
.
2.1. Порівняння зі стандартним LaTeX
Деякі з багаторядкових середовищ відображення дозволяють вирівнювати частини формули. Порівняно зі стандартними середовищами LaTeX eqnarray
і eqnarray*
, структури, визначені в пакеті amsmath
, забезпечують дещо інший і простіший спосіб позначення точок вирівнювання. У стандартному LaTeX eqnarray*
подібний до середовища array
з {rcl}
як преамбулою, що означає, що два символи &
потрібні для позначення двох точок вирівнювання. У пакеті amsmath
еквівалентні структури мають лише одну точку вирівнювання (наче array
має преамбулу {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*
створює те саме рівняння без тегу. Стандартний 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. Одне рівняння в кількох рядках без вирівнювання
Різновидом середовища equation
є середовище 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}
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. Групи рівнянь без вирівнювання
Якщо вам потрібно помістити два або більше рівнянь в один дисплей без вирівнювання рівнянь, ви можете скористатися середовищем gather
. Він також окремо центрує кожне рівняння в межах ширини дисплея та за потреби додає окремий тег. Кожен рядок seather
є логічно єдиним рівнянням.
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...}
. Якщо припустити, що він складається з 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}
Слова “і нарешті” розташовані за межами вирівнювання, на лівому полі, але всі три рівняння вирівняно.
2.9. Нумерація рівнянь і теги
У LaTeX теги для рівнянь зазвичай генеруються автоматично, і вони, по суті, є друкованим представленням «рівняння» лічильника LaTeX. Це робиться LaTeX у три кроки: встановлення значення лічильника equation
; форматування тегу; і роздрукувати його в правильному положенні.
Перші два кроки тісно пов’язані, оскільки значення лічильника equation
збільшується лише тоді, коли відповідний тег друкується автоматично. Давайте подивимося на середовище відображення, яке має форми як із зірочкою, так і без неї. Лише форма без зірочки змінює значення лічильника equation
, оскільки він автоматично позначає кожне логічне рівняння, тоді як форма із зірочкою цього не робить.
Якщо вам потрібно приховати налаштування тегу для певного логічного рівняння у формі без зірочки, ви ставите \notag
(або \nonumber
) перед \\
. Ви також можете замінити стандартні теги на власний дизайн, використовуючи команду \tag
перед \\
. Аргументом цієї команди може бути довільний звичайний текст, набраний у круглих дужках як тег для цього рівняння.
Зауважте, що збільшення значення лічильника також пригнічується, коли використовується \tag
. Це означає, що налаштування тегу за замовчуванням лише візуально збігаються з \tag{\theequation}
; вони не еквівалентні. Форма із зірочкою, \тег*
, набирає текст у своєму аргументі без дужок (і без будь-яких інших речей, які інакше можна було б додати до певного класу документа).
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}
Зверніть увагу на те, як команди
\label
і\ref
використовуються для забезпечення свого роду «відносної нумерації» для рівнянь.
2.10. Підрядні нумераційні послідовності
Пакет amsmath також підтримує так звану «піднумерацію рівнянь». Середовище subequations
створює теги у формі (2a), (2b), (2c) тощо. Ця схема нумерації базується на двох звичайних лічильниках LaTeX: parentequation
і equation
. Усі рівняння з тегами в середовищі підрівнянь
використовують цю схему.
Наступний приклад показує, що тег можна певною мірою перевизначити, але зауважте, що перевизначення для \theequation
має бути розміщено в середовищі 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
має з’являтися поза дисплеями, на які воно впливає. Він також не повинен бути вкладений у себе. Лічильник «основного» рівняння збільшується з кожним використанням цього середовища. Команда\label
у середовищіsubequations
, але поза будь-яким окремим (логічним) рівнянням створить\ref
для батьківського числа (наприклад, до 2, а не до 2i).
2.11. Скидання лічильника рівнянь
Зазвичай рівняння нумеруються в розділах або главах тегами у вигляді (1.1), (1.2), …, (2.1), (2.2), … . Пакет amsmath
забезпечує простий спосіб налаштувати це за допомогою декларації \numberwithin
.
Наприклад, щоб отримати теги рівнянь, що містять номер розділу, з автоматичним скиданням лічильника рівнянь для кожного розділу, розмістіть це оголошення у преамбулі: \numberwithin{equation}{section}
.
Додаток A. Відтворення рівнянь LaTeX за допомогою Aspose.TeX API
Тепер ми розглянемо, як Aspose.TeX API дозволяє отримувати рівняння LaTeX як окремі фігури.
Скажімо, вам потрібно отримати рівняння як растрове зображення, щоб ви могли використовувати його в якійсь публікації, яка не є 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 також здатний перетворювати рівняння 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. Ви можете ввести своє рівняння в текстове поле та натиснути кнопку Переглянути, щоб побачити результат. Або ви можете скористатися панеллю керування над полем, щоб побудувати рівняння, вибравши категорію підвиразу, потім підвираз, а потім відредагувавши аргумент, якщо такий є. Ви можете знайти преамбулу та інші параметри під полем Формула.