现有的 cases 环境,只支持:
- 左侧的花括号
- 一个对齐符号
&
&,或者希望在它左右有不同风格的括号,就要动一番脑筋了。
定义
以下代码借用了amsmath 和 mathtools 的内部代码,可谓「站在巨人肩膀上」。
不过,也因为借用了内部代码,随着这两个宏包的更新,下列代码可能失效。然而,这两个宏包几乎是 LaTeX 数学公式输出的「基石」,不会经常改动,因此下列代码也多少有些意义。
但无论如何,还是建议在看懂代码的情况下使用;如果看不懂,请慎用,因为我可能不会再维护这段代码(万一以后出问题了的话)。
\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 个参数。
- 新定义的环境的名字
- 左边的定界符(可自动伸缩)
- 右边的定界符(同上)
& 的最大数量。
使用
代码:\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}
选自:http://liamhuang.me/2016/04/08/an-environment-template-for-multiple-alignment-cases-with-specified-braces/#more


发表评论 取消回复