![使用 siunitx 创建具有比例的数字范围](https://linux22.com/image/362536/%E4%BD%BF%E7%94%A8%20siunitx%20%E5%88%9B%E5%BB%BA%E5%85%B7%E6%9C%89%E6%AF%94%E4%BE%8B%E7%9A%84%E6%95%B0%E5%AD%97%E8%8C%83%E5%9B%B4.png)
我想创建一系列的比例,比如
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-markers
和output-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
\num
siunitx
宏可用于文本和数学。在文本中,换行符可以出现在到。在内联数学中不会有换行符。
如果您希望比例和/或比例范围与小数点、冒号和到需要特殊列定义(见下面的代码)。宏只能用于单个列。
\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}