如何在 siunitx 中写 1st 2nd 3rd ...

如何在 siunitx 中写 1st 2nd 3rd ...

标题说明了一切 ;-)

我希望能够

\SI[certain-number]{18}{\winner}

或类似的东西

并获得“第 18 位获胜者”作为回报

编辑:添加用例场景

我想我应该解释一下为什么有人会想这样做,所以我将这部分添加到我的问题中。

如果有人想解释时间中的位置或事件(我猜是不同类型的位置),最好将有序数字与单位放在一起。这里是一些例子:

首先是Mico的回答:

“他们兴奋地看着,当老师加大电流时,当电流超过刻度盘上的第 22 个 A 标记时,电路开始冒烟。”

或者:

“在 22 公里的比赛中,很多选手在第 15 公里线后就放弃了”

我不确定这些例子是否适用于英语,但它们适用于我的母语,所以我认为 siunitx 不支持它很奇怪。

谢谢您的回答。

答案1

(首先要说明一下:我必须承认,我不知道“18th A”或“220th V”——其中“A”和“V”自然代表安培和伏特——是什么意思。)

您可以通过(a)加载fmtcountsiunitx 包并(b)定义专用宏来实现您的目标,如下所示:

\newcommand{\ordunit}[2]{\ordinalnum{#1}\,\si{#2}}

然后,在正文中写入\ordunit{18}{\ampere}\ordunit{220}{\volt}

完整的 MWE:

\documentclass{article}
\usepackage{fmtcount,siunitx}
\newcommand{\ordunit}[2]{\ordinalnum{#1}\,\si{#2}}
\begin{document}
\ordunit{18}{\ampere}, \ordunit{220}{\volt}, \ordunit{21}{loser}
\end{document}

答案2

为什么不这样做fmtcount?如果您需要在序数和后面的“单位”之间留出空格,您可以定义一个专用命令:

\documentclass[english]{article}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{fmtcount}
\newcommand\winner[1]{\ordinalnum{#1}\,winner}

\begin{document}

\ordinalnum{18} winner
\bigskip

\winner{18}

\fmtcountsetoptions{fmtord=level}
\bigskip
\ordinalnum{21} loser

\end{document}

在此处输入图片描述

相关内容