Allinea le disuguaglianze nei casi

Aug 19 2020

Contesto

Sto usando casesall'interno di un documento R-Markdown per visualizzare una formula (questo per il contesto in quanto non sono del tutto consapevole di quali strumenti Rmarkdown utilizza per comporre la formula alla fine). Ma alla fine non ha (IMHO) nulla a che fare con rmarkdown ma un puro LaTeXproblema (inoltre potrebbe diventare più difficile aggiungere pacchetti o comandi esterni che non fanno parte della catena di strumenti Rmarkdown)

Problema

Voglio allineare le disuguaglianze sul lato destro casesdell'ambiente. Il problema è che per il caso d'angolo non ho un limite inferiore e quindi le disuguaglianze non sono più allineate.

Ho provato a colmare il vuoto con \phantomma dato che devo sostituire il \leqsegno, la spaziatura non è allineata (ho letto qui che LaTeXaggiunge un \thickmuskipdopo un operatore di disuguaglianza e immagino che questo sia esattamente ciò che manca. Tuttavia, non posso aggiungere \thickmuskipin Rmarkdown) .

(NB So che le indagini non hanno senso;) - ma chiaramente non è questo il punto)

\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}

Produzione

Risposte

3 DonaldArseneau Aug 19 2020 at 08:41

Poiché la spaziatura intorno agli operatori binari infisso dipende da ciò che li circonda, possono perdere la loro spaziatura quando compaiono al bordo di un elenco matematico interno (contro le parentesi graffe). Hai fatto uso di questo per garantire che i segni meno rimangano meno unaray (numeri negativi). Buona! (Anche se in alcuni casi non è necessario.) Il problema si presenta con i simboli di relazione che vengono alla fine del fantasma.

Puoi aggiungere spazio esplicito ( \;) per compensare, oppure puoi fornire qualcosa per ripristinare il trattamento della relazione binaria:

\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

Puoi usare 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}

Invece di \left\{\renewcommand{\arraystretch}{1.2}e \right.potresti usare \begin{cases}e \end{cases}(a scapito di un leggero spostamento a sinistra dell'intero display.

3 Bernard Aug 19 2020 at 09:09

Hai anche una possibilità più semplice con alignedatcasi annidati. Non sono sicuro che sia una buona idea allineare i numeri alla fine delle righe, oltre ad allineare i <segni. Quindi ho aggiunto un codice variante, utilizzando il empheqpacchetto, senza questo allineamento finale. Aggiunge la possibilità di numerare o subnumerare ogni riga, che potrebbe essere utile in alcune situazioni:

\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

Se non vuoi numerare le equazioni, userò un arraycome suggerito in altre risposte. Tuttavia, se si desidera numerare le equazioni, è possibile utilizzare {DispWithArrow}di 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

Ok, a quanto pare ho frainteso \thickmuskipquale sia una lunghezza, piuttosto che un comando. \;dovrebbe aggiungere questo:

\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}