考虑以下代码
\documentclass{amsbook}
\usepackage{amsmath}
\usepackage{amssymb}
\begin{document}
\[
E(X) = \delta \left[ \frac{1}{-\delta} x e^{-\delta x} \left| \right|_0^\infty \ldots \right]
\]
\end{document}
它产生了以下看起来很奇怪的结果:
反转中间的顺序\left|
并\right|
解决问题,但只是部分解决问题(请注意不同大小的最终定界符):
\[
E(X) = \delta \left[ \frac{1}{-\delta} x e^{-\delta x} \right|_0^\infty \left| \ldots \right]
\]
这是为什么? 有没有合适的方法可以做到这一点?
答案1
对于一次性公式,您不需要任何特殊的东西,只需使用\Bigl
和朋友一样即可。
多次亮相,
\documentclass{article}
\usepackage{amsmath}
\usepackage{mleftright}
\ExplSyntaxOn
\NewDocumentCommand{\brackeval}{O{}mmmm}
{% #1 = size instruction
% #2 = before the evaluation bar
% #3 = lower bound
% #4 = upper bound
% #5 = after the evaluation bar
\tonyk_brackeval:nnnnn { #1 } { #2 } { #3 } { #4 } { #5 }
}
\cs_new_protected:Nn \tonyk_brackeval:nnnnn
{
\tl_use:c { c__tonyk_brackeval_open_#1_tl } [
#2 \vphantom{#5}
\tl_use:c { c__tonyk_brackeval_middle_#1_tl } |\sb{#3}\sp{#4}
\;
#5 \vphantom{#2}
\tl_use:c { c__tonyk_brackeval_close_#1_tl } ]
}
% case of no optional argument
\tl_const:cn { c__tonyk_brackeval_open__tl } { }
\tl_const:cn { c__tonyk_brackeval_middle__tl } { }
\tl_const:cn { c__tonyk_brackeval_close__tl } { }
% case of *
\tl_const:cn { c__tonyk_brackeval_open_*_tl } { \mleft.\kern-\nulldelimiterspace\mleft }
\tl_const:cn { c__tonyk_brackeval_middle_*_tl } { \mright }
\tl_const:cn { c__tonyk_brackeval_close_*_tl } { \mright }
% other cases
\clist_map_inline:nn { big, Big, bigg, Bigg }
{
\tl_const:cx { c__tonyk_brackeval_open_#1_tl } { \exp_not:c { #1l } }
\tl_const:cx { c__tonyk_brackeval_middle_#1_tl } { \exp_not:c { #1 } }
\tl_const:cx { c__tonyk_brackeval_close_#1_tl } { \exp_not:c { #1r } }
}
\ExplSyntaxOff
\begin{document}
\begin{gather}
E(X)=\delta\brackeval{x}{a}{b}{\dots} \\
E(X)=\delta\brackeval[big]{x}{a}{b}{\dots} \\
E(X)=\delta\brackeval[Big]{-\frac{1}{\delta}xe^{-\delta x}}{0}{\infty}{\dots} \\
E(X)=\delta\brackeval[*]{-\frac{1}{\delta}xe^{-\delta x}}{0}{\infty}{\dots}
\end{gather}
\end{document}
效果类似于Davislor 的回答,但它也允许自动调整大小(尽管语法略有不同)。自动调整大小的技巧是\left.
在开头添加一个,因此对于我们可以\right
接受限制的栏,我们可以使用它。由于幻影的存在,尺寸将相同。
答案2
虽然您通常可以使用\left[
... \middle|
...\right]
或\left\lbrack
... \middle\vert
... \right\rbrack
,但这里却打破了限制。
因此,一个不错的替代方案是\DeclarePairedDelimiterX
使用\mathtools
。(请参阅手册第 3.6 节。)这允许您将表达式内部分成多个段,并将其用作\delimsize
中间分隔符。您可以使用大小参数调用它,例如[\big]
或[\bigg]
。
\documentclass{amsbook}
\usepackage{amsmath, amssymb}
\usepackage{mathtools}
\DeclarePairedDelimiterX{\expect}[4]{\lbrace}{\rbrace}{#1 \delimsize\vert_{#2}^{#3} #4}
\begin{document}
\[
E(X) = \delta \expect[\bigg]{\frac{1}{-\delta} x e^{-\delta x}}{0}{\infty}{\ldots}
\]
\end{document}
通常情况下,您可以使用带星号的宏版本来自动缩放,例如\expect*
,但如果您在此处这样做,限制就会被打破。
预计到达时间:我刚注意到我写的是\lbrace
and\rbrace
而不是\lbrack
and \rbrack
。哎呀!
答案3
我使用了\Bigl
和\Bigr
分隔符,而不是\left
和,\right
以使整个方程具有正确的大小。
\documentclass{amsbook}
\usepackage{amsmath}
\usepackage{amssymb}
\begin{document}
\[
E(X) = \delta \Bigl[ \frac{1}{-\delta} x e^{-\delta x} \Bigl|_0^\infty \cdots \Bigr]
\]
\end{document}
尺寸较大 \Biggl
,并且\Biggr
:
\documentclass{amsbook}
\usepackage{amsmath}
\usepackage{amssymb}
\begin{document}
\[
E(X) = \delta \Biggl[ \frac{1}{-\delta} x e^{-\delta x} \Biggl|_0^\infty \cdots \Biggr]
\]
\end{document}