我怎样才能用方括号细分案件?
我的意思是我想写:
⌈ 2_i 如果…… 等级(q,l)=|2_i + 1如果... ⌊ ....
使用方括号,而不是大括号。
答案1
您可以cases
按照 Thorsten 展示的方式修补环境,或者使用etoolbox
包和\patchcmd
。但是,最好保留原始cases
环境并为此目的定义一个新环境。这里有一种方法,与原始定义非常相似,但也使用\lbrack
而不是\lbrace
, I 调用新环境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}
虽然看起来有点复杂,但其实很简单:我采用了cases
amsmath.sty 的原始定义,改为sqcases
并替换\lbrace
为\lbrack
。我必须使用\makeatletter
和\makeatother
因为@
原始amsmath
命令中的符号。
为了完整性,以下是使用修补的方法:
\usepackage{etoolbox}
\makeatletter
\patchcmd{\env@cases}{\lbrace}{\lbrack}
\makeatother
加载后etoolbox
,相应的内部amsmath
宏将更改为使用\lbrack
而不是\lbrace
。修补内部命令有点危险,但这是一种快速的方法,甚至在 amsmath 发生变化后也可能有效,而我们的新定义可能会与cases
当时不同。至少知道这样的方法是件好事。
答案2
除了上述答案之外,我还想提出另一种可以理解的解决方案。
\begin{align}
\left[
\begin{array}{ll}
x = 1 & a > 0 \\
x = 2 & \text{otherwise}
\end{array}
\right .
\end{align}
答案3
仅需稍加修改即可。
\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}
这是原始代码数学其中 only\lbrace
已被替换为\lbrack
。
答案4
支持此类构造的简单“扩展”:
\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