我注意到有时\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(
不大于简单的(
。