LuaTeX:\fontfeature{Fractions=On} 将首位数字转换为上标

LuaTeX:\fontfeature{Fractions=On} 将首位数字转换为上标

使用,如果我设置 -- ,则 (和)LuaTeX之外的任何数字的首位都会突然变成上标,与我使用的字体无关。在每种情况下,只有数字的最后一位是正常字体,首位是上标。$math$siunitx\num\defaultfontfeatures[\rmfamily,\sffamily]{Fractions=On}

% -*- mode: latex; TeX-engine: luatex; coding: utf-8; -*-
\documentclass{scrartcl}
\PreventPackageFromLoading{fixltx2e}
\usepackage{siunitx}
\usepackage{luatextra}
\defaultfontfeatures[\rmfamily,\sffamily]{Fractions=On} % <-- that's it
\setmainfont{Linux Libertine O}
% \setmainfont{Libertinus Serif}
\setsansfont{Libertinus Sans}
\setmonofont{Libertinus Mono}
\begin{document}
blabla 6176 787347 125\footnote{bla 123} \num{10} \num{19827}

$1234 + 567 = 8910$

\medskip
\textsf{blabla 6176 787347 125\footnote{bla 123} \num{10} \num{19827}}

$\mathsf{1234 + 567 = 8910}$
\end{document}

答案1

OpenType 分数值功能不应全局启用,而应选择性地针对包含分数值的文本部分启用(某些字体尝试使其全局起作用,但由于这种行为很难通过 OpenType 功能实现,因此通常会存在缺陷):

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Libertinus Serif}
\setsansfont{Libertinus Sans}
\setmonofont{Libertinus Mono}
\begin{document}
blabla 6176 787347 125\footnote{bla 123} 10 19827
{\addfontfeatures{Fractions=On} 1234/1234}

$1234 + 567 = 8910$

\medskip
\textsf{blabla 6176 787347 125\footnote{bla 123} 10 19827
{\addfontfeatures{Fractions=On} 1234/1234}}

$\mathsf{1234 + 567 = 8910}$
\end{document}

使用 XeTeX 可以得到: XeTeX 输出

作为奖励,如果您在 XeTeX 1中使用分数斜线(U+2044),则分数(或分子和分母)功能将自动为其周围的数字序列激活:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Libertinus Serif}
\setsansfont{Libertinus Sans}
\setmonofont{Libertinus Mono}
\begin{document}
blabla 6176 787347 125\footnote{bla 123} 10 19827 1234⁄1234

$1234 + 567 = 8910$

\medskip
\textsf{blabla 6176 787347 125\footnote{bla 123} 10 19827 1234⁄1234}

$\mathsf{1234 + 567 = 8910}$
\end{document}

1这实际上是 HarfBuzz 的一项功能,遵循 Unicode 建议,因此它可以在使用 HarfBuzz 的任何地方工作,例如在 Firefox 和 Google Chrome 中。

相关内容