\big 分隔符不能与 scrartcl 一起使用?

\big 分隔符不能与 scrartcl 一起使用?

我注意到有时\big分隔符会停止工作。一个例子是scrartcl文档类。

\documentclass{scrartcl}

\begin{document}
\begin{equation}
    (\frac{1}{2})
    \bigl(\frac{1}{2}\bigr)
\end{equation}
\end{document}

我获得以下结果(即\bigl/\bigr宏不起作用):

大不工作

(不过,更大的分隔符宏(例如\Big\bigg)似乎可以起作用。)

另一个示例是同时加载breqn和时mathtools

\documentclass{article}

\usepackage{mathtools}
\usepackage{breqn}

\begin{document}
\begin{equation}
    (\frac{1}{2})
    \bigl(\frac{1}{2}\bigr)
\end{equation}
\end{document}

这是一个错误吗?有什么可能的解决方法吗?

答案1

LaTeX 内核中定义的方式\big不会在主字体大小增加时使其缩放:以下是代码fontmath.ltx

524 \def\big#1{{\hbox{$\left#1\vbox to8.5\p@{}\right.\n@space$}}}
525 \def\Big#1{{\hbox{$\left#1\vbox to11.5\p@{}\right.\n@space$}}}
526 \def\bigg#1{{\hbox{$\left#1\vbox to14.5\p@{}\right.\n@space$}}}
527 \def\Bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}}

然后\bigl(就是\mathopen{\big{(}}。您可以看到分隔符的大小与主字体大小无关,但它是硬连接的。因此,当使用 11pt 或 12pt 大小时,\big最终与分隔符的正常大小没有区别。

amsmath包通过定义来避免这种情况

552 \renewcommand{\big}{\bBigg@\@ne}
553 \renewcommand{\Big}{\bBigg@{1.5}}
554 \renewcommand{\bigg}{\bBigg@\tw@}
555 \renewcommand{\Bigg}{\bBigg@{2.5}}
556 \def\bBigg@#1#2{%
557   {\@mathmeasure\z@{\nulldelimiterspace\z@}%
558      {\left#2\vcenter to#1\big@size{}\right.}%
559    \box\z@}}
560 \addto@hook\every@math@size{%
561   \global\big@size 1.2\ht\Mathstrutbox@
562   \global\advance\big@size 1.2\dp\Mathstrutbox@ }
563 \newdimen\big@size

并适当定义\Mathstrutbox@。 包本质上做了相同的事情exscale。 对此没有做任何事情mathtools,因此相关包是amsmath

我认为该包中存在一个错误breqn,因为\big@size没有设置为与amsmath此示例输入相同的值:

\documentclass{article}

\usepackage{amsmath}
%\usepackage{breqn}

\begin{document}
\begin{equation}
\makeatletter\showthe\big@size\makeatother
\end{equation}
\end{document}

我明白了

> 11.99995pt.
l.8 \makeatletter\showthe\big@size
                                  \makeatother

取消注释以下调用breqn

> 7.20004pt.
l.8 \makeatletter\showthe\big@size
                                  \makeatother

而这种差异解释了为什么\bigl(不大于简单的(

相关内容