使用较小的字形来格式化小数数字

使用较小的字形来格式化小数数字

我目前正在编写一本教科书,其中我处理十进制数集。由于教科书的语言是法语,小数分隔符必须是逗号,千位分隔符必须是空格。但这样一来,读者就很难区分四个整数的集合 {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}

相关内容