创建一个大的“这样”符号

创建一个大的“这样”符号

我在我的 LaTeX 文档中使用以下宏:

\newcommand{\suchthat}{\, \mid \,} % nice "such that"

因此像下面这样的集合符号看起来不错:

\{x_n \suchthat n \in \mathbb{N}}

但是,当我在里面使用这样的集合定义\[...\]并且需要将括号变大时,符号\suchthat看起来就太小了。尝试编译以下 MWE 作为示例:

\documentclass{article}
\usepackage{amssymb}                % for \mathbb font
\newcommand{\suchthat}{\, \mid \,}  % nice "such that"
\begin{document}

\noindent This looks fine:
\[ S = \left\{ x_n \suchthat n \in \mathbb{N} \right\} \]

\noindent But this does not:
\[ S = \left\{ x_n \suchthat \frac{1}{n} \in \mathbb{N} \right\} \]

\end{document}

我可以在宏中包含一些内容来suchthat根据需要自动调整符号大小吗?

答案1

\middle仅当其前面有时才使用\left;我们可以使用\currentgrouptypetexdoc etex以获取更多信息)进行检查:

\documentclass{article}
\newcommand{\suchthat}{\;\ifnum\currentgrouptype=16 \middle\fi|\;}

\begin{document}
\[
a \suchthat b\qquad\left\{\frac{a}{b}\suchthat x\right\}
\]
\end{document}

在此处输入图片描述

答案2

这可以通过构造来完成\middle,该构造位于和之间\left\right调整其大小以匹配:

\documentclass{article}

\makeatletter
\newcommand\suchthat{%
 \@ifstar
  {\mathrel{}\middle|\mathrel{}}
  {\mid}%
}
\makeatother

\begin{document}
 \[ \left\{ \frac{a}{b} \suchthat* (a,b) = 1 \right\} \qquad \{ x \suchthat y \} \]
\end{document}

在此处输入图片描述

\,我还以比使用原语的直接指令更优雅的方式处理了外部空间\mathrel,它将其操作数声明为“关系”,我认为“就是这样”。

为了方便起见,我的\suchthat带有一个星号,可以调整其大小,因为\middle在 之外无效\left...\right。(我认为,固定大小是默认设置,因此它是无星号版本。)

答案3

一种方法是将参数传递给\suchthat宏,以便它可以使用来\vphantom重新调整大小。这需要您确定应该使用哪个部分来重新调整大小。

更好的方法是将整个右侧传递给\suchthat宏。

两者产生的结果相似。以下是左侧原始版本和右侧新版本的比较:

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}

\newcommand{\Oldsuchthat}{\, \mid \,}
\newcommand*{\suchthat}[1]{\left|\vphantom{#1}\right.}
\begin{document}
\begin{alignat}{2}
  &S = \left\{ x_n \Oldsuchthat n \in \mathbb{N} \right\} &\quad
  &S = \left\{ x_n \suchthat{n} n \in \mathbb{N} \right\} \\[2.0ex]
  %
  &S = \left\{ x_n \Oldsuchthat \frac{1}{n} \in \mathbb{N} \right\} &\quad
  &S = \left\{ x_n \suchthat{\frac{1}{n}} \frac{1}{n} \in \mathbb{N} \right\}
\end{alignat}
\end{document}

备用:

\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}

\newcommand{\Oldsuchthat}{\, \mid \,}
\newcommand*{\suchthat}[1]{\,\left|\, #1 \right.}
\begin{document}
\begin{alignat}{2}
&S = \left\{ x_n \Oldsuchthat n \in \mathbb{N} \right\} &\quad
%
&S = \left\{ x_n \suchthat{n \in \mathbb{N}}  \right\} \\[2.0ex]
&S = \left\{ x_n \Oldsuchthat \frac{1}{n} \in \mathbb{N} \right\} &\quad
&S = \left\{ x_n \suchthat{\frac{1}{n} \in \mathbb{N}} \right\}
\end{alignat}
\end{document}

相关内容