买者自负 ...

买者自负 ...

考虑一下代码

\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}

在此处输入图片描述

我们换成10pt12pt问题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。加载lmodernmathtools包可能更像是一场杂耍。

我认为您不喜欢平方根符号的水平线太靠近字母“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)。可以设置 选项nomathlmodern然后在数学模式下使用通常的 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?

相关内容