二项式系数分隔符的奇怪行为

二项式系数分隔符的奇怪行为

这个问题导致了一个新的方案的出现:
fixcmex

在写下我的组合学练习时,我发现二项式系数的分隔符没有按照amsmath文档中所示显示。

通过后续的反复试验,我能够将文档的体积缩减为这个更简单且完全可编译的 MWE:

\documentclass[11pt]{article}
%
\usepackage{amsmath}
%
\makeatletter
%
\usepackage{lmodern}
\usepackage{lipsum}
%
\makeatother
%
\begin{document}
%
\lipsum[1]
\begin{equation}
2^k-\binom{k}{1}2^{k-1}+\binom{k}{2}2^{k-2}
\end{equation}
\lipsum[1]
%
\end{document}

这给出了(使用 TeXworks 0.44 在 MikTeX 2.9.4521 上更新 09/10/13)这个意想不到的结果:

在此处输入图片描述

虽然amsmath文档显示,使用 MWE 内部加载的包,结果实际上是这样的:

在此处输入图片描述

从这里我们可以看到,第一个例子中的分隔符在垂直方向上有点拉伸,因为它们超出了 binom.coeff 中的参数。

更奇怪的是,当我注释该行时,\usepackage{lmodern}示例中分隔符形状的结果与amsmath文档完全相同:

\documentclass[11pt]{article}
%
\usepackage{amsmath}
%
\makeatletter
%
%\usepackage{lmodern}
\usepackage{lipsum}
%
\makeatother
%
\begin{document}
%
\lipsum[1]
\begin{equation}
2^k-\binom{k}{1}2^{k-1}+\binom{k}{2}2^{k-2}
\end{equation}
\lipsum[1]
%
\end{document}

输出:

在此处输入图片描述

从这里我推断问题出在 中lmodern,但我想继续使用这个包并修复这个数学模式的奇怪“问题”。我是否错过了一些线索,或者这实际上是更新过程错误感染了amsmath的分隔符控制?

答案1

lmodern这是如何设置数学扩展字体的问题,通过说

\DeclareFontShape{OMX}{lmex}{m}{n}{%
   <->sfixed*lmex10%
   }{}

完全我认为这是错误的,因为它破坏了amsmath解决问题的设置。不幸的是,字体不提供不同于 10pt 的光学尺寸,因此您有一些策略

1. 使用fixcmex

\documentclass[11pt]{article}

\usepackage{amsmath}
\usepackage{lmodern}
\usepackage{fixcmex}

\usepackage{lipsum}

\begin{document}

\lipsum[1]
\begin{equation}
2^k-\binom{k}{1}2^{k-1}+\binom{k}{2}2^{k-2}
\end{equation}
\lipsum[1]

\end{document}

免责声明。我编写了这个fixcmex软件包来解决当前的问题。

2. 让我们amsmath做主要工作

\documentclass[11pt]{article}

\usepackage{amsmath}
\usepackage{lmodern}

\DeclareSymbolFont{largesymbols}{OMX}{cmex}{m}{n} % use cmex rather than lmex

\usepackage{lipsum}

\begin{document}

\lipsum[1]
\begin{equation}
2^k-\binom{k}{1}2^{k-1}+\binom{k}{2}2^{k-2}
\end{equation}
\lipsum[1]

\end{document}

3. 加载exscale或更好的是,由它定义的字体

\documentclass[11pt]{article}

\usepackage{amsmath}
\usepackage{lmodern}

\DeclareFontShape{OMX}{cmex}{m}{n}{%
      <-7.5> cmex7
      <7.5-8.5> cmex8
      <8.5-9.5> cmex9
      <9.5-> cmex10
       }{}
\DeclareSymbolFont{largesymbols}{OMX}{cmex}{m}{n} % use cmex rather than lmex

\usepackage{lipsum}

\begin{document}

\lipsum[1]
\begin{equation}
2^k-\binom{k}{1}2^{k-1}+\binom{k}{2}2^{k-2}
\end{equation}
\lipsum[1]

\end{document}

4. 可lmex10扩展

\documentclass[11pt]{article}

\usepackage{amsmath}
\usepackage{lmodern}
\DeclareFontFamily{OMX}{lmex}{}
\DeclareFontShape{OMX}{lmex}{m}{n}{%
   <-> lmex10
   }{}

\usepackage{lipsum}

\begin{document}

\lipsum[1]
\begin{equation}
2^k-\binom{k}{1}2^{k-1}+\binom{k}{2}2^{k-2}
\end{equation}
\lipsum[1]

\end{document}

对于所有策略,分隔符大小的计算都会产生更好的结果。策略二和策略三非常相似;不同之处在于后者会缩放所有字体,即使是非标准大小,而前者仅使用固定大小 7、8、9、10、11 (10.95)、12、14 (14.4) 和 17 (17.28)。策略一等同于策略三(并且更易于加载)。

在此处输入图片描述

答案2

此答案依赖于重新定义以使用和包\binom的功能。宏将使括号分隔符与使用堆叠的二项式内容的高度完全匹配。scalerelstackengine\scaleleftright\stackanchor

二项式系数分量之间的垂直间隙是的可选参数\stackanchor(当前设置为 1.8ex),系数括号的水平限制宽度作为的可选参数给出\scaleleftright(当前设置为 1.5ex)。

\documentclass[11pt]{article}
%
\usepackage{amsmath}
\usepackage{scalerel}
\usepackage{stackengine}
%
\makeatletter
%
\usepackage{lmodern}
\usepackage{lipsum}
%
\makeatother
%
\begin{document}
%
\lipsum[1]
\begin{equation}
2^k-\binom{k}{1}2^{k-1}+\binom{k}{2}2^{k-2}
\end{equation}
\renewcommand\binom[2]{\stackMath\mathop{%
  \scaleleftright[1.5ex]{(}{\stackanchor[1.8ex]{#1}{#2}}{)}}}
\begin{equation}
2^k-\binom{k}{1}2^{k-1}+\binom{k}{2}2^{k-2}
\end{equation}
\lipsum[1]

%
\end{document}

上面的图片是您发布的原始图片,而下面的图片是此处提出的修复方法。

在此处输入图片描述

答案3

我最近遇到了与您类似的问题,同时使用 11pt 字体大小现代拉丁现代字体 (font) 包。在我使用 10pt 和 12pt 字体大小时,这种情况从未发生过(显然)。

解决方案是添加诺马特选择现代包,然后使用拉丁现代适用于所有文本,但将恢复为 AMS电脑现代为了数学。来自 OP 的代码:

\documentclass[11pt]{article}
%
\usepackage{amsmath}
%
\makeatletter
%
\usepackage[nomath]{lmodern}
\usepackage{lipsum}
%
\makeatother
%
\begin{document}
%
\lipsum[1]
\begin{equation}
    2^k-\binom{k}{1}2^{k-1}+\binom{k}{2}2^{k-2}
\end{equation}
\lipsum[1]
%
\end{document}

这是我几天前开始使用的解决方案,直到我找到更好的解决方案。我没有发现方程式有什么重大差异。

相关内容