我在我的 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
;我们可以使用\currentgrouptype
(texdoc 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}