Cases with square brackets
You could patch the cases
environment, the way Thorsten showed or using the etoolbox
package and \patchcmd
. However, it could be better to preserve the original cases
environment and to define a new one for that purpose. Here is a way, very similar to the original definition, but also using \lbrack
instead of \lbrace
, I calles the new environment sqcases
:
\documentclass{article}
\usepackage{amsmath}
\DeclareMathOperator{\rank}{rank}
\makeatletter
\newenvironment{sqcases}{%
\matrix@check\sqcases\env@sqcases
}{%
\endarray\right.%
}
\def\env@sqcases{%
\let\@ifnextchar\new@ifnextchar
\left\lbrack
\def\arraystretch{1.2}%
\array{@{}l@{\quad}l@{}}%
}
\makeatother
\begin{document}
\[
\rank(q, l) = \begin{sqcases}
2_i & \text{if \ldots} \\
2_i+1 & \text{if \ldots}
\end{sqcases}
\]
\end{document}
Though it looks a bit complicated, it's very straightforward: I took the original cases
definition of amsmath.sty, wrote sqcases
instead and replaced \lbrace
by \lbrack
. I had to use \makeatletter
and \makeatother
because of the @
symbol in the original amsmath
commands.
For completeness, heres the way using patching:
\usepackage{etoolbox}
\makeatletter
\patchcmd{\env@cases}{\lbrace}{\lbrack}
\makeatother
After loading etoolbox
, the respective internal amsmath
macro is changed to use \lbrack
instead of \lbrace
. It's a bit hazardous to patch internal commands, but it's a quick way and may even work after changes in amsmath while our new definition could become different to cases
then. At least it's good to know such methods.
It only requires a slight modification.
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\def\env@cases{%
\let\@ifnextchar\new@ifnextchar
\left\lbrack
\def\arraystretch{1.2}%
\array{@{}l@{\quad}l@{}}%
}
\makeatother
\begin{document}
\[
\begin{cases}
0 \\ 1 \\ 2
\end{cases}
\]
\end{document}
This is the original code from amsmath where only \lbrace
has been replaced by \lbrack
.
A Plain "extension" to support such constructs:
\catcode`@=11
\def\caseswithdelim#1#2{\left#1\,\vcenter{\normalbaselines\m@th
\ialign{\strut$##\hfil$&\quad##\hfil\crcr#2\crcr}}\right.}% you might like it without the \strut
\catcode`@=12
%
\def\bcases#1{\caseswithdelim[{#1}}
\def\vcases#1{\caseswithdelim|{#1}}
%
$$\displaylines{
rank (q,l) = \cases{2_i& if $\ldots$\cr 2_i + 1&if $\ldots$\cr\ldots} \cr
rank (q,l) = \bcases{2_i& if $\ldots$\cr 2_i + 1&if $\ldots$\cr\ldots} \cr
rank (q,l) = \vcases{2_i& if $\ldots$\cr 2_i + 1&if $\ldots$\cr\ldots}
}$$\bye