esint 包将积分更改为 cap 符号

esint 包将积分更改为 cap 符号

以下代码产生错误的输出:

\documentclass{article}
\usepackage{amsmath, esint, kpfonts}

\begin{document}
\[\int_a^b f(x) dx \]
\end{document}

如果我改变包的加载顺序,一切都会正常:

\usepackage{kpfonts,esint}

为什么会发生这种情况?这似乎是一个简单的案例。

答案1

一个简单的案例(或者看起来是,见下文)。该esint包会覆盖积分符号;但也会kpfonts更改默认数学字体;因此您要覆盖kpfonts,而不是默认数学字体和顺序必须

\usepackage{kpfonts}
\usepackage{esint}

可悲的事实是,这两个包是不兼容的,因为它们都定义了一个具有相同名称的数学符号字体​​(这解释了使用错误的加载顺序时得到的奇怪符号):它们都使用相同的标识符largesymbolsA

事情是这样的。

  1. 如果您先加载esint,然后加载kpfonts,则声明的数学符号字体​​将覆盖同名kpfonts声明的数学符号字体​​。此字体与 的符号不同;由于不重新定义(负责打印积分符号的命令),LaTeX 将选择声明的字体中的相应插槽,而该插槽恰好包含那个奇怪的符号。esintesintkpfonts\intopkpfonts

  2. 如果您先加载kpfonts然后esintlargesymbolsA则定义的字体kpfonts将被覆盖,因此依赖它的命令将打印随机符号。

在这两种情况下,你都会失去一些东西。

这是一个解决方法,但实际上esint应该更改其符号字体的标识符。也许还kpfonts应该避免使用太通用的名称。

\documentclass{article}
\usepackage{amsmath}
\usepackage{kpfonts}

\makeatletter
\let\ORG@DeclareSymbolFont\DeclareSymbolFont
\def\DeclareSymbolFont#1#2#3#4#5{%
  \ORG@DeclareSymbolFont{largesymbolsesint}{#2}{#3}{#4}{#5}
  \def\re@DeclareMathSymbol##1##2##3##4{%
    \let##1=\undefined
    \DeclareMathSymbol{##1}{##2}{largesymbolsesint}{##4}}%
}
\makeatother

\usepackage{esint}

\makeatletter
\let\DeclareSymbolFont\ORG@DeclareSymbolFont
\makeatother


\begin{document}
\[\int_a^b f(x) dx \]
\end{document}

相关内容