由于我更喜欢在嵌套表达式中将外括号变大,所以我经常插入\bigl
and\bigr
及其更大的同类。我一直想知道是否有办法自动完成此操作。
在所有开括号和闭括号之前预防性地插入\left
和\right
并希望它能解决问题,但并非在所有情况下都能奏效,如下所示。
左侧列没有任何大小更改命令。中间列是\left
\right
每个括号/大括号/方括号的一对,最右侧列显示的是我喜欢的版本。
如第二行和第三行中间一列所示,\left
and\right
对有时会使外括号变大,代价是\Pr
and之间有一个额外的水平空格(
。如果左括号真的很大,额外的空格是可以的,但在这里我更喜欢常规间距。
\documentclass{scrartcl}
\usepackage{amsmath}
\usepackage{amsfonts}
\begin{document}
\begin{align*}
&1-(1-F(x))^n&&1-\left(1-F(x)\right)^n&&1-\bigl(1-F(x)\bigr)^n\\
&\Pr(X_{(1)}\le x)&&\Pr\left(X_{(1)}\le x\right)&&\Pr\bigl(X_{(1)}\le x\bigr)\\
&\mathbb{E}[\min\{X_1,X_2\}]&&\mathbb{E}\left[\min\left\{X_1,X_2\right\}\right]&&\mathbb{E}\bigl[\min\left\{X_1,X_2\right\}\bigr]\\
&\left(\pi-\arccos(\frac{y}{r})\right)&&(\pi-\arccos\left(\frac{y}{r}\right))&&\left(\pi-\arccos \left(\frac{y}{r}\right)\right)
\end{align*}
\end{document}
由于数学表达式可以任意复杂,因此可能没有通用的方法可以做到这一点。但我并不是在寻求一般情况的解决方案。在上述简单情况下有效的部分解决方案将大有帮助。简单的规则可能是,括号永远不会缩小到内部对的大小以下。当然,您可以立即想到像\mid
条件期望中的扩展一样,它会随着期望括号的大小而增长。
您对嵌套括号的大小有什么偏好?除了\bigl
\bigr
手动插入之外,有没有更好的方法来实现您喜欢的样式?
编辑:
一位同事向我推荐了 Herbert Voß 的《数学模式文档中,括号的大小问题通过在相关表达式周围的组中使用两个 TeX 参数来解决。这自然导致了 TeXbook 的附录 G,其中解释了\delimitershortfall
和的机制。\delimiterfactor
\delimitershortfall
指定分隔符未覆盖的最大空间(默认为 5pt),
\delimiterfactor
是可变分隔符的比率乘以 1000(默认为 901)。
我用它们来实现永远不会缩小到子公式大小以下通过将缺口设置为 0pt 并将比例设置为 1.0,可以实现上述想法。
虽然它在第一行和第三行运行良好,但在第二行和第四行中括号现在变得太大,并且仍然有引入的额外水平空间\left
。
答案1
该nath
包装\delimgrowth=1
非常接近您喜欢的风格。
\documentclass{article}
\usepackage{amssymb}
\usepackage{nath}
\delimgrowth=1
\begin{document}
\begin{equation}
1 - (1-F(x))^n \\
\Pr(X_{(1)} \le x) \\
\mathbb{E}[\min\{X_1, X_2\} ] \\
( \pi - \arccos (\frac {y}{r}) )
\end{equation}
\end{document}
阅读纳特指南了解详细信息,特别是与 不兼容的部分amsmath
。
答案2
按照以下方式使用,在两个大括号之间留出一个小的负空间:
\documentclass{scrartcl}
\usepackage{amsmath}
\begin{document}
\delimitershortfall=-1pt
\begin{align*}
\left(\pi-\arccos \left(\frac{y}{r}\right)\right)\\
\left(\pi-\arccos \left(\frac{y}{r}\right)\!\right)
\end{align*}
\end{document}
这里有一个想法,如何使用双((
and/or来实现))
。也可以使用\left((...(
and a 。只有和括号\right))...)
的数量必须相互对应\left
\right
\documentclass{scrartcl}
\usepackage{amsmath}
\delimitershortfall=-1pt
\let\Right\right
\let\Left\left
\makeatletter
\def\right#1{\Right#1\@ifnextchar){\!\right}{}}
\def\left#1{\Left#1\@ifnextchar({\!\left}{}}
\makeatother
\begin{document}
\begin{align*}
\left(\pi-\arccos \left(\frac{y}{r}\right)\right)\\
\left(\pi-\arccos \left(\frac{y}{r}\right))\\
\left((\pi-\arccos \left(\frac{y}{r}\right)))\\
\left(\left(x + \frac12\right)\arccos(\pi)\right)\\
\left((x + \frac12\right)\arccos(\pi)\right)
\end{align*}
\end{document}
答案3
您可以不使用外部包来执行此操作,如果解决方案需要在 KaTeX 中工作,这可以简化一些事情。您可以通过在括号内容周围使用不可见的下标来定义自己的“增长括号”命令:
\newcommand{\paren}[1]{\mathopen{}\left( {#1}_{{}_{}}\,\negthickspace\right)\mathclose{}}
\newcommand{\bracket}[1]{\mathopen{}\left[ {#1}_{{}_{}}\,\negthickspace\right]\mathclose{}}
在正确的地方使用时,它会给你你想要的外观(中间一列已被修改):
\begin{aligned}
&1-(1-F(x))^n&&1-\paren{1-F(x)}^n&&1-\bigl(1-F(x)\bigr)^n\\
&\Pr(X_{(1)}\le x)&&\Pr\left(X_{(1)}\le x\right)&&\Pr\bigl(X_{(1)}\le x\bigr)\\
&\mathbb{E}[\min\{X_1,X_2\}]&&\mathbb{E}\bracket{\min\left\{X_1,X_2\right\}}&&\mathbb{E}\bigl[\min\left\{X_1,X_2\right\}\bigr]\\
&\left(\pi-\arccos(\frac{y}{r})\right)&&\left(\pi-\arccos\left(\frac{y}{r}\right)\right)&&\left(\pi-\arccos \left(\frac{y}{r}\right)\right)
\end{aligned}
\[ \paren{\paren{\paren{\paren{\paren{}}}}} \]
\[ \bracket{\bracket{\bracket{\bracket{\bracket{}}}}} \]
答案4
我所做的是声明一个括号函数,该函数用于\vphantom
为\raisebox
外部定界符添加额外的高度。
解决方案并不完美:
我使用
\mathop
因为其他方法\vphantom
不起作用然后添加负空间来抵消增加的额外空间\mathop
。另外,
\raisebox
您还需要使用\( \)
进入数学模式并\displaystyle
获得正确的虚拟高度
但它对我有用,你仍然可以调整\delimtershortfall
并\delimiterfactor
满足你的喜好(如果你还调整了 中的增加\raisebox
)。你也可以更改 中的值\raisebox
来调整分隔符的增长。
\documentclass[12pt,a4paper]{article}
\usepackage{mleftright}
\global\delimitershortfall=5.5pt
\global\delimiterfactor=880
\renewcommand*{\left}{\mleft}
\renewcommand*{\right}{\mright}
\newcommand{\braced}[1]
{ \left( #1 \right)
\mskip-1.5mu \vphantom{ \mathop{
\raisebox{3pt}{ \(\left(\displaystyle #1 \right)\) } } }
}
\begin{document}
\[
\braced{ x + \braced{\braced{ y }} }
\]
\end{document}