前の月 / 次の月 / 最新

hiChangeLog / 2009-12

2009-12
SMTWTFS
12345
6789101112
13141516171819
20212223242526
2728293031

2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12

2009-12-14 Mon

TeXで序数をらくちんに書く [TeX]

1st, 2nd とかの序数をTeXでらくちんに書くためにはどうすればよいか。
自前でカウンタ作ってやってもいいが、微妙に面倒。
http://mechanics.civil.tohoku.ac.jp/~bear/bear-collections/style-files/style-fj.html にある ordinal.sty を使えばよい。内容をそのまま転載する。

% From: asnd@reg.triumf.ca (Donald Arseneau)
% Newsgroups: comp.text.tex
% Subject: Re: Ordinal Numbers in LaTeX
% Date: 26 May 1993 15:04 PST
% Keywords: ordinals, tex, latex
%
%  Takes an integer and returns the proper suffix for an 
%  ordinal number: \nth{1}  -> 1st
%                  \nth{23} -> 23rd   etc.
%
\def\nth#1{\begingroup % [call parameter (#1) "n"]
 \@tempcnta#1\relax \the\@tempcnta % emit n
 \ifnum\@tempcnta<\z@ \@tempcnta\z@\fi % negatives all get th
 \@tempcntb\@tempcnta \divide\@tempcntb100 % hundreds
 \multiply\@tempcntb100 \advance\@tempcnta-\@tempcntb % n mod 100
 \ifnum\@tempcnta<20 \ifnum\@tempcnta>9 \@tempcnta\z@\fi\fi % teens get th
 \@tempcntb\@tempcnta \divide\@tempcntb10 % tens
 \multiply\@tempcntb10 \advance\@tempcnta-\@tempcntb % n mod 10
 \ifcase\@tempcnta th\or st\or nd\or rd\else th\fi % emit suffix
 \endgroup}
%
% Example of use:
% \def\labelenumi{\theenumi.}
% \def\theenumi{\nth{enumi}}
% to make enumerated lists come out as 1st, 2nd, 3rd, 4th, ... 123rd...
使い方。
\documentclass{article}
\usepackage{ordinalno}
\begin{document}
\nth{1} \nth{2} \nth{3} \nth{4} \nth{5} \nth{6} \nth{7}
\end{document}
スタイルファイルにするのが面倒ならどうするか。定義部分をそのままプリアンブルに書いてもうまくいかない。以下のように \makeatletter, \makeatother で括る。
\documentclass{article}
\makeatletter 
\def\nth#1{\begingroup % [call parameter (#1) "n"]
 \@tempcnta#1\relax \the\@tempcnta % emit n
 \ifnum\@tempcnta<\z@ \@tempcnta\z@\fi % negatives all get th
 \@tempcntb\@tempcnta \divide\@tempcntb100 % hundreds
 \multiply\@tempcntb100 \advance\@tempcnta-\@tempcntb % n mod 100
 \ifnum\@tempcnta<20 \ifnum\@tempcnta>9 \@tempcnta\z@\fi\fi % teens get th
 \@tempcntb\@tempcnta \divide\@tempcntb10 % tens
 \multiply\@tempcntb10 \advance\@tempcnta-\@tempcntb % n mod 10
 \ifcase\@tempcnta th\or st\or nd\or rd\else th\fi % emit suffix
 \endgroup}
\makeatother 
\begin{document}
\nth{1} \nth{2} \nth{3} \nth{4} \nth{5} \nth{6} \nth{7}
\end{document}

2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2010-03-08 22:21