跟随这个答案以及宏的接口mathtools.sty's
\DeclarePairedDelimiter
,我制作了一个\setof<*|[<size>]|>#1#2
使用集合构建器符号的宏。但我无论如何都无法理解为什么第三个集合构建器与第一个集合构建器对齐,而不是与第二个集合构建器对齐。
\documentclass[12pt]{article}
\usepackage{amsmath}
\makeatletter
\def\mathcrel#1{\mathrel{}#1\mathrel{}}
\def\midrel#1{\mathcrel{\middle#1}}
\let\setbuilder|
\def\setof{%
\@ifstar
\setof@S
{\@ifnextchar[%]
\setof@B
\setof@N}}
\def\setof@S#1#2{\left\lbrace #1 \midrel\setbuilder #2 \right\rbrace}
\def\setof@B[#1]#2#3{\mathopen #1\lbrace #2 \mathcrel{#1\setbuilder} #3 \mathclose #1\rbrace}
\def\setof@N#1#2{\lbrace #1 \mathcrel\setbuilder #2\rbrace}
\makeatother
\def\CC{\mathbf C}\def\NN{\mathbf N}
\begin{document}
\begin{align*}
\ell^\infty &= \setof{(x_n) \in \CC^\NN}{\sup_{n\in\NN} |x_n| < \infty}. \\
\ell^\infty &= \setof[\bigg]{(x_n) \in \CC^\NN}{\sup_{n\in\NN} |x_n| < \infty}. \\
\ell^\infty &= \setof*{(x_n) \in \CC^\NN}{\sup_{n\in\NN} |x_n| < \infty}.
\end{align*}
\end{document}
答案1
如果你将定义改为
\def\midrel#1{\mathcrel{{}\middle#1{}}}
答案2
出什么问题了
\usepackage{mathtools}
\DeclarePairedDelimiterX\setof[2]\lbrace\rbrace{#1\,\delimsize\vert\,#2}
或类似的间距\vert