summaryrefslogtreecommitdiff
path: root/macros/generic/misc/nth.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/generic/misc/nth.sty')
-rw-r--r--macros/generic/misc/nth.sty56
1 files changed, 56 insertions, 0 deletions
diff --git a/macros/generic/misc/nth.sty b/macros/generic/misc/nth.sty
new file mode 100644
index 0000000000..8a96c73903
--- /dev/null
+++ b/macros/generic/misc/nth.sty
@@ -0,0 +1,56 @@
+% nth.sty version 2002/27/02 Donald Arseneau
+% Ordinal numbering style, 1st 2nd 3rd 4th 5th... 12th... 101st 102nd...
+%
+% (Public domain: take, include, extract, whatever)
+%
+% In LaTeX:
+% \usepackage[super,negative]{nth}
+% where option [super] gives superscript `th'
+% and option [negative] allows ``st, nd, rd'' suffixes on negative numbers.
+%
+% example: \renewcommand{\thesection}{\ordinal{section}}
+% or \renewcommand{\thesection}{\@ordinal\c@section}
+% or \renewcommand{\thesection}{\nth\c@section}
+%
+% In plain TeX:
+% \input nth.sty
+% use: \nth{<number>}.
+% Change formatting by redefining \nthscript and \nthtest
+
+\def\nth#1{% First print number:
+ \expandafter\nthM \number #1\relax
+ \nthscript{%
+ \ifnum#1\nthtest0 th\else % negatives are all ``th'' (depending on \nthtest)
+ \expandafter \nthSuff \expandafter 0\number\ifnum #1<0-\fi#1\delimiter
+ \fi
+ }}
+
+% Minus sign using math mode:
+\def\nthM#1{\if -#1\ifmmode-\else$-$\fi\else #1\fi}
+
+% Print suffix depending on last two digits:
+\def\nthSuff#1#2#3{%
+ \ifx \delimiter#3% #1#2 are last two digits
+ \ifnum #1=1 th% teens are always ``th''
+ \else % use appropriate suffix
+ \ifcase #2 th\or st\or nd\or rd\else th\fi
+ \fi
+ \else % continue scanning for last two digits
+ \expandafter \nthSuff \expandafter #2\expandafter #3%
+ \fi}
+
+% Formatting hook for ordinals (\let\nthscript\textsuperscript)
+\def\nthscript#1{#1}% alternate: \def\nthscript#1{$\rm^{#1}$}
+
+% Formatting hook for all negative numbers giving ``th''
+\def\nthtest{<} % alternate: \def\nthtest{=}
+
+\ifx\Alph\undefined\else
+ \def\ordinal#1{\expandafter\@ordinal\csname c@#1\endcsname}
+ \let\@ordinal\nth
+ \ProvidesPackage{nth}[2002/02/27]
+ \DeclareOption{super}{\def\nthscript{\textsuperscript}}
+ \DeclareOption{negative}{\def\nthtest{=}}
+ \ProcessOptions
+\fi
+