Кусочная функция в LaTeX: cases, условия и нумерация

БлогEasyLaTeXОпубликовано

Чтобы записать кусочно заданную функцию в LaTeX, подключите amsmath и используйте cases внутри математического режима. Сначала укажите значение, отделите условие знаком &, а следующую ветвь начните с \\. Внутри equation всё определение получает один номер формулы.

Полный пример для начала

Сохраните этот текст в main.tex и скомпилируйте с помощью pdfLaTeX. Документ класса article требует только amsmath. Отдельный пакет с названием cases здесь не нужен.

LaTeX
\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, включая ноль:

LaTeX
\[s(x)=\begin{cases}  1, & \text{if } x > 0, \\  0, & \text{otherwise}.\end{cases}\]

Математические символы в условиях должны оставаться в математическом режиме. Записанное как формула if превращается в курсивные переменные и теряет обычные пробелы. Если же всё условие записать обычным текстом, математический набор также пропадёт. У варианта dcases* другое правило для правого столбца.

Пример для статьи: функция потерь Хьюбера

Пусть r является вещественным остатком, а порог δ > 0. Функция потерь Хьюбера использует квадратичное выражение для малых остатков и выражение, линейное по модулю остатка, для больших:

LaTeX
\[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, чтобы сравнить два варианта одной функции:

LaTeX
\[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* правый столбец содержит обычный текст, а математические условия заключаются в $...$:

LaTeX
\[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}, затем добавьте:

LaTeX
\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:

Shell
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.

См. также: индексы, дроби, скобки и матрицы, переносы строк в формулах и ошибки компиляции.

Источники