定义一个支持多列对齐的花式 cases 环境

现有的 cases 环境,只支持:

  • 左侧的花括号
  • 一个对齐符号 &

如果在 cases 环境里需要多个对齐符号 &,或者希望在它左右有不同风格的括号,就要动一番脑筋了。

定义

以下代码借用了 amsmathmathtools 的内部代码,可谓「站在巨人肩膀上」。

不过,也因为借用了内部代码,随着这两个宏包的更新,下列代码可能失效。然而,这两个宏包几乎是 LaTeX 数学公式输出的「基石」,不会经常改动,因此下列代码也多少有些意义。

但无论如何,还是建议在看懂代码的情况下使用;如果看不懂,请慎用,因为我可能不会再维护这段代码(万一以后出问题了的话)。

template
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
\usepackage{amsmath}
\usepackage{mathtools}
\MHInternalSyntaxOn
\def\MT_start_cases_ams:n #1{%
\RIfM@\else
\nonmatherr@{\begin{\@currenvir}}
\fi
\MH_group_align_safe_begin:
\left#1
\alignedat@a
}
\def\MH_end_cases_ams:{%
\endaligned
\MH_group_align_safe_end:
}
\newcommand*\defcases[3]{%
\newenvironment{#1}
{\MT_start_cases_ams:n {#2}}
{\MH_end_cases_ams:\right#3}
}
\MHInternalSyntaxOff

这里定义了一个命令 \defcases,它接受 3 个参数。

  1. 新定义的环境的名字
  2. 左边的定界符(可自动伸缩)
  3. 右边的定界符(同上)

定义出来的环境,接受 1 个参数,用于指定环境中对齐符号 & 的最大数量。

使用

代码:

demo.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
\documentclass{article}
\usepackage{amsmath}
\usepackage{mathtools}
\MHInternalSyntaxOn
\def\MT_start_cases_ams:n #1{%
\RIfM@\else
\nonmatherr@{\begin{\@currenvir}}
\fi
\MH_group_align_safe_begin:
\left#1
\alignedat@a
}
\def\MH_end_cases_ams:{%
\endaligned
\MH_group_align_safe_end:
}
\newcommand*\defcases[3]{%
\newenvironment{#1}
{\MT_start_cases_ams:n {#2}}
{\MH_end_cases_ams:\right#3}
}
\MHInternalSyntaxOff
\defcases{mylcases}{\lbrace}{.}
\defcases{myrcases}{.}{\rbrace}
\defcases{mybcases}{\lbrace}{\rbrace}
\defcases{mylrcases}{[}{\rbrace}
\begin{document}
\[
\begin{mylcases}{2}
a &{} = b &{} = c \\
a &{} = b &{} = c \\
a &{} = b &{} = c
\end{mylcases}\qquad
\begin{myrcases}{2}
a &{} = b &{} = c \\
a &{} = b &{} = c \\
a &{} = b &{} = c
\end{myrcases}\qquad
\begin{mybcases}{2}
a &{} = b &{} = c \\
a &{} = b &{} = c \\
a &{} = b &{} = c
\end{mybcases}\qquad
\begin{mylrcases}{2}
a &{} = b &{} = c \\
a &{} = b &{} = c \\
a &{} = b &{} = c
\end{mylrcases}
\]
\end{document}


您的鼓励是我写作最大的动力

俗话说,投资效率是最好的投资。 如果您感觉我的文章质量不错,读后收获很大,预计能为您提高 10% 的工作效率,不妨小额捐助我一下,让我有动力继续写出更多好文章。


撰写评论

写了这么多年博客,收到的优秀评论少之又少。在这个属于 SNS 的时代也并不缺少向作者反馈的渠道。因此,如果你希望撰写评论,请发邮件至我的邮箱并注明文章标题,我会挑选对读者有价值的评论附加到文章末尾。