我目前正在编写一本教科书,其中我处理十进制数集。由于教科书的语言是法语,小数分隔符必须是逗号,千位分隔符必须是空格。但这样一来,读者就很难区分四个整数的集合 {0, 1, 2, 3} 和两个十进制数的集合 {0.1, 2.3}。请参阅以下代码:
\documentclass{minimal}
\usepackage[french]{babel}
\usepackage[autolanguage]{numprint}
\begin{document}
\noindent $\{\numprint{0.1}, \numprint{2.3}\}$\\
$\{0, 1, 2, 3\}$
\end{document}
由
这不太好……
我想要做的是,用比小数点分隔符前的数字更小的字体打印逗号和小数点(这在法国是一种相当常见的用法,例如排版价格),就像
\documentclass{minimal}
\usepackage{amsmath}
\usepackage{relsize}
\begin{document}
$\{\text{$0$\smaller$\mathord,1$},
\text{$2$\smaller$\mathord,3$}\}$\\
\end{document}
(是的,这是一个相当丑陋的代码:-S),这产生了更易于阅读的
现在我的问题是:如何使用像软件包\numprint
中的简单命令那样巧妙地做到这一点numprint
?更改小数点的字体似乎不是在 中实现的功能numprint
,也不是在 中实现的功能siunitx
;而且我对 (La)TeX 的熟练程度不足以构建自己的解决方案……
(附言:如果可能的话,我希望有一个解决方案,它还可以自动插入千位分隔符,并以十的幂呈现“1.2e3”...)
答案1
你可能会这样做:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{siunitx,relsize}
\sisetup{locale=FR}
\ExplSyntaxOn
\NewDocumentCommand{\hnum}{>{\SplitArgument{1}{.}}m}
{
\hnumA#1
}
\NewDocumentCommand{\hnumA}{mm}
{
\num{#1}
\IfValueT{#2}{\hnumB{#2}}
}
\NewDocumentCommand{\hnumB}{>{\SplitArgument{1}{e}}m}
{
\hnumC#1
}
\NewDocumentCommand{\hnumC}{mm}
{
\ensuremath
{
{,}\mathsmaller{\num[add-integer-zero=false,output-decimal-marker={}]{.#1}}
\IfValueT{#2}{{}\times\num{e#2}}
}
}
\ExplSyntaxOff
\begin{document}
$\{\hnum{0.1},\hnum{2.3},\hnum{4.5e10}\}$
\bigskip
$\{\num{0.1};\num{2.3};\num{4.5e10}\}$
\end{document}
但结果确实很难看,而且难以解释。最好使用分号。
答案2
首先,这是怎样的?
\documentclass{article}
\def\numX#1.#2\relax{\mbox{$#1$\small$\mathord,#2$}}
\newcommand{\num}[1]{\numX#1\relax}
\begin{document}
$\{\num{0.1}, \num{2.3}\}$
\end{document}