在 beamer 演示文稿中,我可以使用\usefonttheme[onlymath]{serif}
衬线字体排版数学,而演示文稿的其余部分则使用无衬线字体。但是\SI
from 命令siunitx
似乎将其参数排版为文本,这意味着它遵循文本字体样式,而不是数学字体样式。有没有办法可以改变这种情况,以便带单位的数量像其他数学一样以衬线字体显示,而文本仍然是无衬线的?
\documentclass{beamer}
\usefonttheme[onlymath]{serif}
\usepackage{siunitx}
\begin{document}
\begin{frame}
Text appears in sans-serif font
$x,2y,3z$ appears in serif font
$\SI{1}{m}$ appears in sans-serif font, would like it to be serif
\end{frame}
\end{document}
我尝试过类似的事情\sisetup{math-rm=\mathrm, text-rm=\rmfamily}
,或者通过detect-family
选项传递给之类的操作siunitx
,但没有成功。
当然,我可以将整个文档的字体系列更改为衬线,但我想知道是否还有其他选择。
答案1
siunitx
检查文档字体是否为 sanserif,使用\AtBeginDocument
,如果是,则调整默认字体。这反映了一个事实:在大多数情况下,如果人们将文档全部设置为 sanserif,则期望的结果是文档siunitx
也使用 sanserif。
在第三版(当前版本)中,受影响的字体设置是unit-font-command
,因此您需要
\AtBeginDocument{\sisetup{unit-font-command = \mathrm}}
在第二个版本中,您需要更改稍微不同的设置:
\AtBeginDocument{\sisetup{math-rm=\mathrm, text-rm=\rmfamily}}
(两个版本的字体设置非常不同,部分原因是希望更好地支持诸如此类的东西beamer
。)
答案2
在最近的版本中,siunitx
还添加了mode
、reset-text-family
、reset-text-series
和reset-text-shape
选项。通过这些,您可以知道siunitx
要尊重beamer
设置。
\documentclass{beamer}
\usefonttheme{structurebold} % Only to show series changes
\usepackage{siunitx}
\begin{document}
\begin{frame}
\frametitle{Frame \SI{1}{\metre}}
\end{frame}
\sisetup{mode=match,
reset-text-family=false,
reset-text-series=false,
reset-text-shape=false}
\begin{frame}
\frametitle{Frame \SI{2}{\metre}}
\end{frame}
\end{document}
其他字体设置详见手册第 4.2 节。
答案3
在里面前言文档中添加这两行:
\usepackage{siunitx}
\sisetup{detect-all = true, detect-family = true}
随后,在文件主体,siunitx
将遵循您的全局设置,但如果您在块中更改字体,则siunitx
也会遵循这些更改。例如:
\SI{0.8393}{\metre} %global settings
\begingroup
\sffamily
\SI{0.8393}{\metre}
\endgroup
还要检查您是否正在使用siunitx
命令。正如您输入的那样\SI{1}{m}
,但实际上应该写成\SI{1}{\metre}