unicode-math:在数学模式下使用文本字体表示数字

unicode-math:在数学模式下使用文本字体表示数字

使用 XeTeX 和fontspecunicode-math我想使用文档主字体数字(数字)在数学模式下。另外,我想\text{}在数学模式下使用 Lining 数字,而文档的默认数字是 OldStyle 数字。我该如何实现此行为?

我尝试插入\setmathfont[range=\mathup/{num}]{Linux Libertine O},但没有得到预期的结果。

以下是 MWE,指出了问题:

\documentclass{article}
\usepackage{iftex}

\usepackage{libertine}
\usepackage{fontspec} 
\setmainfont[Numbers=OldStyle]{Linux Libertine O} 

\usepackage{amsmath}

\usepackage{unicode-math}
% Here I try to set up the normal text font for digits in mathmode: 
\setmathfont[range=\mathup/{num}]{Linux Libertine O}

\parindent0pt

\begin{document}

This is \ifXeTeX XeTeX\fi\ifLuaTeX LuaTeX\fi 
with \fontname\font
\bigskip

Text numbers: 
0123456789; italic: \textit{0123456789}; bold: \textbf{0123456789} 

Text numbers lining: 
\liningnums{0123456789; italic: \textit{0123456789}; bold: 
\textbf{0123456789}}

Numbers in mathmode: $0123456789$ (ok)\\
mathit: $\mathit{0123456789}$ (wrong font)\\
mathbf: $\mathbf{0123456789}$ (wrong font)\\
mathrm: $\mathrm{0123456789}$ (wrong font)\\
text (math): $\text{0123456789}$ (should be lining)

In big equation, fonts for big brackets $\big( \Big( \bigg( \Bigg($ are
missing: 
\[
\left(\frac{12a}{34b}\right)
\]

\end{document}

使用 XeTeX,结果是:

在此处输入图片描述

因此存在 3 个问题:

  1. Linux Libertine O对于数字没有出现在\mathrm、、\mathit等中\mathbf
  2. 大支架不起作用。(有关详细信息,请参阅下文。)
  3. \text{}尽管文档编号样式是 OldStyle,有没有办法在数学模式中实现衬线数字?

关于问题 1,这是由于range=\mathup/{num}仅适用于 updright 数学文本。有人知道如何将此命令应用于所有范围内的所有数字吗?仅使用range={num}会导致错误。

关于问题 2,我还有两条信息。A)在同一个文件上使用 LuaTeX,括号确实出现,但未经缩放:

在此处输入图片描述

B) 如果我注释掉该行\setmathfont[range=\mathup/{num}]{Linux Libertine O},问题就不会发生。这表明括号机制会受到更改数字字体的影响,但事实不应该如此,对吗?

在此处输入图片描述

顺便说一句,这个问题并非 所特有Linux Libertine O。当我将SabonNextLTPro其用作主文档字体时也出现了这个问题。

答案1

与此同时,在有人想出办法之前,我想分享一个解决方法。基本上就是恢复为mathspec而不是unicode-math。几乎所有东西都只需三行即可开箱即用:

\documentclass{article}
\usepackage{iftex}

\usepackage[no-math]{fontspec} 
\usepackage{libertine}
\setmainfont[Numbers=OldStyle]{Linux Libertine O} 

\usepackage{amsmath}
\usepackage{mathspec}
\setmathfont(Digits){Linux Libertine O}

\parindent0pt

\begin{document}

This is \ifXeTeX XeTeX\fi\ifLuaTeX LuaTeX\fi 
with \fontname\font
\bigskip

Text numbers: 
0123456789; italic: \textit{0123456789}; bold: \textbf{0123456789} 

Text numbers lining: 
\liningnums{0123456789; italic: \textit{0123456789}; bold: 
\textbf{0123456789}}

Numbers in mathmode: $0123456789$ (ok)\\
mathit: $\mathit{0123456789}$ (correct font but no italic)\\
mathbf: $\mathbf{0123456789}$ (correct font but no boldface)\\
mathrm: $\mathrm{0123456789}$ (ok)\\
text (math): $\text{0123456789}$ (should be lining)

In equations, testing fonts for big brackets $\big( \Big( \bigg( \Bigg($: 
\[
\left(\frac{12a}{34b}\right)
\]

\end{document}

在此处输入图片描述

相关内容