考虑一下代码
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{lmodern}
\begin{document}
\[ \sqrt{\frac{m}{n}} \]
\end{document}
输出结果是一个与 Computer Modern 不同的平方根符号,而 Computer Modern 非常适合。在这种情况下,Latin Modern 有什么问题?为什么它会产生不同的(为什么不相同)且丑陋的输出,尽管它应该是 Computer Modern 的改进。使用 Latin Modern 比 Computer Modern 更好吗?为什么?我发现 Latin Modern 会导致更多问题。我该怎么办?是否以lmodern
某种方式与 相冲突amsmath
?
答案1
您(重新)发现了拉丁现代数学字体的一个重要弱点。如果我们看一下,omxlmex.fd
就会发现
% This file belongs to the Latin Modern package. The work is released
% under the GUST Font License. See the MANIFEST-Latin-Modern.txt and
% README-Latin-Modern.txt files for the details. For the most recent version of
% this license see http://www.gust.org.pl/fonts/licenses/GUST-FONT-LICENSE.txt
% or http://tug.org/fonts/licenses/GUST-FONT-LICENSE.txt
\ProvidesFile{omxlmex.fd}[2009/10/30 v1.6 Font defs for Latin Modern]
\DeclareFontFamily{OMX}{lmex}{}
\DeclareFontShape{OMX}{lmex}{m}{n}{%
<->sfixed*lmex10%
}{}
\endinput
%%
%% End of file `omxlmex.fd'.
这意味着数学扩展字体以固定大小 10pt 加载,与文档字体无关。让我们尝试一下
\documentclass[10pt]{article}
\usepackage{lmodern}
\begin{document}
\[
\sqrt{\frac{m}{n}}+\sum\frac{m}{n}+\int\frac{m}{n}
\]
\end{document}
我们换成10pt
(12pt
问题11pt
是一样的,但是不太容易看出来):
你看到了吗?分数变大了,符号却没有变大。如果我们以 17pt 排版示例(使用extarticle
),情况会更加明显:
解决方案
\documentclass[12pt]{article}
\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}
\begin{document}
\[
\sqrt{\frac{m}{n}}+\sum\frac{m}{n}+\int\frac{m}{n}
\]
\end{document}
并要求 Latin Modern 团队修复这个令人尴尬的故障。如果他们收到大量邮件,也许他们会重新考虑。
更新
我们可以做\usepackage{fixcmex}
\documentclass[12pt]{article}
\usepackage{lmodern}
\usepackage{fixcmex}
\begin{document}
\[
\sqrt{\frac{m}{n}}+\sum\frac{m}{n}+\int\frac{m}{n}
\]
\end{document}
答案2
要重现您遇到的问题,将文档字体大小设置为 至关重要12pt
。加载lmodern
和mathtools
包可能更像是一场杂耍。
我认为您不喜欢平方根符号的水平线太靠近字母“m”。要解决此问题,您可以在\mathstrut
的第一个参数中插入一个指令\frac
。如果您有很多项\frac
,您可能需要设置一个专用的宏,例如,\myfrac
,它会自动\mathstrut
在分子项中插入 a。这就是以下示例的第三个表达式中所做的。
\documentclass[12pt]{article}
\usepackage{lmodern,mathtools}
\newcommand\myfrac[2]{\frac{#1\mathstrut}{#2}}
\begin{document}
\[
\sqrt{\frac{m}{n}}
\quad
\sqrt{\frac{m\mathstrut}{n}}
\quad
\sqrt{\myfrac{m}{n}}
\]
\end{document}
附录:如果您必须使用12pt
作为主文档大小,您可能需要考虑从 pdfLaTeX 切换到 LuaLaTeX 和unicode-math
包。这样做将在分子项和平方根符号的水平部分之间产生更好的间距,无论是否加载amsmath
包(或其超集,mathtools
包)。(如果您选择加载mathtools
,则应在加载之前进行unicode-math
。)
% !TeX program = lualatex % tested with MacTeX2017
\documentclass[12pt]{article}
%\usepackage{mathtools} % optional
\usepackage{unicode-math}
\begin{document}
\[
\sqrt{\frac{m}{n}} \quad \sqrt{\frac{m\mathstrut}{n}}
\]
\end{document}
答案3
这修改了 Latin Modern 的字体配置,我思考类似于amsmath.sty
对 Computer Modern 所做的修改。它并不完全类似,因为 Computer Modern 提供了数学扩展字体的额外大小,而 Latin Modern 只提供了 10pt。然而,它确实看起来 --- 在绝对最小测试---以类似的方式工作。
买者自负 ...
\documentclass[12pt]{article}
\makeatletter
% \usepackage[cmex10]{amsmath}
\usepackage{amsmath}
\usepackage{lmodern}
% from omxlmex.fd
\DeclareFontFamily{OMX}{lmex}{}
% modified from amsmath.sty
\ifnum\cmex@opt=7 \relax
\DeclareFontShape{OMX}{lmex}{m}{n}{%
<-8>lmex10<8>lmex10<9>lmex10%
<10><10.95><12><14.4><17.28><20.74><24.88>lmex10%
}{}%
\expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax
\else
\ifnum\cmex@opt=\z@ % need to override cmex7 fontdef from amsfonts
\begingroup
\fontencoding{OMX}\fontfamily{lmex}%
\expandafter\let\csname OMX+cmex\endcsname\relax
\try@load@fontshape
\endgroup
\expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax
\def\cmex@opt{10}%
\fi
\fi
\makeatother
\begin{document}
\[ \sqrt{\frac{m}{n}} \sqrt[3]{\frac{m}{n}} \]
\end{document}
答案4
我找到了一个实用的解决方案(适用于 pdfLaTeX)。可以设置 选项nomath
。lmodern
然后在数学模式下使用通常的 CM(由 引起的改进输出amsmath
),而在文本模式下使用 LM。
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage[nomath]{lmodern}
\begin{document}
\[ \sqrt{\frac{m}{n}} \]
\end{document}
该amsmath
软件包通过将原始的 IBBYVH+CMEX10 字体更改为 MNPEHI+CMEX10 来改进平方根符号。但是,如果lmodern
完全启用,amsmath
则不会有任何影响。
或者,也可以使用包ae
代替lmodern
,请参见:
拉丁现代与 cm-super?