Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Ordinalzahlen in LaTeX?

176 views
Skip to first unread message

Oliver Jennrich

unread,
May 22, 2000, 3:00:00 AM5/22/00
to

Hallo Groupies,

ich bin mir fast sicher, daß ich schoneinmal irgendwo ein Paket zur
ordentlichen Formatierung von (englischen) Ordinalzahlen gesehen habe,
also etwas das

\ordinal{1} zu 1\textsuperscript{st} werden läßt.

Falls es soetwas nicht gibt, wäre ich auch für Hinweise dankbar, wie
groß denn das 'st' bzw. 'th' üblicherweise gesetzt wird. Die
\textsuperscript-Lösung gefällt mir nicht wirklich, $1^\mathrm{st}$
ist besser, aber was mache ich wenn ich kein 'rm' will?


--
Oliver Jennrich JILA, University of Colorado at Boulder

Gravity. It's not just a good idea, it's the law!

Peter Wyzlic

unread,
May 22, 2000, 3:00:00 AM5/22/00
to
On 22 May 2000 15:01:01 -0600, Oliver Jennrich
<oliver....@colorado.edu> wrote:

>ich bin mir fast sicher, daß ich schoneinmal irgendwo ein Paket
>zur ordentlichen Formatierung von (englischen) Ordinalzahlen
>gesehen habe, also etwas das
>
>\ordinal{1} zu 1\textsuperscript{st} werden läßt.
>
>Falls es soetwas nicht gibt, wäre ich auch für Hinweise dankbar,
>wie groß denn das 'st' bzw. 'th' üblicherweise gesetzt wird. Die
>\textsuperscript-Lösung gefällt mir nicht wirklich,
>$1^\mathrm{st}$ ist besser, aber was mache ich wenn ich kein
>'rm' will?

Bleib beim Deutschen, da genügt ein Punkt hinter der Zahl ;).
Ernsthaft, ich kann mich entsinnen, dass beim french-Paket etwas
aehnliches vorliegt, um ein hochgestelltes -ième zu erzeugen
(2ième etc.).

Peter

--
"A great many people think they are thinking when they are merely
rearranging their prejudices." -- William James

Oliver Jennrich

unread,
May 22, 2000, 3:00:00 AM5/22/00
to
* Peter Wyzlic writes:

> On 22 May 2000 15:01:01 -0600, Oliver Jennrich
> <oliver....@colorado.edu> wrote:

>> ich bin mir fast sicher, daß ich schoneinmal irgendwo ein Paket
>> zur ordentlichen Formatierung von (englischen) Ordinalzahlen
>> gesehen habe, also etwas das
>>
>> \ordinal{1} zu 1\textsuperscript{st} werden läßt.
>>
>> Falls es soetwas nicht gibt, wäre ich auch für Hinweise dankbar,
>> wie groß denn das 'st' bzw. 'th' üblicherweise gesetzt wird. Die
>> \textsuperscript-Lösung gefällt mir nicht wirklich,
>> $1^\mathrm{st}$ ist besser, aber was mache ich wenn ich kein
>> 'rm' will?

> Bleib beim Deutschen, da genügt ein Punkt hinter der Zahl ;).

<Loriot>
Ach!
</Loriot>

> Ernsthaft, ich kann mich entsinnen, dass beim french-Paket etwas
> aehnliches vorliegt, um ein hochgestelltes -ième zu erzeugen
> (2ième etc.).

Hmhm. Ich werde mal schauen. Irgendwo in den Tiefen von Babel, oder?

Heiko Bauke

unread,
May 23, 2000, 3:00:00 AM5/23/00
to
Ave,

Oliver Jennrich wrote:
> ich bin mir fast sicher, daß ich schoneinmal irgendwo ein Paket zur
> ordentlichen Formatierung von (englischen) Ordinalzahlen gesehen habe,
> also etwas das
>
> \ordinal{1} zu 1\textsuperscript{st} werden läßt.

als nullte Näherung kann vielleicht

\documentclass[a4paper]{article}

\makeatletter
\def\engord#1{\expandafter\@engord\csname c@#1\endcsname}
\def\@engord#1{%
\ifcase#1\or
\mbox{1\textsuperscript{st}}\or
\mbox{2\textsuperscript{nd}}\or
\mbox{3\textsuperscript{rd}}\or
\mbox{4\textsuperscript{th}}\or
\mbox{5\textsuperscript{th}}
\fi}
\makeatother
\newcounter{count}
%\newcommand{\thecount}{{\engord{count}}}
% geht nicht, warum?
\def\thecount{{\engord{count}}}

\begin{document}

\stepcounter{count}\thecount~
\stepcounter{count}\thecount~
\stepcounter{count}\thecount~
\stepcounter{count}\thecount~
\stepcounter{count}\thecount~

\end{document}

herhalten. Bei \alph{} in latex.ltx abgeschaut.


have fun

Heiko


--
-- Liest man die Grabinschriften, dann liegt unser Heil nur in
-- Wiederbelebung der Toten und Beerdigung der Lebenden.
-- (Paul Eldridge)
-- Heiko Bauke @ http://www.uni-magdeburg.de/bauke

Ingo Klöckl

unread,
May 23, 2000, 3:00:00 AM5/23/00
to
Servus,


Heiko Bauke <Heiko...@Student.UNI-Magdeburg.DE> wrote:
[...]


>\newcounter{count}
>%\newcommand{\thecount}{{\engord{count}}}
>% geht nicht, warum?
>\def\thecount{{\engord{count}}}


durch den Befehl \newcounter{count} wird AUTOMATISCH das
passende Makro \thecount angelegt, mit arabischen Ziffern als
Defaultstil.
Benutzt daher


\renewcommand{\thecount}{{\engord{count}}}


Tschüss *Ingo*
--
_____________________________________________________________
NewsGroups Suchen, lesen, schreiben mit http://netnews.web.de

Oliver Jennrich

unread,
May 23, 2000, 3:00:00 AM5/23/00
to
* Heiko Bauke writes:

> Ave,
> Oliver Jennrich wrote:
>> ich bin mir fast sicher, daß ich schoneinmal irgendwo ein Paket zur
>> ordentlichen Formatierung von (englischen) Ordinalzahlen gesehen habe,
>> also etwas das
>>
>> \ordinal{1} zu 1\textsuperscript{st} werden läßt.

> als nullte Näherung kann vielleicht

[...]
Darauf aufbauend:

\documentclass{article}

\usepackage{ifthen}
\usepackage{xspace}

\newcommand{\up}[1]{\textsuperscript{#1}}

\makeatletter
\newcount\@Ord
\newcount\@OrdR


\def\@engord#1{%
\ifcase#1\or

\mbox{1\up{st}}\or
\mbox{2\up{nd}}\or
\mbox{3\up{rd}}\or
\mbox{4\up{th}}\or
\mbox{5\up{th}}\or
\mbox{6\up{th}}\or
\mbox{7\up{th}}\or
\mbox{8\up{th}}\or
\mbox{9\up{th}}\or
\mbox{10\up{th}}\or
\mbox{11\up{th}}\or
\mbox{12\up{th}}%
\fi}
\newcommand{\Ordinal}[1]{%
\ifthenelse{\number#1<13}%
{\@engord{#1}}% THEN
{%ELSE
\@Ord=\number#1
\@OrdR=\number#1
\divide\@Ord by 100
\multiply\@Ord by 100
\advance\@OrdR by -\@Ord
\divide\@Ord by 100
\ifthenelse{\number\@OrdR<13}%
{%THEN
\the\@Ord\@engord{\@OrdR}}%
{%ELSE
\@Ord=\number#1
\@OrdR=\number#1
\divide\@Ord by 10
\multiply\@Ord by 10
\advance\@OrdR by -\@Ord
\divide\@Ord by 10
\the\@Ord\@engord{\@OrdR}}}\xspace}
\makeatother

\begin{document}

This is the \Ordinal{1} sentence. Will this work on \Ordinal{23} of
May? And what about the \Ordinal{111} cavalerie regiment?
\end{document}

Heiko Oberdiek

unread,
May 23, 2000, 3:00:00 AM5/23/00
to
Oliver Jennrich <oliver....@colorado.edu> wrote:

>* Heiko Bauke writes:
>
>> Ave,
>> Oliver Jennrich wrote:
>>> ich bin mir fast sicher, daß ich schoneinmal irgendwo ein Paket zur
>>> ordentlichen Formatierung von (englischen) Ordinalzahlen gesehen habe,

Bei so kleinen Paketen ist das Suchen wahrscheinlich aufwaendiger
als die Radneuerfindung ;-)

>[...]
> \ifthenelse{\number#1<13}%
Sollte wohl "<14" lauten


> \ifthenelse{\number\@OrdR<13}%

Ebenso "<14".
Sonst gibt es ein "13rd".

Als Fingeruebung eine weitere Radneuerfindung, dafuer
aber eine expandible Implementierung:

%%% cut %%% engord.sty %%% cut %%%
% File: engord.sty
% Version: 2000/05/23 v1.0
% Author: Heiko Oberdiek <ober...@ruf.uni-freiburg.de>
%
% Function: Converts numbers to english ordinal numbers.
%
% Copyright: Copyright (C) 2000 Heiko Oberdiek.
%
% This program may be distributed and/or modified under
% the conditions of the LaTeX Project Public License,
% either version 1.2 of this license or (at your option)
% any later version. The latest version of this license
% is in
% http://www.latex-project.org/lppl.txt
% and version 1.2 or later is part of all distributions
% of LaTeX version 1999/12/01 or later.
%
% Use:
% * \engord{<LaTeX counter name>}
% It prints the value of the LaTeX counter as English
% ordinal number. It can be used so as \arabic, \roman,
% or \alph.
% * \engordnumber{<any TeX number>}
% It prints the number as English ordinal number.
% * \engordletters#1
% This command formats the English ordinal letters
% after the number. It defaults to \textsuperscript.
% * \engorderror#1
% It can be redefined, if an other error handling is
% wanted. The argument is a negative number or zero.
%
% Examples:
% * \engordnumber{1} ==> 1st
% \engordnumber{12} ==> 12th
% \engordnumber{123} ==> 123rd
% \engord{page} ==> 1st (if page has the value of one)
% * The default output of a counter can be redefined:
% \newcounter{mycounter}
% \renewcommand{\theengcounter}{\engord{mycounter}}
% * Because the implementation of \engord and \engordnumber
% is kept expandable, these commands can be used to make
% command names with an appropriate definition of
% \engordletters:
% \renewcommand*{\engordletters}[#1]{#1}
% \@namedef{My\engordnumber{3}Command}{...}
% This generates the command name `\My4rdCommand'.
% * If the letters should not be raised, \engordletters
% can be redefined as follows:
% \renewcommand*{\engordletters}[1]{#1}
%
% History:
% 2000/05/23 v1.0: first public release
%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{engord}%
[2000/05/23 v1.0 English ordinal numbers (HO)]

% \engordletters is called with one argument, the english
% ord letters, and contains the code to format them. It
% defaults to \textsuperscript:
\providecommand{\ordletters}{\textsuperscript}

% \engorderror is called, if the number is zero
% or negative.
\providecommand*{\engorderror}[1]{%
#1\ordletters{!ERROR!}%
\PackageWarning{engord}{%
`#1' is not an ordinal number%
}%
}

% \engord expects a LaTeX counter name as argument and
% calls \engordnumber
\newcommand*{\engord}[1]{%
\engordnumber{\value{#1}}%
}

% \engordnumber is the user command to print a number as
% english ordinal number. The argument can be any
% TeX number like explicit numbers, register values, ...
%
% In a safe way it converts the TeX number argument
% into a form that only consists of decimal digits
\newcommand*{\engordnumber}[1]{%
\expandafter\EO@number\expandafter{\number#1}%
}

% \EO@number expects a number with decimal digits as
% argument and looks at the size of the number and
% the count of the digits:
\def\EO@number#1{%
\ifnum#1<1 % handle the error case
\engorderror{#1}%
\else
\ifnum#1<21
\EO@ord{#1}%
\else
\ifnum#1<100
\EO@twodigits#1%
\else
\@ReturnAfterFi{%
\EO@reverse#1\@nil{}\EO@afterreverse
}%
\fi
\fi
\fi
}

% An internal help macro to prevent a too deep \if nesting.
\long\def\@ReturnAfterFi#1\fi{\fi#1}

% \EO@ord prints the number with ord letters
% #1: decimal digits, #1 < 21
\def\EO@ord#1{%
#1%
\expandafter\ordletters
\ifcase#1\or
{st}\or
{nd}\or
{rd}\else
{th}%
\fi
}

% \EO@twodigits expects a number with two digits,
% 20 < number < 100
\def\EO@twodigits#1#2{%
#1\EO@ord{#2}%
}

% \EO@reverse reverses the digits of the number
% #1: next digit
% #2: rest of the digits
% #3: already reversed digits
% #4: next command to call with the reversed number
% as argument
\def\EO@reverse#1#2\@nil#3#4{%
\ifx\\#2\\%
#4{#1#3}%
\else
\@ReturnAfterFi{%
\EO@reverse#2\@nil{#1#3}{#4}%
}%
\fi
}

% \EO@afterreverse calls \EO@reverseback so that
% \EO@reverseback can inspect the digits of the number
\def\EO@afterreverse#1{%
\EO@reverseback#1\@nil
}

% \EO@reverseback reverses the reversion
% #1: the last digit of the number
% #2: the second last digit of the number
% #3: first digits of the number in reversed order,
% it is not empty, because \EO@reverseback is
% only called with numbers > 100.
\def\EO@reverseback#1#2#3\@nil{%
\EO@reverse#3\@nil{}\@firstofone
\ifnum#2#1<21
\EO@ord{#2#1}%
\else
#2\EO@ord{#1}%
\fi
}

\endinput
%%% cut %%% engord.sty %%% cut %%%

Viele Gruesse
Heiko <ober...@ruf.uni-freiburg.de>

Oliver Jennrich

unread,
May 24, 2000, 3:00:00 AM5/24/00
to
* Heiko Oberdiek writes:

> Oliver Jennrich <oliver....@colorado.edu> wrote:
>> * Heiko Bauke writes:
>>
>>> Ave,
>>> Oliver Jennrich wrote:
>>>> ich bin mir fast sicher, daß ich schoneinmal irgendwo ein Paket zur
>>>> ordentlichen Formatierung von (englischen) Ordinalzahlen gesehen habe,

> Bei so kleinen Paketen ist das Suchen wahrscheinlich aufwaendiger
> als die Radneuerfindung ;-)

>> [...]
>> \ifthenelse{\number#1<13}%
> Sollte wohl "<14" lauten
>> \ifthenelse{\number\@OrdR<13}%
> Ebenso "<14".
> Sonst gibt es ein "13rd".

Da geht es Dir wie meiner Frau ;-) Madame hat den Fehlerinstinkt,
tippt als erstes \Ordinal{13} ein und grinst hämisch. Ja, es muß 14
heißen.

0 new messages