请考虑下面的代码:
\begin{align*}
function =
\begin{cases}
case1 &\mbox{if } n = 0 \\
\begin{cases}
case2 &\mbox{if } n = 1 \\
\begin{cases}
case3 &\mbox{if } n = 2 \\
case4 &\mbox{if } n = 3
\end{cases}
\end{cases}
\end{cases}
\end{align*}
这段代码的结果是这样的:
/quad
我的问题是,如何在不作弊的情况下(即不使用or )对齐这些嵌套案例(或如果您愿意的话,数组)的条件/hspace
以实现如下目标:
答案1
解决方案 1
其中一种smash
方法就是这样做,尽管间距不是那么大。
代码
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{equation*}
function =
\begin{cases}
case1 & \mbox{if } n = 0 \\
& \mbox{if } n = 1 \\
\smash{\begin{cases} case2 & \\
& \\
\raisebox{8pt}{$\smash{\begin{cases} case3 & \\
case4 & \end{cases}}$} & \end{cases}} & \mbox{if } n = 2 \\
& \mbox{if } n = 3
\end{cases}
\end{equation*}
\end{document}
输出
解决方案 2
借助\mathrlap
包mathtools
、multirow
包和一些array
s,这看起来更美观。
代码
\documentclass{article}
\usepackage{mathtools}
\usepackage{multirow}
\newcommand{\braceMeThree}{%
\multirow{3}{*}{$\left\{\begin{array}{@{}l@{}} \null \\ \null \\ \null\end{array}\right.$}
}
\newcommand{\braceMeTwo}{%
\multirow{2}{*}{$\left\{\begin{array}{@{}l@{}} \null \\ \null\end{array}\right.$}
}
\begin{document}
\begin{equation*}
function = \left\{\begin{array}{@{}llll@{}}
\mathrlap{case1} & & & \text{if } n = 0 \\
\mathrlap{\braceMeThree} & \mathrlap{case2} & & \text{if } n = 1 \\
& \mathrlap{\braceMeTwo} & case3 & \text{if } n = 2 \\
& & case4 & \text{if } n = 3 \\
\end{array}\right.
\end{equation*}
输出
答案2
以下是使用常规 s 的示例array
:
\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\begin{document}
\begin{align*}
\text{function} =
{\left\{\begin{array}{@{}l@{\quad}l@{}}
\text{case}_1 & \text{if } n = 0 \\
\left\{\begin{array}{@{}l@{}}
\text{case}_2 \\
\left\{\begin{array}{@{}l@{}}
\text{case}_3 \\
\text{case}_4
\end{array}\right.\kern-\nulldelimiterspace \\
\end{array}\right.\kern-\nulldelimiterspace
& \begin{array}{@{}l@{}}
\text{if } n = 1 \\
\text{if } n = 2 \\
\text{if } n = 3
\end{array}
\end{array}\right.}
\end{align*}
\end{document}
如果案件内容比较复杂,可能需要进行一些调整。
水平调整-\nulldelimiterspace
确保\quad
箱子和其条件之间保留原有的空间。