我有一个简单的命令,用于编写集合推导,以便括号根据所含参数的大小自动调整大小,例如
\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}