当排版带有多个相邻括号的表达式时,我喜欢在最外层括号上使用\bigl
and\bigr
以使其更易于阅读,尤其是连续有 3 个或更多括号时。不幸的是,这在下标/上标中不起作用:结果括号很大(相对于封闭的文本)而不是比正常情况稍大。在这种情况下可以使用\bigl
and的替代品吗\bigr
?
我使用它的最简单的例子是\bigl(f(x) + g(x)\bigr)
。特别是\left
和\right
并不是我真正想要的。
答案1
这是一个不完整的答案,因为它只考虑了字体用于下标,而不是分隔符必须应对的高度。
\documentclass{scrartcl}
\usepackage{mathtools,lmodern}
\makeatletter
\def\bBigg@#1#2{{\mathpalette{\bBigg@aux{#1}{#2}}\relax}}
\def\bBigg@aux#1#2#3%
{\@mathmeasure\z@{\nulldelimiterspace\z@}%
{#3\left#2\vcenter to#1\big@size{}\right.}%
\box\z@}
\makeatother
\begin{document}
\[
x^{\bigl(f(x) + g(x)\bigr)}
\]
\end{document}
(我希望我做对了。)
编辑
这是另一个想法,当在下标或上标中时,它也会缩小高度,这样括号就不会那么大了。不过,这是一个混乱的答案(我只是看了定义并做了一些修改)。
使用此代码
\makeatletter
\def\bBigg@#1#2{{\mathpalette{\bBigg@aux{#1}{#2}}\relax}}
\def\bBigg@aux#1#2#3%
{\@mathmeasure\z@{\nulldelimiterspace\z@}%
{#3%
\setlength\dimen@{\dimexpr#1\big@size
\ifx\scriptscriptstyle#3*26/50\fi
\ifx\scriptstyle#3*34/50\fi
\relax}
\left#2\vcenter to\dimen@{}\right.}%
\box\z@}
\makeatother
\scriptstyle
这里是与\scriptscriptstyle
的原始定义的比较\big
。
答案2
\vstretch
该包的宏类似于scalerel
,\scalebox{1}[]{}
只不过它在数学模式中工作并保留当前数学样式。因此,可以定义\bigs
、\bigrs
等来利用此功能。
我目前已将拉伸值设置为 1.15 和 1.3,但您可以根据需要进行更改。在左侧,我显示了它在、 以及\parbox
中自动运行。\textstyle
\scriptstyle
\scriptscriptstyle
在右边的 中\parbox
,我使用了更大的尺寸,以说明两件事:1)可以将 和 合并\vstretch
到\hstretch
放大的字形中;2)对于双倍高度构造,例如 周围\frac
,“大”的大小可能需要根据数学样式进行更改,因为 本身\frac
会更改其内容的数学样式。
\documentclass{article}
\usepackage{scalerel}
\def\bigs#1{\vstretch{1.15}{#1}}
\def\bigrs#1{\vstretch{1.3}{#1}}
\def\biggs#1{\vstretch{1.45}{\mkern-1mu\hstretch{1.3}{#1}\mkern-1mu}}
\def\biggrs#1{\vstretch{1.6}{\mkern-1mu\hstretch{1.5}{#1}\mkern-1mu}}
\def\Biggrs#1{\vstretch{1.75}{\mkern-1mu\hstretch{1.6}{#1}\mkern-1mu}}
\begin{document}
\parbox[b]{1in}{\parskip 1ex
$x^{\bigrs(x + \bigs(x(x+3)\bigs)\bigrs)}$\par
$\bigs(f(x) + g(x)\bigs)$ \par
$x^{\bigs(f(x) + g(x)\bigs)}$ \par
$y_{x^{\bigs(f(x) + g(x)\bigs)}}$ \par
}
\parbox[b]{1in}{\parskip 1ex
$ \biggs(\frac{\bigs(f(x) + g(x)\bigs)}{2}\biggs)$ \par
$ x^{\biggrs(\frac{\bigs(f(x) + g(x)\bigs)}{2}\biggrs)}$ \par
$y_{x^{\Biggrs(\frac{\bigs(f(x) + g(x)\bigs)}{2}\Biggrs)}}$ \par
}
\end{document}