我正在尝试在 TeX Live 2016 中使用 Linux Libertine 的文本和数学模式以及 XeLaTeX。
早在 TeX Live 2014 中,我就能够使用libertine
和
newtxmath
包实现这一点,如这个答案:
\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}
如您所见,阿拉伯数字在 CM 中呈现,其他符号在 Linux Libertine 中呈现。
因此,这是一个大问题:如何使用newtxmath
和libertine
包在 Linux Libertine 中呈现文本和数学运算?
我宁愿不使用诸如mathspec
(上次更新于 2009 年)之类的替代方案,
unicode-math
(上次我检查时,它给出了糟糕的结果,例如这些), 或其他\setmathfont
/ \setmainfont
。
此外,我在 TeX.sx 上进行了一些认真的浏览,并尝试了许多不同答案中提出的方法,但都没有任何效果。这些包括:
答案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 进行。