我的学生发现了这个问题,而我却无法解决。百分比总是以衬线字体打印。
以下是测试代码:
\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}}
加载包后运行,则不必在加载包时明确指定选项和。babel
ngerman
output-decimal-marker={\text{,}}
exponent-product = \cdot
number-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}