表格和 siunitx 中的无衬线数学

表格和 siunitx 中的无衬线数学

我想知道确保表格内的内容(包括 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和,因此分别在之前和之后:\unsansmathdcolumn\DC@\DC@end

\newcolumntype{d}[1]{>{\sansmath\DC@{.}{ ,}{#1}}l<{\DC@end\unsansmath}}

相关内容