Устранение неравенства в делах

Aug 19 2020

Контекст

Я использую casesвнутри документа R-Markdown для отображения формулы (это для контекста, поскольку я не совсем понимаю, какие инструменты Rmarkdown использует для набора формулы в конечном итоге). Но в конечном итоге это (IMHO) не имеет ничего общего с rmarkdown, а является чистой LaTeXпроблемой (кроме того, может стать сложнее добавить внешние пакеты или команды, которые не являются частью цепочки инструментов Rmarkdown)

Проблема

Я хочу выровнять неравенство в правой части casesсреды. Проблема в том, что для углового случая у меня нет нижней границы, и, следовательно, неравенства больше не выравниваются.

Я попытался заполнить пробел, \phantomно поскольку мне нужно заменить \leqзнак, интервал не выровнен (я читал здесь, что LaTeXдобавляет \thickmuskipпосле оператора неравенства, и я думаю, это именно то, чего не хватает. Однако я не могу добавить \thickmuskipв Rmarkdown) .

(NB Я знаю, что в неравенствах нет смысла;) - но дело явно не в этом)

\begin{cases}
1, & \text{if}\ \phantom{{-1.0}<} x_i < -0.2\\                % too little space
2, & \text{if}\ {-0.2} \leq x_i < -0.1\\                      % add brackets around to -0.2 to treat `-` as unary
3, & \text{if}\ {-0.1} \leq x_i < \phantom{-}0.1 \\
4, & \text{if}\ \phantom{{-}}0.1 \leq x_i < \phantom{-}0.5\\
5, & \text{if}\ \phantom{{-0.5}<1} x_i < \phantom{-}5.0       % too much space
\end{cases}

Вывод

Ответы

3 DonaldArseneau Aug 19 2020 at 08:41

Поскольку интервал между инфиксными бинарными операторами зависит от того, что их окружает, они могут потерять свой интервал, когда они появляются на краю внутреннего математического списка (напротив фигурных скобок). Вы использовали это, чтобы знаки минус оставались unaray minus (отрицательные числа). Хорошо! (Хотя в некоторых случаях это и не нужно.) Проблема связана с символами отношений, которые идут в конце фантома.

Вы можете добавить явный пробел ( \;) для компенсации или предоставить что-то для восстановления обработки двоичных отношений:

\begin{cases}
1, & \text{if}\ \phantom{{-1.0}<{}} x_i < -0.2\\
2, & \text{if}\ {-0.2} \leq x_i < -0.1\\
3, & \text{if}\ {-0.1} \leq x_i < \phantom{-}0.1 \\
4, & \text{if}\ \phantom{{-}}0.1 \leq x_i < \phantom{-}0.5\\
5, & \text{if}\ \phantom{{-0.5}<{}} x_i < \phantom{-}5.0 
\end{cases}
4 egreg Aug 19 2020 at 09:05

Вы можете использовать array:

\documentclass{article}
\usepackage{amsmath,array}

\begin{document}

\begin{equation*}
\left\{
\renewcommand{\arraystretch}{1.2} % like cases does
\setlength{\arraycolsep}{0pt} % we don't want padding
\begin{array}{
  l           % value
  @{\quad}    % like cases does
  >{$}l<{ $}  % text column with trailing normal space
  r           % lower bound
  >{{}}c<{{}} % relation
  c           % variable
  >{{}}c<{{}} % relation
  r           % upper bound
}
1, & if &      &     & x_i & < &  0.2 \\
2, & if & -0.2 & \le & x_i & < & -0.1 \\
3, & if & -0.1 & \le & x_i & < &  0.1 \\
4, & if &  0.1 & \le & x_i & < &  0.5 \\
5, & if &  0.5 & \le & x_i
\end{array}
\right.
\end{equation*}

\end{document}

Вместо \left\{\renewcommand{\arraystretch}{1.2}и \right.вы можете использовать \begin{cases}и \end{cases}(за счет небольшого сдвига влево всего дисплея.

3 Bernard Aug 19 2020 at 09:09

У вас также есть более простая возможность с alignedatвложенными случаями. Я не уверен, что выравнивать числа в конце строк, помимо выравнивания <знаков, - хорошая идея . Поэтому я добавил код варианта, используя empheqпакет, без этого окончательного выравнивания. Он добавляет возможность пронумеровать или перенумеровать каждую строку, что может быть полезно в некоторых ситуациях:

\documentclass[a4paper,12pt]{article}

\usepackage{array}
\usepackage{empheq}

\begin{document}

 \[ \begin{cases}
\begin{alignedat}{3} &1, &\quad & \text{if} & x_i &< -0.2\\ &2, & &\text{if} & \quad -0.2 \leq x_i &< -0.1\\ &3, & &\text{if} &-0.1 \leq x_i & < \phantom{-}0.1 \\ &4, & &\text{if} & \phantom{{-}}0.1 \leq x_i &< \phantom{-}0.5\\ &5, & &\text{if} & x_i &< \phantom{-}5.0 % too much space \end{alignedat}
\end{cases} \]
\vspace{1cm}

\begin{subequations}
 \begin{empheq}[left=\empheqlbrace]{alignat=3}
&1, &\quad & \text{if} & x_i &< -0.2\\
&2, & &\text{if} & \quad -0.2 \leq x_i &< -0.1\\
&3, & &\text{if} &-0.1 \leq x_i & < 0.1 \\
&4, & &\text{if} & \phantom{{-}}0.1 \leq x_i &< 0.5\\
&5, & &\text{if} & x_i &< 5.0 % too much space
\end{empheq}
\end{subequations}

\end{document} 

2 F.Pantigny Aug 19 2020 at 12:40

Если вы не хотите нумеровать уравнения, я бы использовал, arrayкак предложено в других ответах. Тем не менее, если вы хотите нумеровать уравнения, можно использовать {DispWithArrow}в witharrows:

\documentclass{article}
\usepackage{witharrows}
\usepackage{amsmath}

\begin{document}

\begin{DispWithArrows}<f(x_i)=>[format=lrrcccr]
1, & \quad \text{if } &        &         & x_i & {}<{} &  0.2 \\
2, &       \text{if } & {-0.2} & {}\le{} & x_i & {}<{} & {-0.1} \\
3, &       \text{if } & {-0.1} & {}\le{} & x_i & {}<{} &  0.1 \\
4, &       \text{if } &  0.1   & {}\le{} & x_i & {}<{} &  0.5 \\
5, &       \text{if } &  0.5   & {}\le{} & x_i
\end{DispWithArrows}

\end{document}

1 thothal Aug 19 2020 at 08:25

Хорошо, видимо, я неправильно понял, \thickmuskipчто это длина, а не команда. \;следует добавить это:

\begin{cases}
1, & \text{if}\ \phantom{{-1.0}<}\; x_i < -0.2\\
2, & \text{if}\ {-0.2} \leq x_i < -0.1\\
3, & \text{if}\ {-0.1} \leq x_i < \phantom{-}0.1 \\
4, & \text{if}\ \phantom{{-}}0.1 \leq x_i < \phantom{-}0.5\\
5, & \text{if}\ \phantom{{-0.5}<}\; x_i < \phantom{-}5.0 
\end{cases}