现在我对所有垂直条使用“mid”,但我想知道正确的方法是什么。
第一种情况是绝对值的竖线。现在我刚好正确$x\leq \mid x \mid$
。但这正确吗?
第二种情况是条件期望。现在我写E[x \mid y]
,但有时如果“x”部分很复杂,它可能会相当“高”,我想知道是否有办法让垂直线“自动调整”。有吗?
答案1
正如其他人所说,可以使用不同的命令获得垂直条,并且在每种情况下都应使用正确的命令:
\mid
当它是一个关系符号时,例如集合符号或“除法”;\lvert
或者\rvert
当它是一个(左或右)分隔符时;请注意,amsmath
当文档需要数学时,无论如何都建议这样做。
只需输入|
即可,但有一些微妙之处,因此最好使用上述命令。同样,对于双杠
\parallel
当它是一个关系符号时;\lVert
或者\rVert
当它是一个分隔符时。
您可以利用mathtools
符号来达到预期目的,但需要使用一些技巧才能使酒吧做正确的事情。
\documentclass{article}
\usepackage{mathtools}
\newcommand{\expect}{\operatorname{E}\expectarg}
\DeclarePairedDelimiterX{\expectarg}[1]{[}{]}{%
\ifnum\currentgrouptype=16 \else\begingroup\fi
\activatebar#1
\ifnum\currentgrouptype=16 \else\endgroup\fi
}
\newcommand{\innermid}{\nonscript\;\delimsize\vert\nonscript\;}
\newcommand{\activatebar}{%
\begingroup\lccode`\~=`\|
\lowercase{\endgroup\let~}\innermid
\mathcode`|=\string"8000
}
\begin{document}
$\expect{X|Y}$
$\expect[\big]{X|Y}$
$\expect*{\dfrac{1}{2}X|Y}$
\end{document}
与用 声明的宏相同\DeclaredPairedDelimiter
,您可以给出一个可选参数,该参数可以是、或\expect
之一,用于手动调整分隔符的大小,或者使用来获得自动调整大小(请谨慎使用)。\big
\Big
\bigg
\Bigg
\expect*
在这里你能用于|
条件期望,因为宏会处理其关系性质。
更新
修订后的定义使用了expl3
和的新特征xparse
。这还允许指定期望的度量。
\documentclass{article}
\usepackage{mathtools}
\NewDocumentCommand{\expect}{ e{^} s o >{\SplitArgument{1}{|}}m }{%
\operatorname{E}% the expectation operator
\IfValueT{#1}{{\!}^{#1}}% the measure of the expectation
\IfBooleanTF{#2}{% *-variant
\expectarg*{\expectvar#4}%
}{% no *-variant
\IfNoValueTF{#3}{% no optional argument
\expectarg{\expectvar#4}%
}{% optional argument
\expectarg[#3]{\expectvar#4}%
}%
}%
}
\NewDocumentCommand{\expectvar}{mm}{%
#1\IfValueT{#2}{\nonscript\;\delimsize\vert\nonscript\;#2}%
}
\DeclarePairedDelimiterX{\expectarg}[1]{[}{]}{#1}
\linespread{1.1}
\begin{document}
$\expect{X}$ $\expect^P{X}$
$\expect{X|Y}$ $\expect^P{X|Y}$
$\expect[\big]{X|Y}$ $\expect^P[\big]{X|Y}$
$\expect*{\dfrac{1}{2}X|Y}$ $\expect^P*{\dfrac{1}{2}X|Y}$
\end{document}
答案2
您绝对不应该使用\mid
来表示所有竖线。事实上,我认为到处使用和来表示每个竖线\mid
一样糟糕(甚至可能更糟糕) 。|
\vert
该宏
\mid
具有特定用途,用于表示条件信息。例如,$\{\, x \mid x>5 \,\}$
表示所有大于 5 的数字的集合。x
观察竖线周围的空白量。(顺便说一下,此示例来自 TeXbook,第 174 页。)
为了表示某个数字的绝对值
z
,你可以键入|z|
。但是,键入\lvert z \rvert
效果略好,例如a \lvert b \rvert c
请注意,现在条形图的两边都没有多余的空格。
总结:\mid
一方面,\lvert
和\rvert
另一方面产生的条形的垂直高度是相同的。它的量是水平空白插入在它们周围以使它们有所不同。
如果你发现自己需要输入很多这样的宏,尤其是需要让它们的大小适应相关材料,那么强烈建议你创建单独的宏,比如说\abs{...}
和\set{...}{...}
。有关使用花括号和中间竖线的集合相关符号的更多信息,请参见帖子为什么花括号和中间的横线没有变大?
答案3
根据文档中的示例mathtools
,以下是一些易于使用的绝对值和集合构建器宏。除了 mathtools 之外,它们还使用etoolbox
和xparse
。
对于集合,只需要一个参数:语法是\set{x ; P(x)}
,产生{x|P(x)}
,其中括号和竖线会根据内容的大小进行调整,使用命令自动调整(我认为,\Set
这是 mathtools 中更自然、更容易记住的符号 ),使用命令手动调整。与 mathtools 版本的另一个不同之处在于,手动版本的大小默认为,因为我发现未调整的版本大多数时候看起来太小了。如果您更喜欢原始版本,只需评论(非常经典的)补丁即可。\set*
\set
\big
当然,由于分号是元素和定义元素的属性之间的分隔符,因此任何其他的分隔符都;
应该写成{;}
。这种情况不太可能经常发生。
该宏也适用于定义为列表的集合(无定义属性)。
以下是一个例子:
\documentclass[10pt]{report}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{mathtools,nccmath}%
\usepackage{ etoolbox, xparse}
\DeclarePairedDelimiterX{\abs}[1]\lvert\rvert{\ifblank{#1}{\,\cdot\,}{#1}}
\let\oldabs\abs
\def\abs{\futurelet\testchar\MaybeOptArgAbs}
\def\MaybeOptArgAbs{\ifx[\testchar\let\next\OptArgAbs
\else \let\next\NoOptArgAbs\fi \next}
\def\OptArgAbs[#1]#2{\oldabs[#1]{#2}}
\def\NoOptArgAbs#1{\ifblank{#1}{\oldabs{}}{\oldabs[\big]{#1}}}
\def\Abs{\oldabs*}
\DeclarePairedDelimiterX{\set}[1]\{\}{\setargs{#1}}
\NewDocumentCommand{\setargs}{>{\SplitArgument{1}{;}}m}
{\setargsaux#1}
\NewDocumentCommand{\setargsaux}{mm}
{\IfNoValueTF{#2}{#1}{\nonscript\,#1\nonscript\;\delimsize\vert\nonscript\:\allowbreak #2\nonscript\,}}
%%% Syntaxe : \set{x ; P(x)})
\let\oldset\set
\def\set{\futurelet\testchar\MaybeOptArgSet}
\def\MaybeOptArgSet{\ifx[\testchar \let\next\OptArgSet
\else \let\next\NoOptArgSet \fi \next}
\def\OptArgSet[#1]#2{\oldset[#1]{#2}}
\def\NoOptArgSet#1{\OptArgSet[\big]{#1}}
\def\Set{\oldset*}%
\begin{document}
Let $ \abs{} $ denote the \emph{absolute value} function. We have
\[\Abs{\frac{x}{y}} =\frac{\abs{x}}{\abs{y}} \]%
\[ \abs[]{z}\quad \abs{z}\quad \abs[\Big]{z}\quad \abs[\bigg]{z}\quad \abs[\Bigg]{z} \]%
Let $ \mathbf{ U} = \set{z \in \mathbf C ; \abs[]{z} = 1}$ and $ \mathbf U_3 = \Set{1,\dfrac{-1 + i\sqrt{3}}{2},\dfrac{-1-i\sqrt{3}}{2}} = \set{1,\frac{1}{2}(-1 + i\sqrt{3}),\frac{1}{2}(-1-i\sqrt{3})} = \set[]{1,\mfrac{1}{2}(-1 + i\sqrt{3}),\mfrac{1}{2}(-1-i\sqrt{3})}$.
\end{document}
答案4
只要您启用了 amsmath 包,您就可以在数学模式下尝试命令\left|
,\right|
就像使用括号和圆括号一样。