如何自动调整集合理解中的垂直条的大小?

如何自动调整集合理解中的垂直条的大小?

我有一个简单的命令,用于编写集合推导,以便括号根据所含参数的大小自动调整大小,例如

\usepackage{amsmath}
\newcommand{\set}[1]{\left\lbrace #1\right\rbrace}

\begin{equation*}
\set{x \in X \mid x > \frac{1}{2}}  
\end{equation*}
% Produces something like: { x : X | x > 1/2 }

但是,\mid垂直线不会像括号那样调整大小{ .. }。我怎样才能让其\mid也调整大小?

答案1

\middle|可以\mid使用

\[ \left\{ x \in X \middle| x > \frac{1}{2}\right\} \]

或有更好的间距

\[ \left\{ x \in X \,\middle|\, x > \frac{1}{2}\right\} \]

(我认为这需要有点现代的 TeX 分布。)

答案2

我认为最好的想法是使用 brackett 包,它为这些类型的构造提供标记,其中括号和“管道”会在必要时扩展。

答案3

这是一个很好的解决方案mathtools,它用途非常广泛,并且能产生正确的间距(括号内的空间很细,中间符号周围的空间很粗):

\usepackage{mathtools}    
\DeclarePairedDelimiterX\setc[2]{\{}{\}}{\,#1 \;\delimsize\vert\; #2\,}

现在如果您使用带星号的宏版本您将获得所需的结果:

\setc*{x \in X}{x > \frac{1}{2}}

在此处输入图片描述

如果你认为括号太大,你甚至可以使用语法调整为不同的大小

\setc[\Big]{x \in X}{x > \frac{1}{2}}

在此处输入图片描述

答案4

这对我来说似乎有用,可能需要调整栏周围的水平间距。

\documentclass{article}

\usepackage{amssymb}

\makeatletter
\newcommand{\my@set}[1]{\left\lbrace #1\right\rbrace}
\newcommand{\my@cset}[2]{%
 \left\lbrace #1\vphantom{#2}\right\vert%
 \left.\vphantom{#1}#2\right\rbrace}

\def\my@first#1|#2\relax{#1}
\def\my@second#1|#2\relax{#2}
\newcommand{\set}[1]{%
\edef\my@given{#1}
\edef\my@start{\my@first #1|\relax}%
\ifx\my@start\my@given
\my@set{#1}
\else
\edef\my@last{\my@second #1\relax}%
\my@cset{\my@start}{\my@last}%
\fi}

\begin{document}


\[
  \set{x \in X \int_0^1 | y \in Y} \; \set{x \in X \int_0^1 y \in Y}
\]

\[
\set{x | y} \set{a b}
\]

\end{document}

相关内容