![表格和 siunitx 中的无衬线数学](https://linux22.com/image/242650/%E8%A1%A8%E6%A0%BC%E5%92%8C%20siunitx%20%E4%B8%AD%E7%9A%84%E6%97%A0%E8%A1%AC%E7%BA%BF%E6%95%B0%E5%AD%A6.png)
我想知道确保表格内的内容(包括 siunitx 列)使用无衬线数学字体设置的最简单的方法。普通文档使用衬线字体设置。
这种方法展示了我的一些尝试:
\documentclass[paper=a4, fontsize=11pt]{scrartcl}
\usepackage{lmodern}
\usepackage{amsmath}
\usepackage{dcolumn}
\usepackage{siunitx}
\makeatletter
% dcolumn column
\newcolumntype{d}[1]{>{\DC@{.}{ ,}{#1}}l<{\DC@end}}
% sans serif d-column (from http://www.torsten-schuetze.de/tex/tabsatz-2004.pdf)
\newcolumntype{j}[1]{%
>{\DC@{.}{,}{#1}\mathsf\bgroup}l%
<{\egroup\DC@end}%
}
% sans serif column, including math
\newcolumntype{k}{%
>{$\mathsf\bgroup}l%
<{\egroup$}%
}
\makeatother
\begin{document}%
% table with d-columns: fails to compile
\begin{tabular}{j{4.2}d{4.2}ll}
\hline
2.3456 & 2.3456 & 2.3456 & 2.3456 \\
34.2345 & 34.2345 & 34.2345 & 34.2345 \\
56.7835 & 56.7835 & 56.7835 & 56.7835 \\
\hline
\end{tabular}
\mbox{}\vspace{1em}\
% using siunitx commands instead
\sisetup{table-figures-integer = 2, table-figures-decimal = 4, math-rm=\mathsf}
\sffamily
\begin{tabular}{S
k
S[table-number-alignment = left]
S[table-number-alignment = right]}
\hline
{Some Values} & {Some Values} & {Some Values / \si{kg/m^2}} & {Some Values} \\
\hline
2.3456 & 2.3456 & 2.3456 & 2.3456 \\
{$\mathsf{a^2}$} & 34.2345 & 34.2345 & 34.2345 \\
56.7835 & 56.7835 & 56.7835 & 56.7835 \\
\hline
\end{tabular}
\end{document}%
第一个表格编译失败。第二个表格除了命令外都设置为无衬线字体\si{}
。不过代码看起来相当复杂。附上结果。
答案1
对于siunitx
,有几种潜在的方法。首先,正如 Stefan 所说,你可以检测当前字体:
\documentclass[paper=a4, fontsize=11pt]{scrartcl}
\usepackage{booktabs,lmodern,siunitx}
\usepackage{siunitx}
\newcolumntype{k}{%
>{$\mathsf\bgroup}l%
<{\egroup$}%
}
\begin{document}
\sffamily
\begin{center}
\sisetup{table-format = 2.4,detect-family}
\begin{tabular}{S
k
S[table-number-alignment = left]
S[table-number-alignment = right]}
\toprule
{Some Values} & {Some Values} & {Some Values / \si{kg/m^2}} & {Some Values} \\
\midrule
2.3456 & 2.3456 & 2.3456 & 2.3456 \\
{$\mathsf{a^2}$} & 34.2345 & 34.2345 & 34.2345 \\
56.7835 & 56.7835 & 56.7835 & 56.7835 \\
\bottomrule
\end{tabular}
\end{center}
\end{document}
第二种方法是将文本和数学模式材料使用的字体设置siunitx
为 sanserif
\documentclass[paper=a4, fontsize=11pt]{scrartcl}
\usepackage{booktabs,lmodern,siunitx}
\usepackage{siunitx}
\newcolumntype{k}{%
>{$\mathsf\bgroup}l%
<{\egroup$}%
}
\begin{document}
\sffamily
\begin{center}
\sisetup{table-format = 2.4, math-rm=\mathsf, text-rm=\sffamily}
\begin{tabular}{S
k
S[table-number-alignment = left]
S[table-number-alignment = right]}
\toprule
{Some Values} & {Some Values} & {Some Values / \si{kg/m^2}} & {Some Values} \\
\midrule
2.3456 & 2.3456 & 2.3456 & 2.3456 \\
{$\mathsf{a^2}$} & 34.2345 & 34.2345 & 34.2345 \\
56.7835 & 56.7835 & 56.7835 & 56.7835 \\
\bottomrule
\end{tabular}
\end{center}
\end{document}
在这两种情况下,我都使用了table-format = 2.4
快捷方式来设置预留空间。这通常比逐项设置更容易。
答案2
detect-family
如果指定了选项siunitx
,该包将能够检测到单位是在无衬线模式下使用的。
\usepackage[detect-family]{siunitx}
您可以使用该sansmath
包来切换到无衬线数学:
\usepackage{sansmath}
\newcolumntype{k}{>{\sansmath$}l<{$\unsansmath}}
在数学模式之外使用\sansmath
和,因此分别在之前和之后:\unsansmath
dcolumn
\DC@
\DC@end
\newcolumntype{d}[1]{>{\sansmath\DC@{.}{ ,}{#1}}l<{\DC@end\unsansmath}}