该fmtcount
软件包提供了\ordinalnum{⟨number⟩}
命令,其后跟显示⟨number⟩
内容,后缀取决于当前(babel
或polyglossia
)语言。例如,在英语中:
\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}