我只能按照自己的喜好配置 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}