如何在 siunitx 和 fontspec 中使用衬线数字?

如何在 siunitx 和 fontspec 中使用衬线数字?

我正在使用 XeTeX 和fontspec,并且我选择了旧式图形作为正文。现在我使用siunitx包,并将其设置为使用文本字体而不是数学字体。对于值,siunitx我想使用衬线数字而不是旧式数字。我该怎么做?

我已经尝试过这个,但是没有用:

\setromanfont[Numbers=OldStyle]{Arno Pro}
\usepackage{siunitx}
\sisetup{mode = text}
\sisetup{inter-unit-separator =\cdot}
\sisetup{detect-all}
<snip>
{\fontspec[Numbers={Lining}]{Arno Pro}\SI{10}{\kilo\volt\per\centi\metre}}

此外,siunitx使用数学字体逗号而不是文本字体逗号时

 \sisetup{output-decimal-marker ={,}}

答案1

除非您提供其他内容,否则字体检测siunitx将使用文档默认值。因此,在您的示例中,您得到的是\rmfamily。关键是定义一个字体命令来选择您想要的内容。

\documentclass{article}
\usepackage{fontspec,siunitx}
\setromanfont[Numbers=OldStyle]{Linux Libertine O}
\newfontfamily\liningroman[Numbers={Lining}]{Linux Libertine O}
\sisetup{mode = text,number-text-rm = \liningroman}
\begin{document}
1234567890
\SI{123456789}{\kilo\volt\per\centi\metre}
\end{document}

我看到问题还有第二部分,询问选项output-decimal-marker。如手册中所述,这是一个数学模式选项。如果您想强制将其置于文本模式,则需要使用\text

\documentclass{article}
\usepackage{fontspec,siunitx}
\setromanfont[Numbers=OldStyle]{Linux Libertine O}
\newfontfamily\liningroman[Numbers={Lining}]{Linux Libertine O}
\sisetup{mode = text,number-text-rm = \liningroman,
  output-decimal-marker=\text{,}}
\begin{document}
1234567890
\SI{123.456789}{\kilo\volt\per\centi\metre}
\end{document}

相关内容