使用 siunitx 创建具有比例的数字范围

使用 siunitx 创建具有比例的数字范围

我想创建一系列的比例,比如

1:2 至 1:4

我正在使用siunitx包,但是当我写时\numrange{1:2}{1:4},我得到了

siunitx error: "invalid-token-in-number" Invalid token ':' in numerical input. For immediate help type H <return>. This is my range \numrange{1:2}{1:4}

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{siunitx}
\begin{document}
This is my range \numrange{1:2}{1:4}
\end{document}

有什么提示吗?

答案1

您可以使用选项input-decimal-markersoutput-decimal-marker将设置:为小数点。这可以在本地使用

\numrange[input-decimal-markers=:,output-decimal-marker=:]{1:2}{1:4}

或全局使用

\sisetup{input-decimal-markers=:,output-decimal-marker=:}

但我不推荐后者,因为它会影响所有数字。

您还可以为此定义一个宏

编辑:添加了可选参数以允许使用附加选项。

\newcommand{\proprange}[3][]{%
  \numrange[input-decimal-markers=:,output-decimal-marker=:,#1]{#2}{#3}%
}

然后就可以像 一样使用了\numrange。我认为这是最好的解决方案,如果你需要多次这样做的话。

完整示例:

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{siunitx}
% uncomment next line to make it global
%\sisetup{input-decimal-markers=:,output-decimal-marker=:}
\newcommand{\proprange}[3][]{%
  \numrange[input-decimal-markers=:,output-decimal-marker=:,#1]{#2}{#3}%
}
\begin{document}
This is my range \numrange[input-decimal-markers=:,output-decimal-marker=:]{1:2}{1:4}
or this \proprange{1:3}{1:6}
\end{document}

编辑2:

因为要使用小数,所以:不能用作小数标记。但可以编写比例宏。

下面是为此定义两个命令\prop和的示例。两者都在内部使用,并将可选参数传递给,因此可以使用选项。\proprange\num\numsiunitx

宏可用于文本和数学。在文本中,换行符可以出现在。在内联数学中不会有换行符。

如果您希望比例和/或比例范围与小数点、冒号和需要特殊列定义(见下面的代码)。宏只能用于单个列。

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{siunitx}
\usepackage{booktabs}

\makeatletter
\newcommand{\prop}[2][]{%
  \@prop[#1]#2\@prop@end
}
\newcommand{\@prop}{}
\def\@prop[#1]#2:#3\@prop@end{%
  \ensuremath{\num[#1]{#2}\text{\,:\,}\num[#1]{#3}}%
}
\newcommand{\proprange}[3][]{%
  \ifmmode
    \prop[#1]{#2}\text{ to }\prop[#1]{#3}%
  \else
    \prop[#1]{#2} to \prop[#1]{#3}%
  \fi
}
\makeatother
\begin{document}
This is my range \proprange{1:2.6}{1:3.6}
or this \proprange{.5:1.3}{.5:1.8}
or with optional arguments for \verb|\num|
\proprange[add-integer-zero=false]{.5:3}{.5:6}
in text there may be a line break \proprange{.5:1.3}{.5:1.8}
but not, if it's in inline math (fillfillfillfillfillfillfillfill) $\proprange{.537:1.3}{.537:1.8}$

In equations:
\[
  \prop{.5:1.3} = \prop{1:2.6}
\]

\[
  \proprange{.5:1.3}{.5:1.8} = \proprange{1:2.6}{1:3.6}
\]

\[
  \proprange[add-integer-zero=false]{.5:1.3}{.5:1.8} = \proprange{1:2.6}{1:3.6}
\]

In tables \verb|\prop| and \verb|\proprange| can only be used for single columns.
To adjust on decimal point, colon, and the ``to'' special column declarations are
needed.

\begin{center}
\begin{tabular}{lS@{\,:\,}S}\toprule
\textsf{which} & \multicolumn{2}{c}{\textsf{proportion}} \\\midrule
first proportion  & 1   &  2.6  \\
second proportion & 1   & 12.65 \\
third proportion  & 0.5 &  2.6  \\\bottomrule
\end{tabular}

\vspace{2ex}
\begin{tabular}{lS@{\,:\,}S@{ to }S@{\,:\,}S}\toprule
\textsf{which} & \multicolumn{4}{c}{\textsf{proportion range}} \\\midrule
first range  & 1   & 2.6   & 1   &  3.6  \\
second range & 1   & 12.65 & 1   & 15.37 \\
third range  & 0.5 & 2.6   & 0.5 &  1.8  \\\bottomrule
\end{tabular}
\end{center}
\end{document}

相关内容