使用 unicode-math 包为不同字体提供不同的数学样式选项

使用 unicode-math 包为不同字体提供不同的数学样式选项

我想在文档中使用几种数学字体,其中一种是 Neo Euler。使用此字体,拉丁小写字母是直立的,但我想保留另一种字体的倾斜版本:

\setmathfont[version=euler,math-style=upright]{Neo Euler}
\setmathfont[version=bonummath,math-style=ISO]{TeX Gyre Bonum Math}

当使用 Neo Euler 时不会产生任何字母:

在此处输入图片描述

如果我交换一下这些线:

\setmathfont[version=bonummath,math-style=ISO]{TeX Gyre Bonum Math}
\setmathfont[version=euler,math-style=upright]{Neo Euler}

Bonum Math 变得直立:

在此处输入图片描述

如何修复?完整 MWE(我使用 LuaLaTeX):

\documentclass{article}

\usepackage{unicode-math}

\setmathfont[version=bonummath,math-style=ISO]{TeX Gyre Bonum Math}
\setmathfont[version=euler,math-style=upright]{Neo Euler}


\begin{document}

abc with Bonum: \mathversion{bonummath} $abc$

abc with Euler: \mathversion{euler} $abc$ and \textbf{symup} version: $\symup{abc}$

\end{document}

答案1

在现代工具链中

此示例将直立数学字母\symup和设置\symbfup为 Neo Euler。它保持数字和运算符名称不变。

\documentclass[varwidth, preview]{standalone}

\usepackage{mathtools}
\usepackage{unicode-math}

\defaultfontfeatures{Scale=MatchLowercase}
\setmainfont{TeX Gyre Pagella}[
  Scale=1.0,
  Ligatures={Common, Discretionary, TeX}]
\setmathfont{Asana Math}
\setmathfont[range={up/{Latin,latin,Greek,greek},
                    bfup/{Latin,latin,Greek,greek},
                    cal, bfcal, frak, bffrak},
              script-features={},
              sscript-features={}
            ]{Neo Euler}

\newcommand\upi{\symup{i}}
\newcommand\upe{\symup{e}}

\begin{document}
\begin{align*}
  \upe^{\upi x} &= \cos{x} + \upi \sin{x} \\
  \upe^{\upi \uppi} + 1 &= 0
\end{align*}
\end{document}

欧拉恒等式

根据 ISO 样式,这将在 Neo Euler 中设置欧拉恒等式。在 Neo Euler 中,符号常数(例如 i、e 和 π)被竖直设置,其他所有内容均来自 Palatino 克隆。变量为斜体,数字和运算符名称与文本字体匹配。

在旧版 NFSS 中

\documentclass[varwidth, preview]{standalone}

\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[utf8]{inputenc} % The default since 2018
\usepackage{mathtools}
\usepackage{newpxtext, newpxmath}
% If you also want to load Euler Script and Fraktur, you want mathalfa.

\DeclareSymbolFont{eulerup}{U}{zeur}{m}{n}
\DeclareMathSymbol{\uppi}{\mathalpha}{eulerup}{"19}
\DeclareMathSymbol{\upi}{\mathalpha}{eulerup}{"69}
\DeclareMathSymbol{\upe}{\mathalpha}{eulerup}{"65}

\begin{document}
\begin{align*}
  \upe^{\upi x} &= \cos{x} + \upi \sin{x} \\
  \upe^{\upi \uppi} + 1 &= 0
\end{align*}
\end{document}

使用 pxfonts 和 eulervm 的示例

此版本在 pdflatex 中提供类似的输出,但未定义单独的直立数学字母表。相反,它从中声明所需的单个直立常量eulervm。编码记录在amsfonts用户指南中,但与 OML 相同。

也可以通过加载正确的包(eulervmeulerpx)将直立字体(Euler)设为默认字体,然后加载单独的\mathit字母表。但是,LaTeX 内核没有定义与 分开的直立数学字母表\mathrm,就像\symup中一样unicode-math

相关内容