我可以让 siunitx 命令像 beamer 中的其他数学一样使用衬线字体吗?

我可以让 siunitx 命令像 beamer 中的其他数学一样使用衬线字体吗?

在 beamer 演示文稿中,我可以使用\usefonttheme[onlymath]{serif}衬线字体排版数学,而演示文稿的其余部分则使用无衬线字体。但是\SIfrom 命令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还添加了modereset-text-familyreset-text-seriesreset-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}

相关内容