siunitx 数学和文本模式下的字体始终相同

siunitx 数学和文本模式下的字体始终相同

我只能按照自己的喜好配置 siunitx。

使用 LuaLaTex 和 fontspec,我希望 siunitx 在文本中以普通文本字体打印数字和单位。在数学模式下,我希望它以衬线数学字体打印数字,以无衬线文本字体打印单位。无论我更改什么,它总是会影响数学模式内外的排版。

她是我的母亲:

\documentclass[a4paper, 10pt, german]{scrartcl}

\usepackage{polyglossia}
    \setdefaultlanguage[spelling=new]{german}           
    \setotherlanguage{english}

\usepackage{fontspec}
    \setmainfont{Tex Gyre Heros}[Scale=0.91]            
    \setsansfont{Tex Gyre Heros}[Scale=0.93, LetterSpace=0, WordSpace=0.96]
    \setmonofont{TeX Gyre Cursor}[Scale=0.95]
\usepackage{microtype}  



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

\usepackage{siunitx}
            \sisetup{%detect-all,
                    math-rm=\mathsf,
                    text-rm=\sffamily,
                    binary-units=true, %use binary units
                    per-mode=fraction, %\per inserts fraction
                    output-decimal-marker={,} %comma as decimal sperator
                    }

\begin{document}

In text I want siunitx to print sans serif text font: 1000kV, \SI{1000}{\kilo\volt}

In math mode I want it to print numbers in serif math font: $1000kV, \SI{1000}{\kilo\volt}$

\end{document}

输出结果如下:

在此处输入图片描述

我在这里做错了什么?

答案1

这里有一个解决方案,它使用 (a) 如果\SI在文本模式下遇到,则对数字和单位使用无衬线字形;(b) 如果\SI在数学模式下遇到,则对数字和单位使用衬线字形。这可以通过设置siunitx选项math-rm=\symup和来实现detect-all

在此处输入图片描述

\documentclass[a4paper, 10pt, german]{scrartcl}

\usepackage{fontspec}
    \setmainfont{Tex Gyre Heros}[Scale=0.91]
\usepackage{unicode-math}
    \setmathfont{Latin Modern Math}

\usepackage{polyglossia}
    \setdefaultlanguage[spelling=new]{german}
    \setotherlanguage{english}

\usepackage{microtype}
\usepackage{mathtools}

\usepackage{siunitx}
\sisetup{math-rm=\symup,detect-all}

\begin{document}

Text mode: 1000\,kV, \SI{1000}{\kilo\volt} --- sans serif text font

Math mode: $1000\,\symup{kV}$, $\SI{1000}{\kilo\volt}$ --- serif math font

\end{document} 

相关内容