让 siunitx 使用文本数字,但仅当它不在表格中时

让 siunitx 使用文本数字,但仅当它不在表格中时

我在我的论文中使用了很多数字,并且我使用cfr-lm包使它们变成旧式而不是衬里式,这样它们就不会那么分散注意力 - 否则看起来我到处都有随机的大写单词。

我正在使用该siunitx包排版论文中的所有单位。但是,siunitx 包读取这些数字时,就好像它们应该处于数学模式一样,即排列数字。当它位于具有 S 列类型的表中时,这非常有用,因为它使所有数字排列成列,我想要这个。但这意味着使用的任何数字的\SI格式都与没有单位的数字不同,这是我不想要的。我希望这些数字是旧式的。

我如何告诉 siunitx 对具有 S 列类型的表使用一种类型的数字,对\SI(或一般不是该类型的列的所有内容)使用一种类型的数字?我想我已经尝试了所有检测选项的组合,但我可能错过了一个。

MWE 显示问题:

\documentclass{article}
%kpfonts is needed for something not relavent to the question
%Removing it changes the spacing in the detect-all=false siunitx line
\usepackage{kpfonts} 
\DeclareSymbolFontAlphabet{\mathrm}{operators}
\usepackage{cfr-lm}
\usepackage{siunitx}

\begin{document}
\sisetup{detect-all=false}
\textbackslash sisetup{detect-all=false}

\noindent 1234567890 Text \\
\(1234567890\) Math \\
\SI{1234567890}{\angstrom} siunitx

\begin{tabular}{Sl}
    1.234(5678) &   12345678901234567890\\
    1.111(1111) &   11111111111111111111  \\
\end{tabular}

\vspace{1 cm}
\sisetup{detect-all=true}
\textbackslash sisetup{detect-all=true}

\noindent 1234567890 Text \\
\(1234567890\) Math \\
\SI{1234567890}{\angstrom} siunitx

\begin{tabular}{Sl}
    1.234(5678) &   12345678901234567890\\
    1.111(1111) &   11111111111111111111  \\
\end{tabular}

\end{document}

输出: 1

kpfonts并且该命令不会siunitx在左键处断开,因为删除它会改变命令内数字的间距\SI,所以我想知道它是否与问题有关。即使不是,我也需要解决方案才能使用它。)

答案1

我认为您需要做的就是将mode=text其指定为可选参数\SI。例如,

\SI[mode=text]{1234567890}{\meter}

如果在文本模式下使用\num宏 --则也是一样。\num[mode=text]{12345}


附录为了解决 OP 的后续评论:如果必须明确指定和指令[mode=text]的可选参数是一种负担,我建议您加载\SI\numletltxmacro打包并在序言中发出下列指令。

\LetLtxMacro\origSI\SI
\renewcommand\SI[3][mode=text]{\origSI[#1]{#2}{#3}}
\LetLtxMacro\orignum\num
\renewcommand\num[2][mode=text]{\orignum[#1]{#2}}

这样,\SI将默认\num设置该选项。如果出于某种原因,您mode=text不是希望设置此选项并使用\SI和的原始定义,您可以通过运行和或明确指定一个空的第一个参数来\num实现,例如和。\origSI\orignum\SI[]{...}{...}\num[]{...}


在此处输入图片描述

\documentclass{article}
\usepackage{kpfonts} % are you sure you need this?
\usepackage[T1]{fontenc}
\DeclareSymbolFontAlphabet{\mathrm}{operators}
\usepackage{cfr-lm}

\usepackage{siunitx}

\usepackage{letltxmacro}
%% redefine \SI and \num -- carefully
\LetLtxMacro\origSI\SI
\renewcommand\SI[3][mode=text]{\origSI[#1]{#2}{#3}}
\LetLtxMacro\orignum\num
\renewcommand\num[2][mode=text]{\orignum[#1]{#2}}

\begin{document}

\begin{tabular}{@{} l l @{}}
1234567890 & Text \\
\(1234567890\) & Math \\
\SI{1234567890}{\meter} & \verb+\SI+ \\
\num{1234567} & \verb+\num+ \\
\origSI{1234567890}{\meter} & \verb+\origSI+ \\
\orignum{1234567} & \verb+\orignum+ \\
\end{tabular}

\medskip
\begin{tabular}{@{} S[table-format=1.3] l @{}}
    \verb+S+ & \verb+l+\\
    \hline
    1.234 &   1234567890  \\
    1.111 &   1111111111  \\
\end{tabular}

\end{document}

相关内容