带有 siunitx 的无衬线字体

带有 siunitx 的无衬线字体

我的学生发现了这个问题,而我却无法解决。百分比总是以衬线字体打印。

在此处输入图片描述

以下是测试代码:

\documentclass[]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc} % T1 Schrift Encoding
\usepackage{lmodern}  % Latin Modern
\usepackage[ngerman]{babel}
\usepackage{float}
\usepackage{siunitx}

\sisetup{%
  mode = math,
  detect-family,
  detect-weight,  
  exponent-product = \cdot,
  number-unit-separator=\text{\,},
  output-decimal-marker={\text{,}},
  math-rm=\mathsf,
  text-rm=\sffamily,
}

\begin{document}
\sffamily\noindent
Text \SI{1.23}{\%} and further text.
\begin{table}[H]
\sffamily
\begin{tabular}{ll}
\SI{1.23}{\%} & 1,23\,\%
\end{tabular}
\end{table}
\end{document}

答案1

来自 siunitx 手册第 5 页:

默认情况下,所有文本都以当前直立的衬线数学字体排版。这可以通过设置适当的选项来更改:\sisetup{detect-all}将使用当前字体进行排版。

因此,只需将序言说明中的选项detect-family和替换为,您的学生就可以完成了。detect-weight\sisetup{...}detect-all

顺便说一句,如果您在使用选项\addto\extrasngerman{\sisetup{locale=DE}}加载包后运行,则不必在加载包时明确指定选项和。babelngermanoutput-decimal-marker={\text{,}} exponent-product = \cdotnumber-unit-separator=\text{\,}siunitx

在此处输入图片描述

\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc} 
\usepackage{lmodern} 

\usepackage[ngerman]{babel}
\addto\extrasngerman{\sisetup{locale=DE}}

\usepackage{siunitx}
\sisetup{detect-all} % note: just one option still needs to be specified

\begin{document}
\sffamily
\SI{1.23}{\%}

1,23\,\%
\end{document}

答案2

问题是你假设“看起来”是%\mathsf衬线的,但事实并非如此

\documentclass{article}
\begin{document}
$\mathsf{\%}$
\end{document}

要么坚持使用单位的文本模式

\documentclass{article}
\usepackage{siunitx}
\sisetup
  {
    math-rm=\mathsf,
    text-rm=\sffamily
  }
\begin{document}
\SI{1.23}{\%}
\end{document}

对于这种特殊情况,强制使用文本模式

\documentclass{article}
\usepackage{siunitx}
\sisetup
  {
    mode = math,
    math-rm=\mathsf
  }
\begin{document}
\SI{1.23}{\text{\%}}
\end{document}

或者使用符号模式和适当的定义

\documentclass{article}
\usepackage{siunitx}
\sisetup
  {
    mode = math,
    math-rm=\mathsf
  }
\DeclareSIUnit{\percent}{\text{\%}}
\begin{document}
\SI{1.23}{\percent}
\end{document}

在所有情况下,请注意不要在单位部分添加额外的空格:数字和单位之间会自动留有空格。

答案3

正如前面提到的,问题的根源在于您在数学模式下排版百分比,并假设这\mathsf{\%}会给出无衬线百分比。但百分比字符的数学代码为十六进制 25,命令\math...仅影响数学代码 > 十六进制 7000 的字符。如果您更改数学代码,您将获得预期结果:

\documentclass[]{scrartcl}
\usepackage[T1]{fontenc} 
\usepackage{lmodern} 

\begin{document}
$\mathbf{\% a}\mathsf{\% a} \% a$

\mathcode`\%="7025
$\mathbf{\% a}\mathsf{\% a} \% a$

\end{document}

相关内容