Кусочная функция в LaTeX: cases, условия и нумерация
Чтобы записать кусочно заданную функцию в LaTeX, подключите amsmath и используйте cases внутри математического режима. Сначала укажите значение, отделите условие знаком &, а следующую ветвь начните с \\. Внутри equation всё определение получает один номер формулы.
Полный пример для начала
Сохраните этот текст в main.tex и скомпилируйте с помощью pdfLaTeX. Документ класса article требует только amsmath. Отдельный пакет с названием cases здесь не нужен.
\documentclass[a4paper,11pt]{article}\usepackage{amsmath}\begin{document}\begin{equation}\label{eq:absolute} |x| = \begin{cases} x, & \text{if } x \ge 0, \\ -x, & \text{if } x < 0. \end{cases}\end{equation}See equation~\eqref{eq:absolute}.\end{document}В PDF должны появиться левая фигурная скобка, две строки со значениями и условиями и один номер для всего определения. После разрешения ссылок номер в тексте должен совпасть с номером формулы. Ноль относится к первой ветви, отрицательные числа ко второй: каждое вещественное значение учтено ровно один раз.
Схема определения: слева находится значение функции, справа условие. Граничная точка 0 относится к первой строке.
Выравнивание условий и разделение ветвей
&разделяет два столбца с выравниванием по левому краю. Отступы пробелами в исходном файле не выравнивают столбцы в PDF.\\начинает следующую ветвь. После последней строки его обычно опускают. Обычный перевод строки в исходном коде не создаёт новую строку формулы.\text{if }набирает английское слово как обычный текст. Сохраните пробел внутри скобок, чтобы отделить его от математического условия.\text{otherwise}означает «в остальных случаях».casesуже создаёт левую фигурную скобку: добавлять\left\{не нужно. Окружение должно находиться в математическом режиме, например внутри\[...\]илиequation. Многострочное определение обычно удобнее оформлять отдельной формулой.
В этой ступенчатой функции с вещественной областью определения otherwise охватывает x <= 0, включая ноль:
\[s(x)=\begin{cases} 1, & \text{if } x > 0, \\ 0, & \text{otherwise}.\end{cases}\]Математические символы в условиях должны оставаться в математическом режиме. Записанное как формула if превращается в курсивные переменные и теряет обычные пробелы. Если же всё условие записать обычным текстом, математический набор также пропадёт. У варианта dcases* другое правило для правого столбца.
Пример для статьи: функция потерь Хьюбера
Пусть r является вещественным остатком, а порог δ > 0. Функция потерь Хьюбера использует квадратичное выражение для малых остатков и выражение, линейное по модулю остатка, для больших:
\[L_{\delta}(r) =\begin{cases} \frac{1}{2}r^2, & \text{if } |r| \le \delta, \\ \delta\left(|r|-\frac{1}{2}\delta\right), & \text{if } |r| > \delta.\end{cases}\]Первая ветвь включает |r| = δ, вторая применяется только при |r| > δ. На границе оба выражения равны δ²/2, но условия относят эту точку только к первой ветви. При δ = 1 остатки r = 0, 1 и 2 дают потери 0, 0.5 и 1.5 соответственно.
Изменяя пример, выпишите область определения и проверьте все границы. Два строгих неравенства могут оставить граничную точку без значения; два нестрогих условия могут пересекаться. Успешная компиляция не проверяет математическую корректность условий.
Маленькие дроби: когда нужен dcases
Обычный cases использует \textstyle. Поэтому дроби \frac остаются небольшими даже внутри отдельной формулы. Для более крупных дробей, сумм и интегралов замените в преамбуле \usepackage{amsmath} на \usepackage{mathtools} и используйте dcases. Пакет mathtools автоматически подключает amsmath.
Поместите этот фрагмент в тело документа с подключённым mathtools, чтобы сравнить два варианта одной функции:
\[g(x)=\begin{cases} \frac{1}{1+x^2}, & x \ge 0, \\ 0, & x < 0.\end{cases}\qquadg(x)=\begin{dcases} \frac{1}{1+x^2}, & x \ge 0, \\ 0, & x < 0.\end{dcases}\]
Схематическое сравнение стилей: определение и условия одинаковы. В выключном стиле dcases дробь выше, а расстояние между строками больше. Проверяйте фактический результат в своём шаблоне.
Если увеличить нужно только одну дробь, замените \frac на \dfrac внутри cases. Это меняет отдельную дробь, тогда как dcases задаёт выключной стиль выражениям ветвей. Проверьте интервалы и доступную ширину, особенно в узких колонках.
Правый столбец dcases* является текстовым
В dcases столбец условий остаётся математическим, поэтому для слов нужен \text{...}. В dcases* правый столбец содержит обычный текст, а математические условия заключаются в $...$:
\[g(x)=\begin{dcases*} \frac{1}{1+x^2}, & if $x \ge 0$, \\ 0, & otherwise.\end{dcases*}\]Оба варианта предоставляет mathtools. При смене названия окружения измените и синтаксис правого столбца.
Нумерация определения и отдельных ветвей
| Задача | Конструкция | Пакет и вложенность |
|---|---|---|
| Без номера | cases внутри \[...\] | amsmath |
| Один номер на определение | cases внутри equation | Ссылки через \label и \eqref |
| Отдельный номер каждой ветви | numcases | Пакет cases; само является окружением отдельной формулы |
| Буквенные суффиксы в одной группе | subnumcases | Пакет cases, например (1a) и (1b) |
Обычно определению функции достаточно одного номера. Если в тексте нужны ссылки на отдельные ветви, подключите в преамбуле \usepackage{amsmath} и \usepackage{cases}, затем добавьте:
\begin{numcases}{h(x)=} x, & if $x \ge 0$ \label{eq:positive} \\ -x, & if $x < 0$ \label{eq:negative}\end{numcases}See equations~\eqref{eq:positive} and~\eqref{eq:negative}.Аргумент {h(x)=} задаёт выражение слева от скобки. Правый столбец по умолчанию текстовый, поэтому математическим условиям нужны $...$. Не помещайте numcases внутрь equation или \[...\]. Метка \label в каждой строке соответствует её номеру. Для буквенных суффиксов замените окружение на subnumcases и проверьте ссылки снова.
Подробнее см. нумерацию формул и ссылки.
Распространённые проблемы и исправления
| Симптом | Что проверить | Исправление |
|---|---|---|
| Ошибки математического режима или выравнивания | Внешнее окружение и amsmath | Восстановить пакет и окружение из полного примера |
Environment dcases undefined | Подключён только amsmath | Подключить mathtools |
| Значения сливаются с условиями | Пропущен & | Разделить столбцы одним & в каждой строке |
| Ветви оказываются на одной строке | Пропущен \\ | Добавить две обратные косые черты между ветвями |
Extra alignment tab или похожая ошибка | Слишком много & | Оставить в обычном cases два столбца |
| Слова курсивом, пробелы исчезли | Слова введены как формула | Использовать \text{...} в обычном cases |
| Две левые фигурные скобки | Вручную добавлен \left\{ | Оставить скобку от cases |
Ссылки показывают ?? | Метки, нумеруемое окружение, число проходов | Проверить \label, повторить компиляцию и прочитать журнал |
У одного симптома бывают разные причины. Начните с первой ошибки в журнале и соседних строк исходного кода, а не только с последнего сообщения.
Проверка локально и в EasyLaTeX
В TeX Live или MiKTeX выполните эти команды в каталоге с main.tex:
pdflatex -interaction=nonstopmode -halt-on-error main.texpdflatex -interaction=nonstopmode -halt-on-error main.texПроверьте main.log на ошибки, неразрешённые ссылки и Overfull \hbox. Откройте новый main.pdf и просмотрите скобку, столбец условий, размеры дробей и нумерацию. Подстановка трёх остатков при δ = 1 также помогает заметить ошибку при копировании коэффициента в примере Хьюбера.
В EasyLaTeX поместите пример в главный файл проекта и убедитесь, что выбран именно он. Для этого англоязычного примера класса article выберите pdfLaTeX. Дождитесь завершения компиляции. При проблемах откройте панель Bug и Original Log. Для поиска причины можно передать Agent соответствующий код и журнал; проверьте изменения и скомпилируйте повторно. В существующем многоязычном проекте или шаблоне журнала сохраните подходящие настройки компилятора и шаблона.
Полный минимальный документ и остальные пять фрагментов скомпилированы с помощью pdfLaTeX на TeXLive.net; журналы и PDF проверены. Они не тестировались в компиляторе продукта или в конкретном журнальном шаблоне. После добавления в рукопись проверьте совместимость пакетов и текущий PDF.
См. также: индексы, дроби, скобки и матрицы, переносы строк в формулах и ошибки компиляции.
Источники
- Руководство amsmath: математические окружения,
cases,\textи текстовый стиль. - Официальная документация mathtools:
dcasesи варианты со звёздочкой. - Документация пакета cases:
numcases,subnumcasesи синтаксис столбца условий.