Ordinalzahlen in LaTeX

Alles rund um das System für Windows.


Slyrk

Ordinalzahlen in LaTeX

Beitrag von Slyrk »

Hallo zusammen

Ich weiss, dass es zum ausschreiben von Ordinalzahlen schon packages gibt, aber ich wollte das ganze selbst erstellen, um mich im Kreieren von etwas komplizierteren Makros zu üben. Ich hatte allerdings zwei Probleme. Das erste ist, dass beim ersten Aufruf von \ord immer case 0 gewählt wird, bei allen weiteren Aufrufen funktionierts richtig. Zweitens reklamiert er, ich habe ein $ vergessen und fügt eines ein, das hat dann zur Folge, dass nachstehender Text auch im mathmode steht. Hier mein code
\newcommand{\ord}[1]{
	\newcount\aux
	\aux = #1 \relax
	\ifnum\aux < 0 \relax
		\aux = -#1 \relax
	\fi
	\ifnum\aux > 13 \relax
		\newcount\bux \relax
		\bux = \aux \relax
		\divide \bux by 10 \relax
		\multiply \bux by 10 \relax
		\advance \aux by -\bux \relax
	\fi

	\ifcase\aux
		\def\nth{\text{th}}
	\or
		\def\nth{\text{st}}
	\or
		\def\nth{\text{nd}}
	\or
		\def\nth{\text{rd}}
	\else
		\def\nth{\text{th}}
	\fi
	\ensuremath{#1^{\nth}}
}
Aufrufen tu ich das ganze mit $\ord{1}$, $\ord{2}$, etc. und ich habe nirgendes das $ vergessen. Ich weiss nicht, ob so viele relaxes nötig sind :), aber ich denke sie schaden nicht...

Vielen Dank!

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2526
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Re: Ordinalzahlen in LaTeX

Beitrag von Stefan Kottwitz »

Hallo Slyrk,
Slyrk hat geschrieben:Das erste ist, dass beim ersten Aufruf von \ord immer case 0 gewählt wird
das kann ich nicht nachvollziehen, beim ersten \ord{1} wird sofort 1st ausgegeben.
Slyrk hat geschrieben:Zweitens reklamiert er, ich habe ein $ vergessen und fügt eines ein, das hat dann zur Folge, dass nachstehender Text auch im mathmode steht.
Aufrufen tu ich das ganze mit $\ord{1}$, $\ord{2}$, etc.
Es würde funktionieren, wenn Du \ord{1}, \ord{2}, etc. ohne Mathematikmodus aufrufst.

Viele Grüße,

Stefan

Slyrk

Re: Ordinalzahlen in LaTeX

Beitrag von Slyrk »

Hey!

Danke für die schnelle Antwort! Tatsächlich, wenn ich nur \ord aufrufe funktioniert beides. Allerdings habe ich noch das Problem, dass es einen linebreak macht zu beginn. Also "\ord{1} and \ord{2}" ergibt bei mir

1st and
2nd

Was müsste ich ändern, dass es im math-mode funktionieren würde? Ich denke an Fälle wie the i + 1st case. Wenn wir schon dabei sind, könnte ich aus dem Argument von \ord nur die zwei letzten characters herauslesen, sehen ob es eine zahl ist und dann die Fälle separat behandeln? So dass man eingeben könnte

\ord{i} -> ith
\ord{i+1} -> i+1st
\ord{i+12} -> i+12th

Würde die Konversion vom +1 zu 1 automatisch funktionieren? Zwei characters wären halt nötig um die Spezialfälle 11, 12 und 13 abzudecken (nicht dass ich wirklich schon mal die i+12te Spalte einer Matrix speziell benennen wollte...)

Also wenn das mit dem linebreak klappen würde, wär ich eigentlich auch schon zufrieden.

Grüsse, Slyrk

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2526
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Re: Ordinalzahlen in LaTeX

Beitrag von Stefan Kottwitz »

Slyrk hat geschrieben:Allerdings habe ich noch das Problem, dass es einen linebreak macht zu beginn.
Das wird von der Leerzeile im Makro verursacht, denn Leerzeilen stehen für einen Absatzumbruch. Wenn Du Leerraum im Quellcode für die Übersichtlichkeit haben möchtest, stelle ein % voran.

Das Entfernen der Leerzeile sollte auch das Problem des Mathemodus lösen und Du kannst $\ord{1}$ schreiben.

Stefan

Slyrk

Re: Ordinalzahlen in LaTeX

Beitrag von Slyrk »

okay, das mit dem linebreak kommt natürlich daher, dass ich zwischen \fi und \ifcase der übersicht halber einen doppelten Zeilenumbruch eingefügt habe... Das andere wäre aber immer noch interessant zu wissen :)

Grüsse, Slyrk


Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2526
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Beitrag von Stefan Kottwitz »

8)

Dann setze ich den Themen-Status mal auf "beantwortet". Wenn Du magst, melde Dich ruhig an, dann ist Dein Pseudonym reserviert und Du kannst Anhänge einfügen u.a.

Stefan

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Obwohl es hier mal wieder so heiß ist, dass ich von der Tastatur abrutsche noch der wichtige Hinweis: Du solltest niemals \newcount innerhalb einer Anweisung aufrufen! So wie das jetzt ist, wird bei jedem Aufruf von \ord ein neues Zählerregister angefordert. Ohne das Paket etex werden Dir so die Zählerregister ziemlich schnell ausgehen (mit wird nur nach und nach immer mehr Speicher verschwedet).

Entweder Du packst die ganzen Berechnungen in eine Gruppe und verwendest dann das von LaTeX für lokale Aufgaben bereit gestellte \@tempcnta oder Du forderst einmal in globalem Kontext also außerhalb der Definition von \org einen eigenen Zähler an und verwendest den dann immer.

Antworten