在 LuaLaTeX 中使用数学字体

在 LuaLaTeX 中使用数学字体

我对 (Lua)LaTeX 世界还不太熟悉,但我特别喜欢 LuaTeX 的一点是它能够将 TrueType 系统字体添加到我的文档中。对于文本字体,我发现这很容易,但对于数学字体,我发现这是一个真正的挑战。

我正在尝试使用数学与技术我的文档中有数学字体,我的系统上安装了这些字体。这些字体的名称MathTechnicalP01P17,每个家族成员都有一些字形。字符映射显示在前面提到的网站上,但我很难让它工作。我也尝试过 MathematicalPi 字体,但没有成功。你能帮帮我吗?

以下是我迄今为止尝试过的:

\documentclass[12pt,a4paper]{article}    
\usepackage{amsmath}
\usepackage{fontspec,unicode-math}

\setmainfont{TeX Gyre Termes}    
\setmathfont[range=\mathup/{num}]{TeX Gyre Termes}  % for numbers
\setmathfont[range=\mathit]{MathTechnicalP12}       % for Greek
\setmathfont[range={"0023,"0041}]{MathTechnicalP09} % for \int, \sum ...

\begin{document}    

Main text here is times roman ...    
\[ x(t)=\int_{-B}^B X(f)e^{j2\pi ft} df \]
 % 
\[ \left(\frac{\mathrm{d}\phi}{\mathrm{d}\theta}\right)^{\top} \frac{\mathrm{d}\eta}{\mathrm{d}\mu} \quad \mathbf{R}^2 \sqrt{1/2\pi f} \]
 %
\[ \sum\int f(t)e^{j\omega t}dt{\rho\omega\pi}\mathcal{H} 2\pi\lambda \]
 %
\[ \sum\int a\otimes b \vec{c} - x + 2zp\gamma \]
 %
\begin{align*}
& \left(\dfrac{a}{2}\right)^2\cdot\pi+\left(\dfrac{b}{2}\right)^2\cdot\pi-\left(\dfrac{\sqrt{a^2+b^2}}{2}\right)^2\cdot\pi+ab &=ab\\
\Leftrightarrow & \dfrac{a^2}{4}\cdot\pi+\dfrac{b^2}{4}\cdot\pi-\dfrac{a^2+b^2}{4}\cdot\pi+ab &=ab\\
\Leftrightarrow & \dfrac{a^2}{4}\cdot\pi+\dfrac{b^2}{4}\cdot\pi-\left(\dfrac{a^2}{4}\cdot\pi+\dfrac{b^2}{4}\cdot\pi\right)+ab &=ab\\
\Leftrightarrow &  ab&=ab
\end{align*}

\end{document}

输出奇怪的数学结果:

在此处输入图片描述

答案1

Opentype 字体内部除了实际字符之外还有许多数据表(用于连字、字符变体等),在 opentype 标准中(相对)新增了一个数学表,该表提供所有传统上在 TeX 数学字体的字体度量中给出的信息,包括如何调整大分隔符的大小、如何对齐分数和平方根、将上标提高多少等……

luatex(和 xetex)本质上实现了两个数学布局引擎,一个使用传统的 Tex 度量,另一个使用 opentype。默认情况下,latex 使用经典设置,但unicode-math会切换为使用 OpenType 表方法。但这意味着“主”字体必须有这个表。

无论哪种方式,您仍然可以使用任何文本字体来表示单个符号或字母,就像在经典 tex 中,主要字体需要有一组特殊的数学字体参数,但任何文本字体都可以设置为数学字母、脚本或无衬线字体等。

您可以通过查看字体编辑器(例如 fontforge)来查看字体是否具有这样的表,但更简单的方法是检查描述,通常为“opentype 数学字体”之类的内容。

因此unicode-math您需要选择一种具有数学表的字体(例如,从内存中:拉丁现代数学、Cambria 数学、xits-math、stix2 数学、任何 TeX Gyre Math 字体、Asana Math)然后您可以考虑为特定符号或范围添加其他字体。

或者,您可能更喜欢使用 mathspec 包,它采用与 unicode-math 相反的方法,旨在设置 opentype文本用于数学的字体(在 xelatex 中,但扩展到 luatex 并不难,尽管我在输入上述内容后才发现 Will 的这个答案:-)LuaLaTeX 和 mathspec

相关内容