如何获取 fmtcount ordinal(num) 后缀?

如何获取 fmtcount ordinal(num) 后缀?

fmtcount软件包提供了\ordinalnum{⟨number⟩}命令,其后跟显示⟨number⟩内容,后缀取决于当前(babelpolyglossia)语言。例如,在英语中:

  • \ordinalnum{1}给出“1 st ”,
  • \ordinalnum{2}给出“2 nd ”,
  • \ordinalnum{3}给出“3 rd ”,
  • \ordinalnum{4}给出“4 th ”,
  • ...
  • \ordinalnum{20}给出“20
  • \ordinalnum{21}给出“21 st ”,
  • \ordinalnum{22}给出“22”,
  • \ordinalnum{23}给出“23”,
  • \ordinalnum{24}给出“24”,
  • ETC。

我想要一个命令,比如说\foo{⟨number⟩},只打印 的后缀\ordinalnum{⟨number⟩}。例如在英语中:

  • \foo{1}应该给出“ st ”,
  • \foo{2}应该给出“ nd ”,
  • \foo{3}应该给出“ rd ”,
  • \foo{4}应该给出“ th ”,
  • ...
  • \foo{20}应该给出“ th ”,
  • \foo{21}应该给出“ st ”,
  • \foo{22}应该给出“ nd ”,
  • \foo{23}应该给出“ rd ”,
  • \foo{24}应该给出“ th ”,
  • ETC。

答案1

这是在框级别上半成功的幼稚尝试。人们看到这ngerman会导致问题,因为它不使用框。我确信使用 lualatex,您可以通过将 的节点列表17与 的节点列表进行比较来做一些事情\ordinalnum{17}

\documentclass[a4paper, 12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[margin=1cm]{geometry}
\def\languages{french,danish,english,ngerman,italian}

\usepackage[\languages]{babel}
\usepackage{fmtcount}


\newsavebox\Denis
\makeatletter

\def\DenisQuest #1{{%\showboxdepth10 \showboxbreadth10
     \setbox\z@\vbox{\ordinalnum{#1}\global\setbox\Denis\lastbox}}%
     \unhbox\Denis
}

\makeatother

\usepackage{xinttools}% only for the loop for the example
\usepackage{multicol}

\begin{document}\thispagestyle{empty}

\parindent 0pt

\xintFor #1 in {\languages} \do {%
\hrulefill #1 \hrulefill
\begin{multicols}{8}
  \begin{otherlanguage}{#1}
     \xintFor* ##1 in {\xintSeq {0}{31}} \do
      {\ordinalnum{##1} $\longmapsto$ \DenisQuest{##1}\par }%
  \end{otherlanguage}
\end{multicols}}


\end{document}

在此处输入图片描述

相关内容