使用 newtxmath 来表示字母而不是符号

使用 newtxmath 来表示字母而不是符号

我想使用 newtxmath 来表示方程式中的字母。不幸的是,如果我只启用 newtxmath,我会发现 \lesssim 和 \lnsim 符号看起来太相似了。以下是示例:

\documentclass[12pt,varwidth]{standalone}

\usepackage{amssymb}
\usepackage{newtxmath}

\begin{document}
$a\lnsim b$ means $a<b$ and $a\nsim b$.

I'd like $a\lnsim b$ and $a\lesssim b$ to look different.

But also $\lnsim$ to be same size as $\le,\nsim,\ne,=$.
\end{document}

没有选择

我发现如果我将 noamssymbols 选项添加到 newtxmath,我可以使用默认的(更清晰的) \lesssim 和 \lnsim 关系:

\usepackage[noamssymbols]{newtxmath}

不幸的是,我得到了一个奇怪的关系符号大小不匹配的问题。特别是,\lnsim 看起来与 < 和 \le 完全不成比例:

在此处输入图片描述

当然,我也可以完全去掉 newtxmath,但这样字母看起来就不那么好看了。(在我的实际文档中,文本字体是 times。)

我怎样才能从 newtxmath 中获取字母,但保留纯乳胶字体中的 <、=、\ne 等运算符?

答案1

首先提供一个粗略的解决方案,然后我会尝试说服你一个更现代的解决方案。

比我最初发布的修复方法更好,更简单。 用 重新调整运算符\scalebox

\documentclass[12pt,varwidth]{standalone}

\usepackage{amssymb}
\usepackage[noamssymbols]{newtxmath}
\usepackage{graphicx}

\let\oldlnsim\lnsim
\renewcommand{\lnsim}{\ensuremath\mathrel{\scalebox{0.8}{\ensuremath\oldlnsim}}}

\let\oldlesssim\lesssim
\renewcommand{\lesssim}{\ensuremath\mathrel{\scalebox{0.8}{\ensuremath\oldlesssim}}}

%% Etc.

\begin{document}
$a\lnsim b$ means $a<b$ and $a\nsim b$.

I'd like $a\lnsim b$ and $a\lesssim b$ to look different.

But also $\lnsim$ to be same size as $\le,\nsim,\ne,=$.
\end{document}

逐像素比较。之前: 在此处输入图片描述

后: Scalebox 解决方案

好吧,这是我说过要尝试说服您的另一个解决方案。

如果您阅读newtx文档,您会发现作者 Michael Sharpe 非常坦诚地说明了他从哪里获得了这个软件包的零碎部分。他甚至说:“在我看来,Linux Libertine 中的材料排版比 Times 中相应的材料排版看起来更好。”因此,如果您喜欢他的设置,我们也可以在现代工具链中请求它们并获得其所有好处。包括自动缩放的字体、对数学字母表没有限制,以及从任何 Unicode 字体中选择任何字形作为默认字形的能力。

\documentclass[12pt,varwidth]{standalone}

\usepackage{amssymb}
\usepackage[math-style=TeX]{unicode-math}

%% Basically identical appearance to newtxmath, but all scaling is now
%% automatic.
\defaultfontfeatures{Scale=MatchLowercase}
\setmainfont{Linux Libertine O}
\setsansfont{TeX Gyre Heros}
\setmathfont{TeX Gyre Termes Math}

%% With one wrinkle: Unicode maps /mathcal and /mathscr to the same
%% code points, so we need to set /mathcal and /mathbfcal up
%% separately:  Now we have more alphabets than before, and won’t
%% run out.
\setmathfont[range={\mathcal,\mathbfcal},StylisticSet=1,Scale=MatchUppercase]{XITS Math}

\begin{document}
$a\lnsim b$ means $a<b$ and $a\nsim b$.

I'd like $a\lnsim b$ and $a\lesssim b$ to look different.

But also $\lnsim$ to be same size as $\le,\nsim,\ne,=$.

\end{document}

使用 Unicode

这很简单,并且会得到一个比 更独特的运算符newtxmath。不过,要真正得到你想要的东西,即amsmath缩小符号,需要一些额外的技巧:

\documentclass[12pt,varwidth]{standalone}

\usepackage{amssymb}
\usepackage[math-style=TeX]{unicode-math}

%% Basically identical appearance to newtxmath, but all scaling is now
%% automatic.
\defaultfontfeatures{Scale=MatchLowercase}
\setmainfont{Linux Libertine O}
\setsansfont{TeX Gyre Heros}
\setmathfont{TeX Gyre Termes Math}

%% With one wrinkle: Unicode maps /mathcal and /mathscr to the same
%% code points, so we need to set /mathcal and /mathbfcal up
%% separately:  Now we have more alphabets than before, and won’t
%% run out.
\setmathfont[range={\mathcal,\mathbfcal},StylisticSet=1,Scale=MatchUppercase]{XITS Math}

%% We can use the same trick to override any range of math characters---
%% such as the ones whose appearance you didn’t like.  In this case,
%% you wanted them to look
%% like amsmath’s, but smaller.
\setmathfont[range={"22E6-"22E9},Scale=0.8]{XITS Math}
%% Since ≁ now looks out of place, change it, then change a number of
%% other tilde operators to match that:
\setmathfont[range={"223B-"223D,"2241-"224C}]{XITS Math}

\begin{document}
$a\lnsim b$ means $a<b$ and $a\nsim b$.

I'd like $a\lnsim b$ and $a\lesssim b$ to look different.

But also $\lnsim$ to be same size as $\le,\nsim,\ne,=$.

\end{document}

正确的解决方案

答案2

Lorehead 的回答非常好。但是,由于我使用的是 pdftex 而不是 lualatex,因此我无法使用 XITS 方法。但答案促使我找到了 stix,它可能不如 XITS 好,但可以与 pdflatex 配合使用。因此,虽然以下内容可能并不完美,但至少它为我提供了比以前更好的输出:

\usepackage[notext]{stix} 
\usepackage{amssymb}

我接受 Lorehead 的答案,但也为想要快速解决问题的任何人添加这个答案。

在此处输入图片描述

相关内容