kpfonts 在通过 \PassOptionsToClass 传递时会忽略 fleqn 和 leqno 选项

kpfonts 在通过 \PassOptionsToClass 传递时会忽略 fleqn 和 leqno 选项

以下 M(n)WE 指出,通过 传递给类的fleqn(以及)选项将被考虑,除非包被加载(如果通过或 作为选项传递选项则没有问题):leqno\PassOptionsToClasskpfonts\@classoptionslist\documentclass

% \makeatletter
% \def\@classoptionslist{fleqn}
% \makeatother
\PassOptionsToClass{fleqn}{article}%
\documentclass%[fleqn]
{article}
% \usepackage{kpfonts}
%
\begin{document}
Foo
\[
  F
\]
\end{document}

有趣的是,如果kpfonts加载了noamsmath选项,则不会出现问题(但命令将kpfonts无法\widering使用)。

你知道发生了什么吗?

答案1

kpfonts除了加载之外,实际上没有涉及其他内容amsmath,如果直接加载,则会看到相同的内容amsmath

amsmath重新定义左对齐,因此您需要将选项传递给包:

% \makeatletter
% \def\@classoptionslist{fleqn}
% \makeatother
%\PassOptionsToClass{fleqn}{article}%
\PassOptionsToPackage{fleqn}{amsmath}%
\documentclass%[fleqn]
{article}
\usepackage{amsmath}
%
\begin{document}
Foo
\[
  F
\]
\end{document}

如果你将一个选项传递给班级,那么只是类的一个选项,与显式列表中的选项不同,[..]它不是所有包都看到的全局选项,因此您需要传递fleqnamsmath而不是article

相关内容