在 TeX Live 2016 中将 libertine 和 newtxmath 与 XeLaTeX 结合使用时,数学数字会以 CM 呈现

在 TeX Live 2016 中将 libertine 和 newtxmath 与 XeLaTeX 结合使用时,数学数字会以 CM 呈现

我正在尝试在 TeX Live 2016 中使用 Linux Libertine 的文本和数学模式以及 XeLaTeX。

早在 TeX Live 2014 中,我就能够使用libertinenewtxmath包实现这一点,如这个答案

\usepackage[libertine]{newtxmath}
\usepackage[no-math]{fontspec}
\usepackage{xltxtra}
\usepackage{libertine}

然而,这个解决方案在 TeX Live 2016 中被破坏了,因为数学模式下的数字和罗马文字在 Computer Modern 中显示。有趣的是,删除该 no-math选项可以fontspec修复罗马文字的问题,只留下数学模式下的数字在 CM 中呈现。这是一个 MWE:

\documentclass{article}
\XeTeXdefaultencoding utf-8
\usepackage[libertine]{newtxmath}
\usepackage{xltxtra} % loads fontspec and xunicode
% note that removing `xltxtra` does not affect how the output
\usepackage{libertine}

\begin{document}

Quite some text 123, $123$.

$3 \sin x \alpha$

\begin{displaymath}
\int_0^{+\infty} \left(\frac{\alpha}{\sqrt{\Omega_\Lambda - 1}}\right)^{\frac{1}{x}}
\mathrm{d}x
\end{displaymath}

\end{document}

MWE 使用 XeLaTeX (TL2016) 呈现。除数学模式中的数字(CM 中的数字)外,所有符号均在 Linux Libertine 中呈现

如您所见,阿拉伯数字在 CM 中呈现,其他符号在 Linux Libertine 中呈现。

因此,这是一个大问题:如何使用newtxmathlibertine包在 Linux Libertine 中呈现文本和数学运算?


我宁愿不使用诸如mathspec(上次更新于 2009 年)之类的替代方案, unicode-math(上次我检查时,它给出了糟糕的结果,例如这些), 或其他\setmathfont/ \setmainfont

此外,我在 TeX.sx 上进行了一些认真的浏览,并尝试了许多不同答案中提出的方法,但都没有任何效果。这些包括:

  • \setmainfontnewtxmath:数字和罗马文字将呈现为 CM(参见这里这里
  • \setmathsfontmathspec:大多数数学都以 CM 表示(参见这里这里
  • newtxmathmathspec:数字和罗马文字将呈现为 CM(参见这里

答案1

在各个段落中的某个地方,数字的数学代码被错误分配。

\documentclass{article}

\usepackage{fontspec}
\usepackage{libertine}
\usepackage[libertine]{newtxmath}

\AtBeginDocument{%
  \Umathcode`0="7 "0 `0
  \Umathcode`1="7 "0 `1
  \Umathcode`2="7 "0 `2
  \Umathcode`3="7 "0 `3
  \Umathcode`4="7 "0 `4
  \Umathcode`5="7 "0 `5
  \Umathcode`6="7 "0 `6
  \Umathcode`7="7 "0 `7
  \Umathcode`8="7 "0 `8
  \Umathcode`9="7 "0 `9
}

\begin{document}

Quite some text 123, $123$.

$3 \sin x \alpha$

\begin{displaymath}
\int_0^{+\infty} \left(\frac{\alpha}{\sqrt{\Omega_\Lambda - 1}}\right)^{\frac{1}{x}}
\mathrm{d}x
\end{displaymath}

\end{document}

在此处输入图片描述

请注意,这\XeTeXdefaultencoding不是必需的。另外,xltxtra不建议fontspec直接加载:favor。

答案2

使用优质的 Libertinus 字体。事实上,它们看起来像 Libertine

»这是 Linux Libertine 和 Linux Biolinum 字体的一个分支,最初是作为 Libertine 字体系列的 OpenType 数学伴侣,但后来发展为一个完整的分支,以解决字体中的一些错误。« —(来自加拿大运输安全局

\documentclass{article}
\usepackage{unicode-math}
\setmainfont{Libertinus Serif}
\setsansfont{Libertinus Sans}
\setmonofont{Libertinus Mono}
\setmathfont{Libertinus Math}
\begin{document}

Quite some text 123, $123$.

$3 \sin x \alpha$

\begin{displaymath}
\int_0^{+\infty} \left(\frac{\alpha}{\sqrt{\Omega_\Lambda - 1}}\right)^{\frac{1}{x}}
\mathrm{d}x
\end{displaymath}

\end{document}

在此处输入图片描述

答案3

我在使用带有 libertine 选项的 newtxmath 包并添加 OTF 文本字体时也遇到了这个问题。

如果未加载文本字体,newtxmath 包应该加载“minlibertine”,但有时似乎无法做到这一点。在 LuaLaTeX 下,强制加载可确保 CM 图形在数学中被 libertine 图形替换。以下大部分内容来自 Michael Sharpe 的文档(例如 3),但这是\renewcommand...为我解决问题的关键补充:

% load text components other than libertine text to be used in math
\usepackage[T1]{fontenc}
% \usepackage[scaled=.85]{beramono}% used only by \mathtt
% \usepackage[type1]{cabin}% used only by \mathsf
\renewcommand{\rmdefault}{minlibertine} %% This needs to be forced, else doesn't load.  
% (Suspect cmr flag in package vs. lmr default in LuaTeX, but have not investigated...)
\usepackage[libertine,upint]{newtxmath}
% newtxmath should load minlibertine because no other Roman text package was specified; however, for me, it does not detect the need.
% \mathrm and \mathbf use minlibertine

\usepackage[scr=rsfso]{mathalfa}% helps with loading of math alphabets
\usepackage{bm}% load after all math to give access to bold math

% Now load the otf text fonts using fontspec---won't affect math
\usepackage[no-math]{fontspec} % process with XeLaTeX or LuaLaTeX
\usepackage{libertine} 

答案4

Michael Sharpe 刚刚发布了 newtxmath.sty 的更新(版本 1.527,2017 年 9 月 11 日),该更新解决了此问题。更新在 CTAN 上,也通过 TexLive 进行。

相关内容