使用 mlmodern 的节标题中的积分符号的大小

使用 mlmodern 的节标题中的积分符号的大小

我非常喜欢这个字体\usepackage{mlmodern},想继续使用它。只有\int在节标题中使用时,积分符号会因为某种原因相对于表达式的其余部分缩小。pdflatex 和 lualatex 都会发生这种情况。

为什么会发生这种情况?有没有办法防止积分符号缩小?

    \documentclass[12pt,titlepage]{article}  
    \usepackage{amsmath}
    
    \usepackage[T1]{fontenc}
    \usepackage{mlmodern}
    
    \begin{document}
    
    \section{$ \int \sqrt{1+2 x} \, dx$}
    This is a test
    \[
    \int \sqrt{1+2 x} \, dx
    \]    
    \end{document}

使用 pdflatex 或 lualatex 编译得到

在此处输入图片描述

与以下输出进行比较

    \documentclass[12pt,titlepage]{article}  
    \usepackage{amsmath}
    \begin{document}
    
    \section{$ \int \sqrt{1+2 x} \, dx$}
    This is a test
    \[
    \int \sqrt{1+2 x} \, dx
    \]
    
    \end{document}

在此处输入图片描述

答案1

编辑:作为埃格尔在下面的评论中正确指出,我们在此处的答案中描述的更改将暂时持续,因为在随后的包更新中,我们建议的更改将从字体声明中删除mlmodern

因此,egreg 建议在文件TeX之前包含一个字体系列声明begin{document},类似于:

\DeclareFontFamily{OMX}{mlmex}{}
\DeclareFontShape{OMX}{mlmex}{m}{n}{%
   <->mlmex10%
   }{} 

另一种可能性是创建一个使用mlmodern并包含类似声明的包并在您的TeX文件中使用该包,这样就避免了在每个未来TeX项目中包含字体系列声明的需要。


免责声明:此解决方案涉及更改包的设置mlmodern。请注意,一般来说,更改包可能会影响其功能,因此您决定进行的任何更改均由您自行决定。


解决方案(保持简短)

\int您选择的字体大小显示(在您的情况下为 12pt):

  1. 在您的计算机上 找到mlmodern目录(包文件所在的目录)。mlmodern.sty
    • 如果您在 Linux 上使用 texlive,您可以在/usr/share/texmf-texlive/tex/latex/或找到该包/usr/share/texmf-dist/tex/latex/
    • 如果您在 Windows 上使用 MiKTeX,您可以在 找到该包C:\Users\<username>\AppData\Local\Programs\MiKTeX 2.9\tex\latex在此处输入图片描述
  2. 此目录中有许多.fd(字体定义)文件。打开文件omxmlmex.fd进行编辑。
  3. 更改宏调用
\DeclareFontShape{OMX}{mlmex}{m}{n}{%
 <->sfixed*mlmex10%
 }{}

在此文件中

\DeclareFontShape{OMX}{mlmex}{m}{n}{%
 <->s*mlmex10% % <----- sfixed was changed to s
 }{}

在此处输入图片描述 4. 重新编译你的 TeX 文件,你会看到积分符号显示正确的大小。 在此处输入图片描述


解释

笔记:下面描述的解决方案搜索过程是在 Windows 10 设备上完成的,但可以以类似的方式应用于 Mac 或 Linux 计算机。

诊断

很明显,显示的积分符号的尺寸不正确。

而且,Manuel Kuehner 博士在他的测试中显示https://tex.stackexchange.com/a/646334/256551设置不同的字体大小并没有改变的大小\int

挖掘

注释掉会使积分恢复到所需大小这一事实\usepackage{mlmodern}意味着问题根源于包中mlmodern

因此,我们决定查看该mlmodern.sty文件,其中大部分包含对\SetSymbolFont和的调用\SetMathAlphabet

%This package provides support for the mlmodern fonts. See mlmodern.pdf
%for more information.
%This work may be distributed and/or modified under the conditions
%of the LaTeX Project Public License, either version 1.3c of this
%license or (at your option) any later version.
%Copyright 2003--2009 by B. Jackowski and J.M. Nowacki.
%Copyright 2021 by Daniel Benjamin Miller.
%This work has the LPPL maintenance status "maintained".
%The Current Maintainer of this work is Daniel Benjamin Miller.


\ProvidesPackage{mlmodern}[2021/01/12 v1.1 Modified Latin Modern Fonts]

\renewcommand{\rmdefault}{mlmr}
\renewcommand{\sfdefault}{mlmss}
\renewcommand{\ttdefault}{mlmtt}
\renewcommand{\bfdefault}{bx}
\DeclareOption{nomath}{\endinput}
\DeclareOption{variablett}{%
  \renewcommand{\ttdefault}{mlmvtt}
}
\DeclareOption{lighttt}{%
  \let\mlmtt@use@light@as@normal\@empty
}
\ProcessOptions\relax

\SetSymbolFont{operators}   {normal}{OT1}{mlmr} {m}{n}
\SetSymbolFont{letters}     {normal}{OML}{mlmm} {m}{it}
\SetSymbolFont{symbols}     {normal}{OMS}{mlmsy}{m}{n}
\SetSymbolFont{largesymbols}{normal}{OMX}{mlmex}{m}{n}
\SetSymbolFont{operators}   {bold}  {OT1}{mlmr} {bx}{n}
\SetSymbolFont{letters}     {bold}  {OML}{mlmm} {b}{it}
\SetSymbolFont{symbols}     {bold}  {OMS}{mlmsy}{b}{n}
\SetSymbolFont{largesymbols}{bold}  {OMX}{mlmex}{m}{n}

\SetMathAlphabet{\mathbf}{normal}{OT1}{mlmr}{bx}{n}
\SetMathAlphabet{\mathsf}{normal}{OT1}{mlmss}{m}{n}
\SetMathAlphabet{\mathit}{normal}{OT1}{mlmr}{m}{it}
\SetMathAlphabet{\mathtt}{normal}{OT1}{mlmtt}{m}{n}
\SetMathAlphabet{\mathbf}{bold}  {OT1}{mlmr}{bx}{n}
\SetMathAlphabet{\mathsf}{bold}  {OT1}{mlmss}{bx}{n}
\SetMathAlphabet{\mathit}{bold}  {OT1}{mlmr}{bx}{it}
\SetMathAlphabet{\mathtt}{bold}  {OT1}{mlmtt}{m}{n}

\def\mathsterling{\mathit{\mathchar"70BF}}

\endinput

为了检查哪些调用影响了积分的格式,我们逐个注释掉每个调用,然后编译 TeX 文件。

事实证明,

\SetSymbolFont{largesymbols}{normal}{OMX}{mlmex}{m}{n}

设置格式(字体编码 + 系列)\int(以及其他大型数学运算符,如\sum\prod,如第 12 页中https://www.latex-project.org/help/documentation/fntguide.pdf提到。)

根据第 14 页,\SetSymbolFont有以下概要:

\SetMathAlphabet {⟨math-alph⟩} {⟨version⟩} {⟨encoding⟩} {⟨family⟩} {⟨series⟩} {⟨shape⟩}

并定义为将数学版本 ⟨version⟩ 的符号字体 ⟨sym-font⟩ 更改为 ⟨encoding⟩ ⟨family⟩ ⟨series⟩ ⟨shape⟩。

OMX字体编码和字体系列的字体属性在文件夹中包含的文件mlmex中指定,因此下一步是查看该文件。omxmlmex.fdmlmodern.sty

找到问题的根源

的内容omxmlmex.fd为:

%This package provides support for the mlmodern fonts. See mlmodern.pdf
%for more information.
%This work may be distributed and/or modified under the conditions
%of the LaTeX Project Public License, either version 1.3c of this
%license or (at your option) any later version.
%Copyright 2003--2009 by B. Jackowski and J.M. Nowacki.
%Copyright 2021 by Daniel Benjamin Miller.
%This work has the LPPL maintenance status "maintained".
%The Current Maintainer of this work is Daniel Benjamin Miller.

\ProvidesFile{omxmlmex.fd}[2021/01/11 v1.0 Font defs for mlmodern]

\DeclareFontFamily{OMX}{mlmex}{}
\DeclareFontShape{OMX}{mlmex}{m}{n}{%
   <->sfixed*mlmex10%
   }{}
\endinput
%%
%% End of file `omxmlmex.fd'.

注意宏调用\DeclareFontShape,特别是它的第 5 个参数<->sfixed*mlmex10

根据第 18 页,此参数“包含将尺寸与外部字体相结合的信息。”

文档中的第 4.3 节(第 19-20 页)说明了<->应用此规则的字体大小范围(在我们的例子中是任何字体大小),sfixed是一个大小函数,并且是大小函数的mlmex10字体参数。⟨fontarg⟩

现在,sfixed特别是“按原样加载字体⟨fontarg⟩,忽略用户请求的大小。”鉴于是mlmex10对应于字体大小 10pt 的字体参数,整个参数只是将所有符号保持为 10pt 大小,无论用户如何尝试更改它。

解决问题

根据上述发现,解决方案是选择不同的大小函数,允许用户自定义字体大小。满足此条件的函数是s,其在第 20 页定义为加载“以用户请求的大小加载外部字体 ⟨fontarg⟩”。

当我们改为sfixeds然后重新编译 TeX 文件时,符号\int就会以 12pt 的字体显示,正如我们所希望的那样。


最后评论

我无法判断使用sfixedsize 函数是开发人员的故意决定mlmodern还是错误。无论如何,我建议将mlmodern导致此问题的sfixed原因通知 的维护者 Daniel Benjamin Miller。

希望上述方法能解决您的问题!如果没有,我很乐意相应地调整答案以充分解决您的问题。

答案2

这不是答案,只是测试。

\documentclass{article}

\usepackage{amsmath}
\usepackage{mlmodern}

\begin{document}

\section{$ \int \sqrt{2x^2}$}
$ \int \sqrt{2x^2}$

\end{document}

LuaLaTeX 输出

在此处输入图片描述

在此处输入图片描述

pdfLaTeX 输出

在此处输入图片描述

在此处输入图片描述


编辑

也许积分符号没有那么大的尺寸,请参阅以下 MWE。

在此处输入图片描述

\documentclass{article}

\usepackage{amsmath}
\usepackage{mlmodern}

\begin{document}

\section{$ \int \sqrt{2x^2}$}

$ \int \sqrt{2x^2}$

{\huge $ \int \sqrt{2x^2}$} % <-- \huge

\end{document}

相关内容