unicode-math: Использовать текстовый шрифт для числовых цифр в mathmode

unicode-math: Использовать текстовый шрифт для числовых цифр в mathmode

Использование XeTeX с fontspecиunicode-math , я хотел бы использовать основной шрифт документа дляцифры(числа) в mathmode. Также я хотел бы сделать так, чтобы \text{}в mathmode использовались номера 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}применением только к прямому математическому тексту. Кто-нибудь знает, как применить эту команду ко всем цифрам во всех диапазонах? использование только 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}

введите описание изображения здесь

Связанный контент