我正在使用 lualatex 和 fontspec 来用一种字体排版数学方程式,用另一种字体排版文本。在测试期间,我发现排版文档中的数学看起来并不像我在网上看到的一些样本那么好。经过进一步调查,我发现即使为数学选择的字体(使用\setmathfont
)具有所需的字形(如小写字母“d”),lualatex 也会通过使用加载时加载的罗马字体替换其中一些字形来编写数学\setmathfont
!
请看以下两张图片中的小写字母“d”。第一张图片使用字体“TeX Gyre Pagella Math”编译数学公式,使用默认字体(Latin Modern)编译正文。第二张图片使用字体“TeX Gyre Pagella Math”编译数学公式,使用字体“TeX Gyre Pagella”编译正文。顺便说一句,我已经开始使用 Cambria Math 进行测试,它也存在同样的问题。所以这肯定不是字体相关的问题。
第一个(正文没有 TeX Gyre Pagella,小写字母 'd' 来自拉丁现代字体,其余字形不是)
第二个(以 TeX Gyre Pagella 作为正文,小写字母“d”可能来自 TeX Gyre Pagella 而不是 TeX Gyre Pagella Math;因为它们是相同的方程,所以看起来不错)
完整代码(请先阅读注释,\setmathfont
了解如何重新生成两种情况):
% >> lualatex testmathfont.tex
\documentclass[notitlepage,letterpaper]{article}
%\usepackage{lua-visual-debug}
\usepackage[absolute]{textpos}
\usepackage[letterpaper,left=2in,right=2in,top=1in,bottom=0in]{geometry}
\usepackage[expansion=alltext,shrink=20,stretch=20]{microtype}
\usepackage{fontspec}
\usepackage{xcolor}
\usepackage{amsmath}
\usepackage{unicode-math}
% NOTE:: Compile 1: keep following line commented, Compile 2: uncomment following line
%\setmainfont{TeX Gyre Pagella}
\setmathfont{TeX Gyre Pagella Math}
\usepackage{blindtext}
\begin{document}
\blindtext[1]\vspace*{\baselineskip}
$\displaystyle\int_a^b x^2\;\mathrm{d}x= \tfrac{1}{3} x^3 \Big|_a^b$\vspace*{\baselineskip}
\blindtext[1]\vspace*{\baselineskip}
$a_0+\cfrac{1}{a_1+\cfrac{1}{a_2+\cfrac{1}{a_3+\cdots}}}$\vspace*{\baselineskip}
\end{document}