为什么 \usepackage[lighttt]{lmodern} 会覆盖数学模式字体?

为什么 \usepackage[lighttt]{lmodern} 会覆盖数学模式字体?

我正在编写一些代码,想将其\usepackage[lighttt]{lmodern}用于打字机字体。不知出于什么原因,在导入包后,我的数学模式字体会重置为计算机现代字体,而不是所需的和请求的newtxmath字体。

梅威瑟:

\documentclass{article}
\pagestyle{empty}
\usepackage{newtxtext}
\usepackage{newtxmath}
\usepackage{amsmath}
% \usepackage[lighttt]{lmodern}
\DeclareSymbolFont{cmlargesymbols}{OMX}{cmex}{m}{n}
\let\sum\relax
\DeclareMathSymbol{\sum}{\mathop}{cmlargesymbols}{"50}
\DeclareSymbolFont{cmletters}{OML}{cmm}{m}{it}
\SetSymbolFont{cmletters}{bold}{OML}{cmm}{b}{it}
\DeclareSymbolFontAlphabet{\mathnormal}{cmletters}
\DeclareMathSymbol{\lambda}{\mathord}{cmletters}{"15}
\begin{document}
$exp$
\end{document}

如果我注释掉该lmodern包,使用数学模式时我会得到左边的图像,这是我想要的,但我得到的是丑陋的打字机字体。如果我取消注释该行,我会在数学模式下得到 CMU 字体,但得到的是正确的打字机字体。该lmodern包是否会在内部执行某些操作来重置数学模式字体?

数学模式字体不错,但打字机字体不好 数学模式字体不好,但打字机字体好

答案1

不要加载lmodern,只需发出必要的命令。

\documentclass{article}
\usepackage{newtxtext}
\usepackage{newtxmath}
\usepackage{amsmath}

% use Latin Modern Typewriter for tt
\renewcommand{\ttdefault}{lmtt}
% but light
\makeatletter
\let\lmtt@use@light@as@normal\@empty
\makeatother


\begin{document}

$a+b$

\texttt{abc \textbf{abc}}

\end{document}

在此处输入图片描述

答案2

lmodern.sty我按照 Ulrike 的评论进行了调查。

问题是它不仅重新定义了打字机字体的符号字体。我创建了mylmodern.sty删除这些更改(遵循 GUST 字体许可证):

\renewcommand{\ttdefault}{lmtt}

\DeclareOption{nomath}{\endinput}
\DeclareOption{variablett}{%
  \renewcommand{\ttdefault}{lmvtt}
}
\DeclareOption{lighttt}{%
  \let\lmtt@use@light@as@normal\@empty
}
\ProcessOptions\relax
\endinput

相关内容