summaryrefslogtreecommitdiff
path: root/macros/generic/misc/nth.sty
blob: 8a96c73903d2f61521a1b8a1971b8e95381cdc0e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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