我非常喜欢这个字体\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):
- 在您的计算机上 找到
mlmodern
目录(包文件所在的目录)。mlmodern.sty
- 此目录中有许多
.fd
(字体定义)文件。打开文件omxmlmex.fd
进行编辑。 - 更改宏调用
\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.fd
mlmodern.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⟩”。
当我们改为sfixed
,s
然后重新编译 TeX 文件时,符号\int
就会以 12pt 的字体显示,正如我们所希望的那样。
最后评论
我无法判断使用sfixed
size 函数是开发人员的故意决定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}