The isodate package^{∗}

Harald Harders

                 h.harders@tu-bs.de

File Date 2003-07-29, Printed 2003-07-29

Abstract

This package provides commands to switch between different date formats (standard, ISO, numeric, L^{A}TEX package). They are used by the \today command, by the \printdate and \printdateTeX commands that print any date, and by the \daterange command that prints a date range. At the moment this package supports German (old and new rules, Austrian), British English, US English, French, Danish, Swedish, and Norwegian.

The idea for this package was taken from the akletter class.

Contents

1 Commands 2 1.1 Switching the date format . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Printing today’s date . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Printing any date . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 Printing date ranges . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.5 Changing the ISO format . . . . . . . . . . . . . . . . . . . . . . . 4 1.6 Changing the short original format . . . . . . . . . . . . . . . . . . 4 1.7 Changing the German format . . . . . . . . . . . . . . . . . . . . . 5

2 Calling the package 5

3 Add new languages to the package 6

4 Solvable problems 6 4.1 Redefinition of language dependent names . . . . . . . . . . . . . . 6

A Licence 7

B Known errors 7

C Planned features and changes 7 D The implementation 8

∗This file has version 2.07 last revised 2003-07-29, documentation dated 2002-05-06.

D.1 Package file isodate.sty . . . . . . . . . . . . . . . . . . . . . . . . . 8 D.2 Language definition file danish.idf . . . . . . . . . . . . . . . . . . . 14 D.3 Language definition file english.idf . . . . . . . . . . . . . . . . . . 17 D.4 Language definition file french.idf . . . . . . . . . . . . . . . . . . . 22 D.5 Language definition file german.idf . . . . . . . . . . . . . . . . . . 24 D.6 Language definition file norsk.idf . . . . . . . . . . . . . . . . . . . 27 D.7 Language definition file swedish.idf . . . . . . . . . . . . . . . . . . 30

Acknowledgements

First of all I have to thank Axel Kielhorn who wrote the package akletter which inspired me to write isodate. The help of Heiko Oberdiek was necessary to handle characters in substrings which resulted in the package substr. David Sanderson found the bug which disabled isodate to work without babel. He also helped me to improve the documentation and sent me a link to the ISO 8601 norm [1]. Svend Tollak Munkejord has added the Norwegian language, Christian Schlauer has added Swedish.

Requirements

The package isodate needs the package substr.sty which can be obtained from

CTAN:macros/latex/contrib/supported/substr/.

1 Commands

1.1 Switching the date format

This package provides five commands to switch the output format of all commands that print dates (described later):

\isodate  date format described in ISO 8601 and DIN 5008 [1]

(yyyy-mm-dd)

\numdate  numeric date format with four digits of the year
\shortdate  short numeric date format with two digits of the year
\TeXdate  date format used for version description of packages

(yyyy/mm/dd)

\origdate  original L^{A}TEX format
\shortorigdate original L^{A}TEX format with two instead of four digits of

the year

\isodate
\numdate
\shortdate
\TeXdate
\origdate
\shortorigdate

The numeric and short numeric format change their behaviour depending on the current language:

German, nGerman dd.\,mm.~yyyy resp. dd.\,mm.\,yy
US English  mm/dd/yyyy  resp. mm/dd/yy

other languages  dd/mm/yyyy  resp. dd/mm/yy

This package supports German (old and new rules, Austrian), US English, French, Danish, Swedish, and Norwegian. Switching the language by using \selectlanguage does not switch back to the original date format. So the current date format stays active when changing the language.

The change of the date format works locally. So it is possible to change it locally inside a group. E.g.

\today, {\origdate\today}, \today

leads to “2003-07-29, 29th July 2003, 2003-07-29”.

1.2 Printing today’s date

\today As usual the command \today prints the date of today. Its appearance is influenced by the current date format

1.3 Printing any date

\printdate The command \printdate{#1} prints any date in the current format. The argument may be a date in German, British English, or ISO format, e.g.

\printdate{24.12.2000}
\printdate{24/12/2000}
\printdate{2000-12-24}

\printdateTeX The command \printdateTeX{#1} prints any date in the actual format. The argument must be in the L^{A}TEX format yyyy/mm/dd, e.g.

\printdateTeX{2000/12/24}

This command is useful for printing version information stored in a macro. For example the version of this documentation is stored in the macro \docdate (“2002/05/06”). To print it with the actual date format you can use the command \printdateTeX{\docdate} which leads to e.g. “2002-05-06” or “6th May 2002”.

1.4 Printing date ranges

\daterange The command \daterange{#1}{#2} prints a date range in the current format. The arguments may be a date in German, British English, or ISO format (see above). But there is a limitation: Both arguments must have the same input format.

Depending on the language and date format this commands lets out some of the data. The simplest way to understand it is to watch some examples:

{\isodate

\daterange{1999-05-03}{1999-05-31} ⟶ 1999-05-03 to 31
\daterange{1999-05-03}{1999-11-03} ⟶ 1999-05-03 to 11-03
\daterange{1999-05-03}{2000-04-07} ⟶ 1999-05-03 to 2000-04-07
}
{\origdate
\daterange{1999-05-03}{1999-05-31} ⟶ 3rd to 31st May 1999
\daterange{1999-05-03}{1999-11-03} ⟶ 3rd May to 3rd November 1999
\daterange{1999-05-03}{2000-04-07} ⟶ 3rd May 1999 to 7th April 2000
}

1.5 Changing the ISO format

\isodash The ISO norm says that the date format is “yyyy-mm-dd” or “yyyymmdd” [1]. By default I use the hyphen “-” as separator. You can change this using the \isodash^{1} command, e.g.

\printdate{24/12/2000},
\isodash{--}%
\printdate{24/12/2000},
\isodash{}%
\printdate{24/12/2000}

leads to “2000-12-24, 2000–12–24, 20001224”. Or for example

\isodash{$\cdot$}
\printdate{24/12/2000}

leads to “2000·12·24”.

1.6 Changing the short original format

\shortyearsign

The short original format normally prints the year with two digits, e.g. “19th May 01”. Some people want to add an additional sign before the year, e.g. “19th May ’01”. This can be achieved by using the command \shortyearsign, e.g.

\printdate{24/12/2000},
\shortyearsign{'}%
\printdate{24/12/2000}

leads to “24 december 00, 24 december ’00” in English.

This only effects the shortorig format. The short numerical format stays unchanged.

1The name “isodash” is a little bit confusing and was chosen due to my limited knowledge in English. It should be named “isoseparator” or “isosep”. But for compatiblity reasons I will not change it.

1.7 Changing the German format

The spacings for the numerical formats in the German language (24. 12. 2000 resp.

24. 12. 00) were taken from the Duden [2] and are the defaults when using one of the German derivatives. Some people want to use different spacings. Thus from

\daymonthsepgerman version 2.03 on it is possible to change them. You can change the spacing between \monthyearsepgerman the day and the month using the command \daymonthsepgerman. Using the

command \monthyearsepgerman you can change the spacing between the month and the year for the long and the short format, e.g.

\daymonthsepgerman{\quad}%
\monthyearsepgerman{\qquad}{\quad}%
{\numdate\printdate{24.12.2000}}, {\shortdate\printdate{24.12.2000}}

leads to “24. 12. 2000, 24. 12. 00”.

2 Calling the package

The package is called using the \usepackage command:

\usepackage[option]{isodate}.

The possible package options can be seen in table 1.

Table 1: Package options

option  function
iso  start with ISO date format
num  start with numeric date format with 4 digits of the year
short  start with numeric date format with 2 digits of the year
TeX  start with L^{A}TEX numeric date format (yyyy/mm/dd)
orig  start with normal L^{A}TEX date format (default^{2})
shortorig start with short normal L^{A}TEX date format (2 digits)
american support American English date format
austrian support Austrian date format
danish  support Danish date format
english  support British English date format
french  support French date format
german  support German date format
naustrian support new Austrian date format
ngerman  support new German date format
norsk  support Norwegian date format
norwegian support Norwegian date format
swedish  support Swedish date format

Be aware that at least one language option must be set when calling isodate. The last language in the option list is the default language.

The package isodate works well together with babel.sty, german.sty, or ngerman.sty. Maybe it also works together with other language packages like e.g. french.sty, but this has not been tested. It does not matter if isodate is loaded before or after the used language package.

It is also possible to use isodate without one of the language packages. Then it is not possible to switch between languages using the \selectlanguage command.^{3} Then the default language is the last one in the option list. If an error occurs when using isodate without one of the packages babel.sty, german.sty, and ngerman.sty please run tstlang.tex through latex and send the file tstlang.log

to the address h.harders@tu-bs.de.

If using isodate together with babel it can be useful to put the language options as global options into the optional parameters of the \documentclass command. Then automatically the available languages are the same for the text and the dates, and the default language is also the same. For example:

\documentclass[english,german]{article}
\usepackage{babel}
\usepackage[num]{isodate}

3 Add new languages to the package

The easiest way to add new languages to the package is to copy one of the simple language files danish.idf or french.idf to the new language name, e.g. plattdeutsch.idf, and change it as necessary.

This new file can be used without changing isodate.sty if you use its name explicitly in the optional parameter of the \usepackage command. If you have added support for a new language please mail me.

4 Solvable problems

4.1 Redefinition of language dependent names

If someone wants to change one of the language dependent names (e.g. \contentsname, \figurename, …) many people just write (e.g. in the language ngerman)

\renewcommand{\contentsname}{Inhalt}

in the preamble of the document. If they are using german.sty, ngerman.sty, or no language package (and not isodate.sty) this approach works. But when using babel.sty and/or isodate.sty the default (“Inhaltsverzeichnis”) results.

3Yes, there is a way to change the date language, but it is a little bit tricky:

\makeatletter \def\iso@languagename{german}% \dategerman% \makeatother

This is due to the fact that these packages call the command \selectlanguage

at the \begin{document}.

Depending on the used package different solutions have to be used. Using babel.sty the redefinition of the name has to be added to the language

extras:

\addto{\extrasngerman}{\renewcommand{\contentsname}{Inhalt}}

Using german.sty or ngerman.sty this approach does not work. Instead, the \selectlanguage command has to be redefined. First, the original command has to be copied via the \let command. Then the \selectcommand is redefined using the original command:

\let\origselectlanguage=\selectlanguage
\def\selectlanguage#1{\origselectlanguage{#1}%
\iflanguage{ngerman}{\renewcommand{\contentsname}{Inhalt}}{%
\iflanguage{german}{\renewcommand{\contentsname}{Inhalt}}{}}}
\selectlanguage{ngerman}

These commands should be placed shortly before the \begin{document} command.

A Licence

Copyright 2000–2003 Harald Harders

This program can be redistributed and/or modified under the terms of the LaTeX Project Public License Distributed from CTAN archives in directory macros/latex/base/lppl.txt; either version 1 of the License, or any later version.

B Known errors

• The \printdate and \printdateTeX commands are not very good in checking the argument for correct syntax.

• The language definition files french.idf and german.idf are not yet commented.

• Isodate and draftcopy do not work together.

C Planned features and changes

• Of course eliminate the errors.

• Add other languages. Please help me with this topic. I don’t know the date formats in other languages.

• Add a command that prints only the month and the year of a date.

References

[1] International Standard: ISO 8601. http://www.iso.ch/markete/8601.pdf, 1988-06-15.

[2] DUDEN Band 1. Die deutsche Rechtschreibung. 21. Auflage, Dudenverlag, Mannheim, Germany, 1996.

D The implementation

D.1 Package file isodate.sty

Heading of the package:

 1 \NeedsTeXFormat{LaTeX2e}
 2 \ProvidesPackage{isodate}[\filedate\space v\fileversion
 3 Change the output format of dates (HH)]
 4 \RequirePackage{ifthen}
 5 \RequirePackage{calc}
 6 \IfFileExists{substr.sty}{\RequirePackage{substr}%
 7 }{\PackageError{isodate.sty}{Package file substr.sty not found}
 8 {This version of isodate.sty needs the package substr.sty.^^J%
 9  You can download it from
10  CTAN:/macros/latex/contrib/supported/substr/^^J%
11  E.g. one CTAN node is ftp.dante.de.
12  Install substr.sty into your TeX tree.}}

Declare the options for the default date format.

13 \DeclareOption{iso}{\AtEndOfPackage{\isodate}}
14 \DeclareOption{num}{\AtEndOfPackage{\numdate}}
15 \DeclareOption{short}{\AtEndOfPackage{\shortdate}}
16 \DeclareOption{TeX}{\AtEndOfPackage{\TeXdate}}
17 \DeclareOption{orig}{\AtEndOfPackage{\origdate}}
18 \DeclareOption{shortorig}{\AtEndOfPackage{\shortorigdate}}

Declare the options for language support.

19 \DeclareOption{austrian}{\input{german.idf}}
20 \DeclareOption{english}{\input{english.idf}}
21 \DeclareOption{german}{\input{german.idf}}
22 \DeclareOption{american}{\input{english.idf}}
23 \DeclareOption{naustrian}{\input{german.idf}}
24 \DeclareOption{ngerman}{\input{german.idf}}
25 \DeclareOption{UKenglish}{\input{english.idf}}
26 \DeclareOption{USenglish}{\input{english.idf}}
27 \DeclareOption{danish}{\input{danish.idf}}
28 \DeclareOption{norsk}{\input{norsk.idf}}
29 \DeclareOption{norwegian}{\input{norsk.idf}}
30 \DeclareOption{french}{\input{french.idf}}

Make it possible to load language definition files that are not known by this package.

31 \DeclareOption*{%
32 \InputIfFileExists{\CurrentOption.idf}{}{%
33  \PackageError{isodate}{%
34  Isodate definition file \CurrentOption.idf not found}{%
35  Maybe you misspelled the language option?}}%

36 }

Set default option to orig.

37 \ExecuteOptions{orig}

Process the options.

38 \ProcessOptions*

Handle the case that no language was given. Throw an error message. Each language definition file *.idf must contain a line

\let\iso@languageloaded\active

that defines the command \iso@languageloaded.

39 \ifx\iso@languageloaded\@undefined
40 \PackageError{isodate}{%
41  You haven't specified a language option}{%
42  You need to specify a language, either as a global
43  option\MessageBreak
44  or as an optional argument to the \string\usepackage\space
45  command.\MessageBreak
46  If you have used the old isodate package (version <=1.06) you can
47  change the\MessageBreak
48  usepackage command to \protect\usepackage{isodate}.\MessageBreak
49  You shouldn't try to proceed from here, type x to quit.}
50 \fi

\printnumber Prints a number. If the optional parameter is used the number has two digits and

it is filled by “0”.

   Examples: \printnumber{4} ⟶ 4, \printnumber[g]{4} ⟶ 04.
51 \newcommand{\printnumber}[2][\@empty]{%
52 \ifthenelse{\equal{#1}{\@empty}}{}{%
53  \ifthenelse{\number#2<10}{0}{}}\number#2}%

\iso@yeartwo Prints the argument of the command with two digits.

   Example: \iso@yeartwo{1873} ⟶ 73.
54 \newcounter{iso@yeartwo}%
55 \newcommand{\iso@yeartwo}[1]{%
56 \setcounter{iso@yeartwo}{\number#1}%
57 \whiledo{\theiso@yeartwo>99}{%
58  \setcounter{iso@yeartwo}{\theiso@yeartwo-100}}{}%
59 \ifthenelse{\number\theiso@yeartwo<10}{0}{}\theiso@yeartwo}%

\iso@dateformat In this command the current active date format ist stored. Possible values are:

numeric, short, iso, orig, shortorig, TeX.
60 \def\iso@dateformat{numeric}

\numdate Switches to long numerical date format.

61 \DeclareRobustCommand*{\numdate}{\def\iso@dateformat{numeric}}%

\shortdate Switches to short numerical date format.

62 \DeclareRobustCommand*{\shortdate}{\def\iso@dateformat{short}}%

\isodate Switches to ISO date format.

63 \DeclareRobustCommand*{\isodate}{\def\iso@dateformat{iso}}%

\origdate Switches to the original date format.

64 \DeclareRobustCommand*{\origdate}{\def\iso@dateformat{orig}}%

\shortorigdate Switches to the short original date format.

65 \DeclareRobustCommand*{\shortorigdate}{\def\iso@dateformat{shortorig}}%

\TeXdate Switches to L^{A}TEX date format.

66 \DeclareRobustCommand*{\TeXdate}{\def\iso@dateformat{TeX}}%

\isodash Changes the dash in the ISO date format. The default is “-”.

67 \def\iso@isodash{-}%
68 \DeclareRobustCommand*{\isodash}[1]{\def\iso@isodash{#1}}%

Define the sign that is printed before a two digit year in the short original format. Default is nothing.

\shortyearsign
69 \def\iso@twodigitsign{}
70 \DeclareRobustCommand*{\shortyearsign}[1]{\def\iso@twodigitsign{#1}}%

\isorangesign Defines the sign or word that is printed between the two dates in a date range. E.g. in English the default is “ to ”.

71 \def\iso@rangesign{\csname iso@rangesign@\iso@languagename\endcsname}%
72 \DeclareRobustCommand*{\isorangesign}[1]{\def\iso@rangesign{#1}}%

\iso@printdate Defines the command iso@printdate which takes three arguments (year, month, day) and prints the date by using the \today command.

73 \newcommand{\iso@printdate}[3]{%
74 \begingroup%
75 \def\year{#1}%
76 \def\month{#2}%
77 \def\day{#3}%
78 \today%
79 \endgroup%

80 }

\printdate Prints a date that is given as one argument in one of these formats: yyyy-mm-dd,

dd/mm/yyyy, dd.mm.yyyy.
81 \DeclareRobustCommand*{\printdate}[1]{%

Define \iso@date command to expand the argument #1.

82 \edef\iso@date{#1}%

Count appearances of “/”, “-”, and “.” in the argument.

83 \SubStringsToCounter{iso@slash}{/}{\iso@date}%
84 \SubStringsToCounter{iso@minus}{-}{\iso@date}%
85 \SubStringsToCounter{iso@dot}{.}{\iso@date}%

If number of “.” in the argument is equal to 2 then the German format dd.mm.yyyy is used.

86 \ifthenelse{\equal{\theiso@dot}{2}}{%
87  \expandafter\iso@input@german\iso@date\@empty}{%

If number of “-” in the argument is equal to 2 then the ISO format yyyy-mm-dd is used.

88  \ifthenelse{\equal{\theiso@minus}{2}}{%
89  \expandafter\iso@input@iso\iso@date\@empty}{%

If number of “/” in the argument is equal to 2 then the British English format

dd/mm/yyyy is used.
90  \ifthenelse{\equal{\theiso@slash}{2}}{%
91  \expandafter\iso@input@english\iso@date\@empty}{%

Else no of the formats above is used an thus an error message is thrown.

92  ????\iso@isodash ??\iso@isodash ??%
93  \PackageError{isodate}{unrecognized date format}{Use one of
94  the following formats as macro argument:^^J%
95  \space\space dd.mm.yyyy^^J%
96  \space\space dd/mm/yyyy^^J%
97  \space\space yyyy-mm-dd^^J%
98  Don't use any spaces or commands like \protect\, or
99  \protect~ inside the argument.}%
100  }}}%

101 }

\iso@input@iso Converts a string with the format yyyy-mm-dd to three arguments {#1}{#2}{#3}

and calls \iso@printdate.
102 \def\iso@input@iso#1-#2-#3\@empty{\iso@printdate{#1}{#2}{#3}}

\iso@input@german Converts a string with the format dd.mm.yyyy to three arguments {#3}{#2}{#1}

and calls \iso@printdate.
103 \def\iso@input@german#1.#2.#3\@empty{\iso@printdate{#3}{#2}{#1}}

\iso@input@english Converts a string with the format dd/mm/yyyy to three arguments {#3}{#2}{#1}

and calls \iso@printdate.
104 \def\iso@input@english#1/#2/#3\@empty{\iso@printdate{#3}{#2}{#1}}

\printdateTeX Prints a date that is given as one argument in the format yyyy/mm/dd.

105 \DeclareRobustCommand*{\printdateTeX}[1]{%

Define \iso@date command to expand the argument #1.

106 \edef\iso@date{#1}%

Count appearances of “/” in the argument.

107 \SubStringsToCounter{iso@slash}{/}{\iso@date}%

If number of “/” in the argument is equal to 2 then the L^{A}TEX format yyyy/mm/dd is used.

108 \ifthenelse{\equal{\theiso@slash}{2}}{%
109  \expandafter\iso@input@TeX\iso@date\@empty}{%

Else no of the formats above is used an thus an error message is thrown.

110  ????\iso@isodash ??\iso@isodash ??%
111  \PackageError{isodate}{unrecognized date format}{Use one of
112  the following formats as macro argument:^^J%
113  \space\space dd.mm.yyyy^^J%
114  \space\space dd/mm/yyyy^^J%
115  \space\space yyyy-mm-dd^^J%
116  Don't use any spaces or commands like \protect\, or
117  \protect~ inside the argument.}%

118 }}

\iso@input@TeX Converts a string with the format yyyy/mm/dd to three arguments {#1}{#2}{#3}

 and calls \iso@printdate.
119 \def\iso@input@TeX#1/#2/#3\@empty{\iso@printdate{#1}{#2}{#3}}

\daterange Prints a date range.

120 \DeclareRobustCommand*{\daterange}[2]{%

Define \iso@date and \iso@@date commands to expand the argument #1 and #2. Define \iso@@@date which contains both arguments devided by a komma.

121 \edef\iso@date{#1}%
122 \edef\iso@@date{#2}%
123 \edef\iso@@@date{\iso@date,\iso@@date}%

Count appearances of “/”, “-”, and “.” in the arguments.

124 \SubStringsToCounter{iso@slash}{/}{\iso@date}%
125 \SubStringsToCounter{iso@minus}{-}{\iso@date}%
126 \SubStringsToCounter{iso@dot}{.}{\iso@date}%
127 \SubStringsToCounter{iso@@slash}{/}{\iso@@date}%
128 \SubStringsToCounter{iso@@minus}{-}{\iso@@date}%
129 \SubStringsToCounter{iso@@dot}{.}{\iso@@date}%

If number of “.” in both arguments is equal to 2 then the German format

 dd.mm.yyyy is used.
130 \ifthenelse{\equal{\theiso@dot}{2}\and\equal{\theiso@@dot}{2}}{%
131  \expandafter\iso@range@input@german\iso@@@date\@empty}{%

If number of “-” in both arguments is equal to 2 then the ISO format yyyy-mm-dd is used.

132  \ifthenelse{\equal{\theiso@minus}{2}\and\equal{\theiso@@minus}{2}}{%
133  \expandafter\iso@range@input@iso\iso@@@date\@empty}{%

If number of “/” in both arguments is equal to 2 then the British English format

 dd/mm/yyyy is used.
134  \ifthenelse{\equal{\theiso@slash}{2}\and%
135  \equal{\theiso@@slash}{2}}{%
136  \expandafter\iso@range@input@english\iso@@@date\@empty}{%

Else no of the formats above is used an thus an error message is thrown.

137  ????\iso@isodash ??\iso@isodash ??%
138  \PackageError{isodate}{unrecognized date format}{Use one of
139  the following formats as macro argument:^^J%
140  \space\space dd.mm.yyyy^^J%
141  \space\space dd/mm/yyyy^^J%
142  \space\space yyyy-mm-dd^^J%
143  Don't use any spaces or commands like \protect\, or
144  \protect~ inside the argument.^^J
145  Use the same format for both arguments.}%
146  }}}%

147 }

\iso@range@input@iso Converts a string with the format yyyy-mm-dd,yyyy-mm-dd to six arguments

 {#1}{#2}{#3}{#4}{#5}{#6} and calls \iso@daterange@language.
148 \def\iso@range@input@iso#1-#2-#3,#4-#5-#6\@empty{%
149 \csname iso@daterange@\iso@languagename\endcsname{%
150  #1}{#2}{#3}{#4}{#5}{#6}}
\iso@range@input@german Converts a string with the format dd.mm.yyyy,dd.mm.yyyy to six arguments
 {#3}{#2}{#1}{#6}{#5}{#4} and calls \iso@daterange@language.
151 \def\iso@range@input@german#1.#2.#3,#4.#5.#6\@empty{%
152 \csname iso@daterange@\iso@languagename\endcsname{%
153  #3}{#2}{#1}{#6}{#5}{#4}}
\iso@range@input@english Converts a string with the format dd/mm/yyyy,dd/mm/yyyy to six arguments
 {#3}{#2}{#1}{#6}{#5}{#4} and calls \iso@daterange@language.
154 \def\iso@range@input@english#1/#2/#3,#4/#5/#6\@empty{%
155 \csname iso@daterange@\iso@languagename\endcsname{%
156  #3}{#2}{#1}{#6}{#5}{#4}}

Define the counters for conting the appearances of “.”, “-”, and ”/” in the arguments.

157 \newcounter{iso@slash}
158 \newcounter{iso@minus}
159 \newcounter{iso@dot}
160 \newcounter{iso@@slash}
161 \newcounter{iso@@minus}
162 \newcounter{iso@@dot}

The command \iso@languagename is defined to be able to use this package without loading one of the language packages babel.sty, german.sty, or ngerman.sty.

If neither babel.sty nor german.sty nor ngerman.sty is loaded my computer returns “nohyphenation” when using \languagename. So this is the indication that none of the above packages is loaded.

163 \AtBeginDocument{%
164 \ifthenelse{\not\equal{\languagename}{nohyphenation}}{%

The language is not equal “nohyphenation”. So one of the language packages is loaded. Replace the internal language name \iso@languagename by the global

language name \languagename.
165  \gdef\iso@languagename{\languagename}%

Reload language to surely switch to new date format. The languagename gets first expanded because of errors that would occur otherwise.

166  \edef\iso@tmplang{\languagename}%
167  \expandafter\selectlanguage\expandafter{\iso@tmplang}%
168 }{%

At the end of the preamble still none of the language packages are loaded. So no language switching is possible. Set the date language manually to the last language that was loaded for isodate.

169  \csname date\iso@languagename\endcsname%

170 } 171 }

The end of the package.

D.2 Language definition file danish.idf

Heading of the file:

172 \ProvidesFile{danish.idf}[\filedate\space v\fileversion\space
173 Danish support from the isodate package]
\iso@languageloaded Define the command \iso@languageloaded in order to enable isodate.sty to

determine if at least one language is loaded.

174 \let\iso@languageloaded\active

\month@danish Prints the name of today’s month in the long form for the original date format.

175 \def\month@danish{\ifcase\month\or
176  januar\or februar\or marts\or april\or maj\or juni\or
177  juli\or august\or september\or oktober\or november\or december\fi}

\iso@printmonthday@danish Prints the month and the day given as two arguments ({mm}{dd}) in the current date format.

178 \def\iso@printmonthday@danish#1#2{%

Numeric and short date format: dd/mm/

179  \ifthenelse{\equal{\iso@dateformat}{numeric}\or%
180  \equal{\iso@dateformat}{short}}{%
181  \printnumber[10]{#2}/\printnumber[10]{#1}/}{%

ISO date format: -mm-dd

182  \ifthenelse{\equal{\iso@dateformat}{iso}}{%
183  \iso@isodash\printnumber[10]{#1}%
184  \iso@isodash\printnumber[10]{#2}}{%

L^{A}TEX date format: /mm/dd

185  \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
186  /\printnumber[10]{#1}/\printnumber[10]{#2}}{%

Original date format: d. mmm

187  \ifthenelse{\equal{\iso@dateformat}{orig}\or
188  \equal{\iso@dateformat}{shortorig}}{%
189  \printnumber{#2}.~\begingroup
190  \edef\lmonth{#1}\def\month{\lmonth}%
191  \month@danish%
192  \endgroup
193  }{}}}}%

194 }

\iso@printdate@danish Prints the date given as three arguments ({yyyy}{mm}{dd}) in the actual date format

195 \def\iso@printdate@danish#1#2#3{%
 ISO or L^{A}TEXdate format: yyyy\iso@printmonthday@danish
196  \ifthenelse{\equal{\iso@dateformat}{iso}\or%
197  \equal{\iso@dateformat}{TeX}}{\number#1}{}%
198  \iso@printmonthday@danish{\number#2}{\number#3}%
 numeric date format: \iso@printmonthday@danish yyyy
199  \ifthenelse{\equal{\iso@dateformat}{numeric}}{\number#1}{%
 original date format: \iso@printmonthday@danish~yyyy
200  \ifthenelse{\equal{\iso@dateformat}{orig}}{~\number#1}{%
 short original date format: \iso@printmonthday@danish~yy
201  \ifthenelse{\equal{\iso@dateformat}{shortorig}}{%
202  ~\iso@twodigitsign\iso@yeartwo{\number#1}}{%
 short date format: \iso@printmonthday@danish yy
203  \ifthenelse{\equal{\iso@dateformat}{short}}{%
204  \iso@yeartwo{\number#1}}{%
205  }}}}%

206 }

\iso@datedanish This command redefines the \today command to print in the actual date format.

207 \def\iso@datedanish{%
208  \def\today{\iso@printdate@danish{\year}{\month}{\day}}}%
\iso@daterange@danish This command takes six arguments ({yyyy1}{mm1}{dd1}{yyyy2}{mm2}{dd2})

and prints the corrosponding date range in the actual date format.

209 \def\iso@daterange@danish#1#2#3#4#5#6{%

ISO or L^{A}TEX date format.

210 \ifthenelse{\equal{\iso@dateformat}{iso}\or%
211  \equal{\iso@dateformat}{TeX}}{%

Print the start date.

212  \csname iso@printdate@\iso@languagename\endcsname{%
213  #1}{#2}{#3}\iso@rangesign%

If year and month are equal, only print the day of the end date. If only the year is equal, only print month and day of the end date. Otherwise print the whole end date.

214  \ifthenelse{\equal{\number#1}{\number#4}}{%
215  \ifthenelse{\equal{\number#2}{\number#5}}{\printnumber[10]{#6}%
216  }{\iso@printmonthday@danish{#5}{#6}}}{%
217  \csname iso@printdate@\iso@languagename\endcsname{#4}{#5}{#6}}}{%

Numeric, short, or original date format.

If year and month are equal, only print the day of the start date. If only the year is equal, only print month and day of the start date. Otherwise print the whole start date.

218  \ifthenelse{\equal{\number#1}{\number#4}}{%
219  \ifthenelse{\equal{\number#2}{\number#5}}{%
220  \ifthenelse{\equal{\iso@dateformat}{orig}}{%
221  \printnumber{#3}.}{\printnumber[10]{#3}}%
222  }{\iso@printmonthday@danish{#2}{#3}}}{%
223  \csname iso@printdate@\iso@languagename\endcsname{%
224  #1}{#2}{#3}}%

Print the end date.

225  \iso@rangesign\csname iso@printdate@\iso@languagename\endcsname{%
226  #4}{#5}{#6}%
227 }{%

228 }% 229 }

\iso@rangesign@danish Sets the word between start and end date in a date range to “ til ”.

230 \def\iso@rangesign@danish{~til~}

Define the language name that will the active language for isodate if none of the packages babel.sty, german.sty, and ngerman.sty is loaded and if this is the last language that is used for isodate. If one of the above packages is used this definition will be overridden by the command \languagename that will always return the current used language.

231 \def\iso@languagename{danish}%

Redefine the command \datedanish that is used by babel to switch to the original Danish date format to enable the use of different date formats. This has to be done after the preamble in order to ensure to overwrite the babel command.

232 \AtBeginDocument{%
233 \ifx\undefined\iso@datedanish\else

234  \def\datedanish{\iso@datedanish}%
235 \fi

236 }

The end of the file.

D.3 Language definition file english.idf

Heading of the file:

237 \ProvidesFile{english.idf}[\filedate\space v\fileversion\space
238 English support from the isodate package]
\iso@languageloaded Define the command \iso@languageloaded in order to enable isodate.sty to

determine if at least one language is loaded.

239 \let\iso@languageloaded\active

\month@english Prints the name of today’s month in the long form for the original date format.

240 \def\month@english{\ifcase\month\or
241  January\or February\or March\or April\or May\or June\or
242  July\or August\or September\or October\or November\or December\fi}

British and American English dates are very different. So handle them seperately. It might have been easier to put them in different files but I wanted to organize my files analogous to babel.

First handle British English.

243 \ifthenelse{\equal{\CurrentOption}{english}\or%
244  \equal{\CurrentOption}{UKenglish}}{%

\day@english Prints today’s day for the original date format.

245 \def\day@english{\ifcase\day\or
246  1st\or 2nd\or 3rd\or 4th\or 5th\or
247  6th\or 7th\or 8th\or 9th\or 10th\or
248  11th\or 12th\or 13th\or 14th\or 15th\or
249  16th\or 17th\or 18th\or 19th\or 20th\or
250  21st\or 22nd\or 23rd\or 24th\or 25th\or
251  26th\or 27th\or 28th\or 29th\or 30th\or
252  31st\fi}

\iso@printmonthday@english Prints the month and the day given as two arguments ({mm}{dd}) in the current date format.

253 \def\iso@printmonthday@english#1#2{%

Numeric and short date format: dd/mm/

254  \ifthenelse{\equal{\iso@dateformat}{numeric}\or%
255  \equal{\iso@dateformat}{short}}{%
256  \printnumber[10]{#2}/\printnumber[10]{#1}/}{%

ISO date format: mm-dd

257  \ifthenelse{\equal{\iso@dateformat}{iso}}{%
258  \printnumber[10]{#1}\iso@isodash\printnumber[10]{#2}}{%

L^{A}TEX date format: mm/dd

259  \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
260  \printnumber[10]{#1}/\printnumber[10]{#2}}{%

Original date format: ddd mmm

261  \ifthenelse{\equal{\iso@dateformat}{orig}\or
262  \equal{\iso@dateformat}{shortorig}}{%
263  \begingroup
264  \edef\lday{#2}\def\day{\lday}%
265  \edef\lmonth{#1}\def\month{\lmonth}%
266  \day@english~\month@english%
267  \endgroup
268  }{}}}}%

269 }

\iso@printdate@english Prints the date given as three arguments ({yyyy}{mm}{dd}) in the actual date format.

270 \def\iso@printdate@english#1#2#3{%
 ISO date format: yyyy-\iso@printmonthday@english
271  \ifthenelse{\equal{\iso@dateformat}{iso}}{\number#1\iso@isodash}{%
 L^{A}TEX date format: yyyy/\iso@printmonthday@english
272  \ifthenelse{\equal{\iso@dateformat}{TeX}}{\number#1/}{}}%
273  \iso@printmonthday@english{\number#2}{\number#3}%
 Numeric date format: \iso@printmonthday@english yyyy
274  \ifthenelse{\equal{\iso@dateformat}{numeric}}{\number#1}{%
 Original date format: \iso@printmonthday@english~yyyy
275  \ifthenelse{\equal{\iso@dateformat}{orig}}{~\number#1}{%
 Short original date format: \iso@printmonthday@english~yy
276  \ifthenelse{\equal{\iso@dateformat}{shortorig}}{%
277  ~\iso@twodigitsign\iso@yeartwo{\number#1}}{%
 Short date format: \iso@printmonthday@english yy
278  \ifthenelse{\equal{\iso@dateformat}{short}}{%
279  \iso@yeartwo{\number#1}}{%
280  }}}}%

281 }

\iso@printdate@UKenglish Just a second name for \iso@printdate@UKenglish.
282 \def\iso@printdate@UKenglish{\iso@printdate@english}

\iso@dateenglish This command redefines the \today command to print in the actual date format.

283 \def\iso@dateenglish{%
284  \def\today{\iso@printdate@english{\year}{\month}{\day}}}%
\iso@daterange@english This command takes six arguments ({yyyy1}{mm1}{dd1}{yyyy2}{mm2}{dd2})

and prints the corrosponding date range in the actual date format.

285 \def\iso@daterange@english#1#2#3#4#5#6{%

ISO or L^{A}TEX date format.

286 \ifthenelse{\equal{\iso@dateformat}{iso}\or%
287  \equal{\iso@dateformat}{TeX}}{%

Print the start date.

288  \csname iso@printdate@\iso@languagename\endcsname{%
289  #1}{#2}{#3}\iso@rangesign%

If year and month are equal, only print the day of the end date. If only the year is equal, only print month and day of the end date. Otherwise print the whole end date.

290  \ifthenelse{\equal{\number#1}{\number#4}}{%
291  \ifthenelse{\equal{\number#2}{\number#5}}{\printnumber[10]{#6}%
292  }{\iso@printmonthday@english{#5}{#6}}}{%
293  \csname iso@printdate@\iso@languagename\endcsname{#4}{#5}{#6}}}{%

Numeric, short, or original date format.

If year and month are equal, only print the day of the start date. If only the year is equal, only print month and day of the start date. Otherwise print the whole start date.

294  \ifthenelse{\equal{\number#1}{\number#4}}{%
295  \ifthenelse{\equal{\number#2}{\number#5}}{%
296  \ifthenelse{\equal{\iso@dateformat}{orig}}{%
297  \begingroup
298  \edef\lday{#3}\def\day{\lday}%
299  \day@english\endgroup}{\printnumber[10]{#3}}%
300  }{\iso@printmonthday@english{#2}{#3}}}{%
301  \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}}%

Print the end date.

302  \iso@rangesign\csname iso@printdate@\iso@languagename\endcsname{%
303  #4}{#5}{#6}%
304 }{%

305 }% 306 }

\iso@daterange@english Sets the word between start and end date in a date range to “ to”.

307 \def\iso@rangesign@english{~to~}

Define the language name that will the active language for isodate if none of the packages babel.sty, german.sty, and ngerman.sty is loaded and if this is the last language that is used for isodate. If one of the above packages is used this definition will be overridden by the command \languagename that will always return the current used language.

308 \def\iso@languagename{english}%

The end of the British section.

Second handle American English.

309 }{%

\iso@printmonthday@american Prints the month and the day given as two arguments ({mm}{dd}) in the current date format.

310 \def\iso@printmonthday@american#1#2{%

Numeric and short date format: mm/dd/

311  \ifthenelse{\equal{\iso@dateformat}{numeric}\or%
312  \equal{\iso@dateformat}{short}}{%
313  \printnumber[10]{#1}/\printnumber[10]{#2}/}{%

ISO date format: mm-dd

314  \ifthenelse{\equal{\iso@dateformat}{iso}}{%
315  \printnumber[10]{#1}\iso@isodash\printnumber[10]{#2}}{%

L^{A}TEX date format: mm/dd

316  \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
317  \printnumber[10]{#1}/\printnumber[10]{#2}}{%

Original date format: mmm d

318  \ifthenelse{\equal{\iso@dateformat}{orig}\or
319  \equal{\iso@dateformat}{shortorig}}{%
320  \begingroup%
321  \edef\lmonth{#1}%
322  \def\month{\lmonth}\month@english%
323  \endgroup
324  ~\printnumber{#2}%
325  }{}}}}%

326 }

\iso@printdate@american Prints the date given as three arguments ({yyyy}{mm}{dd}) in the actual date format.

327 \def\iso@printdate@american#1#2#3{%
 ISO date format: yyyy-\iso@printmonthday@american
328  \ifthenelse{\equal{\iso@dateformat}{iso}}{\number#1\iso@isodash}{%
 L^{A}TEX date format: yyyy/\iso@printmonthday@american
329  \ifthenelse{\equal{\iso@dateformat}{TeX}}{\number#1/}{}}%
330  \iso@printmonthday@american{\number#2}{\number#3}%
 Numeric date format: \iso@printmonthday@american yyyy
331  \ifthenelse{\equal{\iso@dateformat}{numeric}}{\number#1}{%
 Original date format: \iso@printmonthday@american,~yyyy
332  \ifthenelse{\equal{\iso@dateformat}{orig}}{,~\number#1}{%
 Short original date format: \iso@printmonthday@american,~yyyy
333  \ifthenelse{\equal{\iso@dateformat}{shortorig}}{%
334  ,~\iso@twodigitsign\iso@yeartwo{\number#1}}{%
 Short date format: \iso@printmonthday@american yy
335  \ifthenelse{\equal{\iso@dateformat}{short}}{%
336  \iso@yeartwo{\number#1}}{}}}}%

337 }

\iso@printdate@USenglish Just a second name for \iso@printdate@UKamerican.
338 \def\iso@printdate@USenglish{\iso@printdate@american}

\iso@dateamerican This command redefines the \today command to print in the actual date format.

339 \def\iso@dateamerican{%
340  \def\today{\iso@printdate@american{\year}{\month}{\day}}}%
\iso@daterange@american This command takes six arguments ({yyyy1}{mm1}{dd1}{yyyy2}{mm2}{dd2})

and prints the corrosponding date range in the actual date format.

341 \def\iso@daterange@american#1#2#3#4#5#6{%

ISO or L^{A}TEX date format.

342 \ifthenelse{\equal{\iso@dateformat}{iso}\or%
343  \equal{\iso@dateformat}{TeX}}{%

Print the start date.

344  \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}%
345  \iso@rangesign%

If year and month are equal, only print the day of the end date. If only the year is equal, only print month and day of the end date. Otherwise print the whole end date.

346  \ifthenelse{\equal{\number#1}{\number#4}}{%
347  \ifthenelse{\equal{\number#2}{\number#5}}{\printnumber[10]{#6}%
348  }{\iso@printmonthday@american{#5}{#6}}}{%
349  \csname iso@printdate@\iso@languagename\endcsname{%
350  #4}{#5}{#6}}}{%

Original date format.

If year and month are equal, print mmm d1 to d2, yyyy. If only the year is equal, print mmm1 d1 to mmm2 d2, yyyy. Otherwise print the whole start and end date.

351  \ifthenelse{\equal{\iso@dateformat}{orig}}{%
352  \ifthenelse{\equal{\number#1}{\number#4}}{%
353  \ifthenelse{\equal{\number#2}{\number#5}}{%
354  \iso@printmonthday@american{#2}{#3}\iso@rangesign%
355  \printnumber{#6},~\number#4}{%
356  \iso@printmonthday@american{#2}{#3}\iso@rangesign%
357  \csname iso@printdate@\iso@languagename\endcsname{%
358  #4}{#5}{#6}}}{%
359  \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}%
360  \iso@rangesign%
361  \csname iso@printdate@\iso@languagename\endcsname{%
362  #4}{#5}{#6}}}{%

Numeric or short date format.

If year and month are equal, only print the day of the end date. Otherwise print the whole end date.

363  \ifthenelse{\equal{\number#1}{\number#4}}{%
364  \iso@printmonthday@american{#2}{#3}}{%
365  \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}}%

Print the end date.

366  \iso@rangesign\csname iso@printdate@\iso@languagename\endcsname{%
367  #4}{#5}{#6}}%

368 }% 369 }

\iso@rangesign@american Set the word between start and end date in a date range to “ to ”.

370 \def\iso@rangesign@american{~to~}

Define the language name that will the active language for isodate if none of the packages babel.sty, german.sty, and ngerman.sty is loaded and if this is the last language that is used for isodate. If one of the above packages is used this definition will be overridden by the command \languagename that will always return the current used language.

371 \def\iso@languagename{american}%

The end of the American section.

372 }

Redefine the command datelanguage that is used by babel.sty, german.sty, and ngerman.sty to switch to the original English/American date format to enable the use of different date formats. This has to be done after the preamble in order to ensure to overwrite the babel command.

Do this only if \iso@datelanguage is defined.

373 \AtBeginDocument{%
374 \ifx\undefined\iso@dateenglish\else
375  \def\dateenglish{\iso@dateenglish}%
376  \def\dateUKenglish{\iso@dateenglish}%
377 \fi
378 \ifx\undefined\iso@dateamerican\else
379  \def\dateamerican{\iso@dateamerican}%
380  \def\dateUSenglish{\iso@dateamerican}%
381 \fi

382 }

The end of the file.

D.4 Language definition file french.idf

Heading of the file:

383 \ProvidesFile{french.idf}[\filedate\space v\fileversion\space
384 French support from the isodate package]
\iso@languageloaded Define the command \iso@languageloaded in order to enable isodate.sty to

determine if at least one language is loaded.

385 \let\iso@languageloaded\active
386 \def\month@french{\ifcase\month\or
387 janvier\or f\'evrier\or mars\or avril\or mai\or juin\or
388 juillet\or ao\^ut\or septembre\or octobre\or novembre\or
389 d\'ecembre\fi}

390 \def\iso@printmonthday@french#1#2{%
391  \ifthenelse{\equal{\iso@dateformat}{numeric}\or%
392  \equal{\iso@dateformat}{short}}{%
393  \printnumber[10]{#2}/\printnumber[10]{#1}/}{%
394  \ifthenelse{\equal{\iso@dateformat}{iso}}{%
395  \iso@isodash\printnumber[10]{#1}\iso@isodash%
396  \printnumber[10]{#2}}{%
397  \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
398  /\printnumber[10]{#1}/\printnumber[10]{#2}}{%
399  \ifthenelse{\equal{\iso@dateformat}{orig}\or
400  \equal{\iso@dateformat}{shortorig}}{%
401  \begingroup
402  \edef\lday{#2}\edef\day{\lday}%
403  \edef\lmonth{#1}\def\month{\lmonth}%
404  \number\day\ifnum1=\day \noexpand\ier\fi~\month@french%
405  \endgroup
406  }{}}}}%

407 }

408 \def\iso@printdate@french#1#2#3{%
409  \ifthenelse{\equal{\iso@dateformat}{iso}\or%
410  \equal{\iso@dateformat}{TeX}}{\number#1}{}%
411  \iso@printmonthday@french{\number#2}{\number#3}%
412  \ifthenelse{\equal{\iso@dateformat}{numeric}}{\number#1}{%
413  \ifthenelse{\equal{\iso@dateformat}{orig}}{~\number#1}{%
414  \ifthenelse{\equal{\iso@dateformat}{shortorig}}{%
415  ~\iso@twodigitsign\iso@yeartwo{\number#1}}{%
416  \ifthenelse{\equal{\iso@dateformat}{short}}{%
417  \iso@yeartwo{\number#1}}{}}}}%

418 }

419 \def\iso@datefrench{%
420  \def\today{\iso@printdate@french{\year}{\month}{\day}}}%
421 \def\iso@daterange@french#1#2#3#4#5#6{%
422 \ifthenelse{\equal{\iso@dateformat}{iso}\or%
423  \equal{\iso@dateformat}{TeX}}{%
424  \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}%
425  \iso@rangesign%
426  \ifthenelse{\equal{\number#1}{\number#4}}{%
427  \ifthenelse{\equal{\number#2}{\number#5}}{\printnumber[10]{#6}%
428  }{\iso@printmonthday@french{#5}{#6}}}{%
429  \csname iso@printdate@\iso@languagename\endcsname{#4}{#5}{#6}}}{%
430  \ifthenelse{\equal{\number#1}{\number#4}}{%
431  \ifthenelse{\equal{\number#2}{\number#5}}{%
432  \ifthenelse{\equal{\iso@dateformat}{orig}}{%
433  \begingroup
434  \edef\lday{#3}\edef\day{\lday}%
435  \number\day\ifnum1=\day \noexpand\ier\fi
436  \endgroup}{\printnumber[10]{#3}}%
437  }{\iso@printmonthday@french{#2}{#3}}}{%

438  \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}}%
439  \iso@rangesign\csname iso@printdate@\iso@languagename\endcsname{%
440  #4}{#5}{#6}%
441 }{%

442 }% 443 }

444 \def\iso@rangesign@french{~au~}

Define the language name that will the active language for isodate if none of the packages babel.sty, german.sty, and ngerman.sty is loaded and if this is the last language that is used for isodate. If one of the above packages is used this definition will be overridden by the command \languagename that will always return the current used language.

445 \def\iso@languagename{french}%

\datefrenchb has to be defined additionally because babel starts with language frenchb instead of french.

446 \AtBeginDocument{%
447 \ifx\undefined\iso@datefrench\else
448  \def\datefrench{\iso@datefrench}%
449  \def\datefrenchb{\iso@datefrench}%
450 \fi

451 }

The end of the file.

D.5 Language definition file german.idf

Heading of the file:

452 \ProvidesFile{german.idf}[\filedate\space v\fileversion\space
453 German support from the isodate package]
\iso@languageloaded Define the command \iso@languageloaded in order to enable isodate.sty to

determine if at least one language is loaded.

454 \let\iso@languageloaded\active

Define spaces between day and month resp. month and year. dm stands for daymonth and my for month-year. The defaults are taken from the Duden [2].

455 \def\iso@dmsepgerman{\,}%
456 \def\iso@mylongsepgerman{~}%
457 \def\iso@myshortsepgerman{\,}%

\daymonthsepgerman Change space between day and month in numeric date formats for the German language. The only parameter is the new spacing.

458 \DeclareRobustCommand*{\daymonthsepgerman}[1]{\def\iso@dmsepgerman{#1}}
459 %    \begin{macrocode}
460 % \end{macro}
461 % \begin{macro}{\monthyearsepgerman}
462 % Change space between month and year in numeric date formats for the

463 % German language. The first parameter is the new spacing for the long
464 % format and the second for the short format.
465 %    \begin{macrocode}
466 \DeclareRobustCommand*{\monthyearsepgerman}[2]{%
467 \def\iso@mylongsepgerman{#1}%
468 \def\iso@myshortsepgerman{#2}}
469 \def\month@german{\ifcase\month\or
470 Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or
471 Juli\or August\or September\or Oktober\or November\or Dezember\fi}
472 \def\month@ngerman{\month@german}
473 \def\month@austrian{\ifnum1=\month
474 J\"anner\else \month@german\fi}
475 \def\month@naustrian{\month@austrian}
476 \@namedef{iso@printmonthday@\CurrentOption}#1#2{%
477 \ifthenelse{\equal{\iso@dateformat}{numeric}\or%
478  \equal{\iso@dateformat}{short}}{%
479  \printnumber[10]{#2}.\iso@dmsepgerman\printnumber[10]{#1}.}{%
480  \ifthenelse{\equal{\iso@dateformat}{iso}}{%
481  \printnumber[10]{#1}\iso@isodash\printnumber[10]{#2}}{%
482  \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
483  \printnumber[10]{#1}/\printnumber[10]{#2}}{%
484  \ifthenelse{\equal{\iso@dateformat}{orig}\or
485  \equal{\iso@dateformat}{shortorig}}{%
486  \printnumber{#2}.~\begingroup
487  \edef\lmonth{#1}%
488  \def\month{\lmonth}\csname month@\iso@languagename\endcsname%
489  \endgroup
490  }{}}}}%

491 }

492 \@namedef{iso@printdate@\CurrentOption}#1#2#3{%
493 \ifthenelse{\equal{\iso@dateformat}{iso}}{\number#1\iso@isodash}{%
494  \ifthenelse{\equal{\iso@dateformat}{TeX}}{\number#1/}{}}%
495 \csname iso@printmonthday@\iso@languagename\endcsname{%
496  \number#2}{\number#3}%
497 \ifthenelse{\equal{\iso@dateformat}{numeric}}{%
498  \iso@mylongsepgerman\number#1}{%
499  \ifthenelse{\equal{\iso@dateformat}{orig}}{~\number#1}{%
500  \ifthenelse{\equal{\iso@dateformat}{shortorig}}{%
501  ~\iso@twodigitsign\iso@yeartwo{\number#1}}{%
502  \ifthenelse{\equal{\iso@dateformat}{short}}{%
503  \iso@myshortsepgerman\iso@yeartwo{\number#1}}{}}}}%

504 }

505 \@namedef{iso@daterange@\CurrentOption}#1#2#3#4#5#6{%
506 \ifthenelse{\equal{\iso@dateformat}{iso}\or%
507  \equal{\iso@dateformat}{TeX}}{%
508  \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}%
509  \iso@rangesign%

510  \ifthenelse{\equal{\number#1}{\number#4}}{%
511  \ifthenelse{\equal{\number#2}{\number#5}}{\printnumber[10]{#6}%
512  }{\csname iso@printmonthday@\iso@languagename\endcsname{#5}{#6}}}{%
513  \csname iso@printdate@\iso@languagename\endcsname{#4}{#5}{#6}}}{%
514  \ifthenelse{\equal{\number#1}{\number#4}}{%
515  \ifthenelse{\equal{\number#2}{\number#5}}{%
516  \ifthenelse{\equal{\iso@dateformat}{orig}}{%
517  \printnumber{#3}}{\printnumber[10]{#3}}.%
518  }{\csname iso@printmonthday@\iso@languagename\endcsname{%
519  #2}{#3}}}{%
520  \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}}%
521  \iso@rangesign\csname iso@printdate@\iso@languagename\endcsname{%
522  #4}{#5}{#6}%

523 }% 524 }

525 \@namedef{iso@rangesign@\CurrentOption}{~bis~}
526 \ifthenelse{\equal{\CurrentOption}{german}}{%
527 \def\iso@dategerman{%
528  \def\today{\iso@printdate@german{\year}{\month}{\day}}}%

Define the language name that will the active language for isodate if none of the packages babel.sty, german.sty, and ngerman.sty is loaded and if this is the last language that is used for isodate. If one of the above packages is used this definition will be overridden by the command \languagename that will always return the current used language.

529 \def\iso@languagename{german}%
530 }{%
531 \ifthenelse{\equal{\CurrentOption}{ngerman}}{%
532 \def\iso@datengerman{%
533  \def\today{\iso@printdate@ngerman{\year}{\month}{\day}}}%

Define the language name that will the active language for isodate if none of the packages babel.sty, german.sty, and ngerman.sty is loaded and if this is the last language that is used for isodate. If one of the above packages is used this definition will be overridden by the command \languagename that will always return the current used language.

534 \def\iso@languagename{ngerman}%
535 }{%
536 \ifthenelse{\equal{\CurrentOption}{austrian}}{%
537 \def\iso@dateaustrian{%
538  \def\today{\iso@printdate@austrian{\year}{\month}{\day}}}%

Define the language name that will the active language for isodate if none of the packages babel.sty, german.sty, and ngerman.sty is loaded and if this is the last language that is used for isodate. If one of the above packages is used this definition will be overridden by the command \languagename that will always return the current used language.

539 \def\iso@languagename{austrian}%
540 }{%
541 \ifthenelse{\equal{\CurrentOption}{naustrian}}{%
542 \def\iso@datenaustrian{%
543  \def\today{\iso@printdate@naustrian{\year}{\month}{\day}}}%

Define the language name that will the active language for isodate if none of the packages babel.sty, german.sty, and ngerman.sty is loaded and if this is the last language that is used for isodate. If one of the above packages is used this definition will be overridden by the command \languagename that will always return the current used language.

544 \def\iso@languagename{naustrian}%
545 }{%
546 }}}}

Redefine the command datelanguage that is used by babel.sty, german.sty, and ngerman.sty to switch to the original German date format to enable the use of different date formats. This has to be done after the preamble in order to ensure to overwrite the babel command.

Do this only if \iso@datelanguage is defined.

547 \AtBeginDocument{%
548 \ifx\undefined\iso@dategerman\else
549  \def\dategerman{\iso@dategerman}%
550 \fi
551 \ifx\undefined\iso@datengerman\else
552  \def\datengerman{\iso@datengerman}%
553 \fi
554 \ifx\undefined\iso@dateaustrian\else
555  \def\dateaustrian{\iso@dateaustrian}%
556 \fi
557 \ifx\undefined\iso@datenaustrian\else
558  \def\datenaustrian{\iso@datenaustrian}%
559 \fi

560 }

The end of the file.

D.6 Language definition file norsk.idf

This file was provided by Svend Tollak Munkejord (svend.t.munkejord@energy.sintef.no).

Heading of the file:

561 %% Endret til norsk, 2001-04-30, STM
562 \ProvidesFile{norsk.idf}[\filedate\space v\fileversion\space
563 Norwegian support from the isodate package]
\iso@languageloaded Define the command \iso@languageloaded in order to enable isodate.sty to

determine if at least one language is loaded.

564 \let\iso@languageloaded\active

\month@norsk Prints the name of today’s month in the long form for the original date format.

565 \def\month@norsk{\ifcase\month\or
566  januar\or februar\or mars\or april\or mai\or juni\or
567  juli\or august\or september\or oktober\or november\or desember\fi}

\iso@printmonthday@norsk Prints the month and the day given as two arguments ({mm}{dd}) in the current date format.

568 \def\iso@printmonthday@norsk#1#2{%

Numeric and short date format: dd/mm/

569  \ifthenelse{\equal{\iso@dateformat}{numeric}\or%
570  \equal{\iso@dateformat}{short}}{%
571  \printnumber[10]{#2}/\printnumber[10]{#1}/}{%

ISO date format: -mm-dd

572  \ifthenelse{\equal{\iso@dateformat}{iso}}{%
573  \iso@isodash\printnumber[10]{#1}\iso@isodash\printnumber[10]{#2}}{%

L^{A}TEX date format: /mm/dd

574  \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
575  /\printnumber[10]{#1}/\printnumber[10]{#2}}{%

Original date format: d. mmm

576  \ifthenelse{\equal{\iso@dateformat}{orig}\or
577  \equal{\iso@dateformat}{shortorig}}{%
578  \printnumber{#2}.~\begingroup
579  \edef\lmonth{#1}\def\month{\lmonth}%
580  \month@norsk%
581  \endgroup
582  }{}}}}%

583 }

\iso@printdate@norsk Prints the date given as three arguments ({yyyy}{mm}{dd}) in the actual date format

584 \def\iso@printdate@norsk#1#2#3{%
 ISO or L^{A}TEXdate format: yyyy\iso@printmonthday@norsk
585  \ifthenelse{\equal{\iso@dateformat}{iso}\or%
586  \equal{\iso@dateformat}{TeX}}{\number#1}{}%
587  \iso@printmonthday@norsk{\number#2}{\number#3}%
 numeric date format: \iso@printmonthday@norsk yyyy
588  \ifthenelse{\equal{\iso@dateformat}{numeric}}{\number#1}{%
 original date format: \iso@printmonthday@norsk~yyyy
589  \ifthenelse{\equal{\iso@dateformat}{orig}}{~\number#1}{%
 short original date format: \iso@printmonthday@norsk~yyyy
590  \ifthenelse{\equal{\iso@dateformat}{shortorig}}{%
591  ~\iso@twodigitsign\iso@yeartwo{\number#1}}{%

 short date format: \iso@printmonthday@norsk yy
592  \ifthenelse{\equal{\iso@dateformat}{short}}{%
593  \iso@yeartwo{\number#1}}{%
594  }}}}%

595 }

\iso@datenorsk This command redefines the \today command to print in the actual date format.

596 \def\iso@datenorsk{%
597  \def\today{\iso@printdate@norsk{\year}{\month}{\day}}}%
\iso@daterange@norsk This command takes six arguments ({yyyy1}{mm1}{dd1}{yyyy2}{mm2}{dd2})

and prints the corrosponding date range in the actual date format.

598 \def\iso@daterange@norsk#1#2#3#4#5#6{%

ISO or L^{A}TEX date format.

599 \ifthenelse{\equal{\iso@dateformat}{iso}\or%
600  \equal{\iso@dateformat}{TeX}}{%

Print the start date.

601  \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}%
602  \iso@rangesign%

If year and month are equal, only print the day of the end date. If only the year is equal, only print month and day of the end date. Otherwise print the whole end date.

603  \ifthenelse{\equal{\number#1}{\number#4}}{%
604  \ifthenelse{\equal{\number#2}{\number#5}}{\printnumber[10]{#6}%
605  }{\iso@printmonthday@norsk{#5}{#6}}}{%
606  \csname iso@printdate@\iso@languagename\endcsname{#4}{#5}{#6}}}{%

Numeric, short, or original date format.

If year and month are equal, only print the day of the start date. If only the year is equal, only print month and day of the start date. Otherwise print the whole start date.

607  \ifthenelse{\equal{\number#1}{\number#4}}{%
608  \ifthenelse{\equal{\number#2}{\number#5}}{%
609  \ifthenelse{\equal{\iso@dateformat}{orig}}{%
610  \printnumber{#3}.}{\printnumber[10]{#3}}%
611  }{\iso@printmonthday@norsk{#2}{#3}}}{%
612  \csname iso@printdate@\iso@languagename\endcsname{#1}{#2}{#3}}%

Print the end date.

613  \iso@rangesign\csname iso@printdate@\iso@languagename\endcsname{%
614  #4}{#5}{#6}%
615 }{%

616 }% 617 }

\iso@rangesign@norsk Sets the word between start and end date in a date range to “ til ”.

618 \def\iso@rangesign@norsk{~til~}

Define the language name that will the active language for isodate if none of the packages babel.sty, german.sty, and ngerman.sty is loaded and if this is the last language that is used for isodate. If one of the above packages is used this definition will be overridden by the command \languagename that will always return the current used language.

619 \def\iso@languagename{norsk}%

Redefine the command \datenorsk that is used by babel to switch to the original Norsk date format to enable the use of different date formats. This has to be done after the preamble in order to ensure to overwrite the babel command.

620 \AtBeginDocument{%
621 \ifx\undefined\iso@datenorsk\else
622  \def\datenorsk{\iso@datenorsk}%
623 \fi

624 }

The end of the file.

D.7 Language definition file swedish.idf

This file was provided by Christian Schlauer (christian.schlauer@web.de).

Heading of the file:

625 \ProvidesFile{swedish.idf}[\filedate\space v\fileversion\space
626 Swedish support from the isodate package]
\iso@languageloaded Define the command \iso@languageloaded in order to enable isodate.sty to

determine if at least one language is loaded.

627 \let\iso@languageloaded\active

\month@swedish Prints the name of today’s month in the long form for the original date format.

628 \def\month@swedish{\ifcase\month\or
629  januari\or februari\or mars\or april\or maj\or juni\or
630  juli\or augusti\or september\or oktober\or november\or december\fi}

\iso@printmonthday@swedish Prints the month and the day given as two arguments ({mm}{dd}) in the current date format.

631 \def\iso@printmonthday@swedish#1#2{%

Numeric and short date format: dd/mm/

632  \ifthenelse{\equal{\iso@dateformat}{numeric}\or%
633  \equal{\iso@dateformat}{short}}{%
634  \printnumber[10]{#2}/\printnumber[10]{#1}/}{%

ISO date format: -mm-dd

635  \ifthenelse{\equal{\iso@dateformat}{iso}}{%
636  \iso@isodash\printnumber[10]{#1}%
637  \iso@isodash\printnumber[10]{#2}}{%

L^{A}TEX date format: /mm/dd

638  \ifthenelse{\equal{\iso@dateformat}{TeX}}{%
639  /\printnumber[10]{#1}/\printnumber[10]{#2}}{%

Original date format: d. mmm

640  \ifthenelse{\equal{\iso@dateformat}{orig}\or
641  \equal{\iso@dateformat}{shortorig}}{%
642  \printnumber{#2}.~\begingroup
643  \edef\lmonth{#1}\def\month{\lmonth}%
644  \month@swedish%
645  \endgroup
646  }{}}}}%

647 }

\iso@printdate@swedish Prints the date given as three arguments ({yyyy}{mm}{dd}) in the actual date format

648 \def\iso@printdate@swedish#1#2#3{%
 ISO or L^{A}TEXdate format: yyyy\iso@printmonthday@swedish
649  \ifthenelse{\equal{\iso@dateformat}{iso}\or%
650  \equal{\iso@dateformat}{TeX}}{\number#1}{}%
651  \iso@printmonthday@swedish{\number#2}{\number#3}%
 numeric date format: \iso@printmonthday@swedish yyyy
652  \ifthenelse{\equal{\iso@dateformat}{numeric}}{\number#1}{%
 original date format: \iso@printmonthday@swedish~yyyy
653  \ifthenelse{\equal{\iso@dateformat}{orig}}{~\number#1}{%
 short original date format: \iso@printmonthday@swedish~yy
654  \ifthenelse{\equal{\iso@dateformat}{shortorig}}{%
655  ~\iso@twodigitsign\iso@yeartwo{\number#1}}{%
 short date format: \iso@printmonthday@swedish yy
656  \ifthenelse{\equal{\iso@dateformat}{short}}{%
657  \iso@yeartwo{\number#1}}{%
658  }}}}%

659 }

\iso@dateswedish This command redefines the \today command to print in the actual date format.

660 \def\iso@dateswedish{%
661  \def\today{\iso@printdate@swedish{\year}{\month}{\day}}}%
\iso@daterange@swedish This command takes six arguments ({yyyy1}{mm1}{dd1}{yyyy2}{mm2}{dd2})

and prints the corrosponding date range in the actual date format.

662 \def\iso@daterange@swedish#1#2#3#4#5#6{%

ISO or L^{A}TEX date format.

663 \ifthenelse{\equal{\iso@dateformat}{iso}\or%
664  \equal{\iso@dateformat}{TeX}}{%

Print the start date.

665  \csname iso@printdate@\iso@languagename\endcsname{%
666  #1}{#2}{#3}\iso@rangesign%

If year and month are equal, only print the day of the end date. If only the year is equal, only print month and day of the end date. Otherwise print the whole end date.

667  \ifthenelse{\equal{\number#1}{\number#4}}{%
668  \ifthenelse{\equal{\number#2}{\number#5}}{\printnumber[10]{#6}%
669  }{\iso@printmonthday@swedish{#5}{#6}}}{%
670  \csname iso@printdate@\iso@languagename\endcsname{#4}{#5}{#6}}}{%

Numeric, short, or original date format.

If year and month are equal, only print the day of the start date. If only the year is equal, only print month and day of the start date. Otherwise print the whole start date.

671  \ifthenelse{\equal{\number#1}{\number#4}}{%
672  \ifthenelse{\equal{\number#2}{\number#5}}{%
673  \ifthenelse{\equal{\iso@dateformat}{orig}}{%
674  \printnumber{#3}.}{\printnumber[10]{#3}}%
675  }{\iso@printmonthday@swedish{#2}{#3}}}{%
676  \csname iso@printdate@\iso@languagename\endcsname{%
677  #1}{#2}{#3}}%

Print the end date.

678  \iso@rangesign\csname iso@printdate@\iso@languagename\endcsname{%
679  #4}{#5}{#6}%
680 }{%

681 }% 682 }

\iso@rangesign@swedish Sets the word between start and end date in a date range to “ till ”.

683 \def\iso@rangesign@swedish{~till~}

Define the language name that will the active language for isodate if none of the packages babel.sty, german.sty, and ngerman.sty is loaded and if this is the last language that is used for isodate. If one of the above packages is used this definition will be overridden by the command \languagename that will always return the current used language.

684 \def\iso@languagename{swedish}%

Redefine the command \dateswedish that is used by babel to switch to the original Swedish date format to enable the use of different date formats. This has to be done after the preamble in order to ensure to overwrite the babel command.

685 \AtBeginDocument{%
686 \ifx\undefined\iso@dateswedish\else
687  \def\dateswedish{\iso@dateswedish}%
688 \fi

689 }

The end of the file.

Change History

2.00

General: Total reimplementation of the package. The old package has renamed to isodateo. . . . . . 1

2.01

General: For the case that none of the packages babel, german, and ngerman is loaded there is a

new macro \iso@languagename

that contains the name of the last loaded language. If one of the packages is loaded it contains the current language. … 1 Handle case of not loaded language package babel, german and ngerman . . . . . . . . . . . . 14

2.02

General: Added Norwegian language by Svend Tollak Munkejord . . . . . . . . . . . . . . . . . . . 27 Changed the umlauts to normal TEX commands to be able to use German dates without ger-

man.sty or babel.sty. . . . . . . . 25 2.03

General: Allow change of spaces for German language . . . . . . . 5, 24 Fixed a bug in the French language that caused not to switch to it correctly on startup. … 24

2.04

General: Added section for solvable

problems. . . . . . . . . . . . . . . . . 6 2.05

General: Added an original format with a two digit year. . . . . . . . 2 Execute options at the end of the package instead of at the end of the preamble. . . . . . . . . . . . . . 8

2.06

General: Changed range sign for French language, thanks to Felix Pütsch . . . . . . . . . . . . . . . 24

2.07

General: Added Swedish language by Christian Schlauer . . . . . . 30

Index

Numbers written in italic refer to the page where the corresponding entry is described; numbers underlined refer to the code line of the definition; numbers in roman refer to the code lines where the entry is used.

Symbols

\" . . . . . . . . . . 470, 474 \' . . . . . . . . . . 387, 389

\@namedef . . . . . . . .

. 476, 492, 505, 525

\@undefined . . . . . . . 39

\^. . . . . . . . . . . . . . 388

A

\active … 174, 239,

385, 454, 564, 627 \and . . . . . . 130, 132, 134

\AtBeginDocument . .

. 163, 232, 373, 446, 547, 620, 685

                   \AtEndOfPackage . 13–18

B \begin …. 459, 461, 465

                   \begingroup . . . . . . .

. . 74, 189, 263, 297, 320, 401, 433, 486, 578, 642

C \csname 71, 149, 152,

155, 169, 212, 217, 223, 225, 288, 293, 301, 302, 344, 349, 357, 359, 361, 365, 366, 424, 429, 438, 439, 488, 495, 508, 512, 513, 518, 520, 521, 601, 606, 612, 613, 665, 670, 676, 678

                                             \CurrentOption 32, 34,

243, 244, 476, 492, 505, 525, 526, 531, 536, 541

D

                                             \dateamerican . . . . . 379

\dateaustrian . . . . . 555
\datedanish . . . . . . . 234
\dateenglish . . . . . . 375
\datefrench . . . . . . . 448
\datefrenchb . . . . . . 449
\dategerman . . . . . . . 549
\datenaustrian . . . . 558
\datengerman . . . . . . 552
\datenorsk . . . . . . . 622
\daterange . . . . . 3, \underline{120}
\dateswedish . . . . . . 687
\dateUKenglish . . . . 376
\dateUSenglish . . . . 380

\day . . . . . . . 77, 208, 245, 264, 284, 298, 340, 402, 404, 420, 434, 435, 528, 533, 538, 543, 597, 661

\day@english . . . . . .

…. \underline{245}, 266, 299

\daymonthsepgerman .

. . . . . . . . . 5, \underline{458}

\DeclareOption . . 13–31
\DeclareRobustCommand

. . . . . . 61–66, 68, 70, 72, 81, 105, 120, 458, 466

E

\else . . . . . . . . 233, 374, 378, 447, 474, 548, 551, 554, 557, 621, 686

\end . . . . . . . . . . . . . 460

\endcsname . . . . . . .

. . 71, 149, 152, 155, 169, 212, 217, 223, 225, 288, 293, 301, 302, 344, 349, 357, 359, 361, 365, 366, 424, 429, 438, 439, 488, 495, 508, 512, 513, 518, 520, 521, 601, 606, 612, 613, 665, 670, 676, 678 \endgroup 79, 192, 267,

299, 323, 405, 436, 489, 581, 645

\equal 52, 86, 88, 90, 108, 130, 132, 134, 135, 164, 179, 180, 182, 185, 187, 188, 196, 197, 199– 201, 203, 210, 211, 214, 215, 218–220, 243, 244, 254, 255, 257, 259, 261, 262, 271, 272, 274–276, 278, 286, 287, 290, 291, 294–296, 311, 312, 314, 316, 318, 319, 328, 329, 331– 333, 335, 342, 343, 346, 347, 351–353, 363, 391, 392, 394, 397, 399, 400, 409, 410, 412– 414, 416, 422, 423, 426, 427, 430–432, 477, 478, 480, 482, 484, 485, 493, 494, 497, 499, 500, 502, 506, 507, 510, 511, 514–516, 526, 531, 536, 541, 569, 570, 572, 574, 576, 577, 585, 586, 588– 590, 592, 599, 600, 603, 604, 607–609, 632, 633, 635, 638, 640, 641, 649, 650, 652–654, 656, 663, 664, 667, 668, 671–673

\ExecuteOptions . . . 37
\expandafter . . . . . .

87, 89, 91, 109, 131, 133, 136, 167

F \fi . . . . . . . 50, 177,

235, 242, 252, 377, 381, 389, 404, 435, 450, 471, 474, 550, 553, 556, 559, 567, 623, 630, 688

\filedate 2, 172, 237,

383, 452, 562, 625

                   \fileversion . . . . . .

… 2, 172, 237, 383, 452, 562, 625

I \ier . . . . . . . . . 404, 435 \ifcase 175, 240, 245,

386, 469, 565, 628

                   \IfFileExists . . . . . . 6

\ifnum …. 404, 435, 473 \ifx 39, 233, 374, 378,

447, 548, 551, 554, 557, 621, 686

\input . . . . . . . . . 19–30

                   \InputIfFileExists . 32
                   \iso@@@date . . . . . . .

. 123, 131, 133, 136

                   \iso@@date . . . . . . .

. 122, 123, 127–129

                   \iso@date 82–85, 87,

89, 91, 106, 107, 109, 121, 123–126

                   \iso@dateamerican .

…. \underline{339}, 378–380

                   \iso@dateaustrian .

…. 537, 554, 555

                   \iso@datedanish . . .

…. \underline{207}, 233, 234

                   \iso@dateenglish . .

…. \underline{283}, 374–376

                   \iso@dateformat   \underline{60},

61–66, 179, 180, 182, 185, 187, 188, 196, 197, 199–201, 203, 210, 211, 220, 254, 255, 257, 259, 261, 262, 271, 272, 274– 276, 278, 286, 287, 296, 311, 312, 314, 316, 318, 319, 328, 329, 331–333, 335, 342, 343, 351, 391, 392, 394, 397, 399, 400, 409, 410, 412–414, 416, 422, 423, 432, 477, 478, 480, 482, 484, 485, 493, 494, 497, 499, 500, 502, 506, 507, 516, 569, 570, 572, 574, 576, 577, 585, 586, 588– 590, 592, 599, 600, 609, 632, 633, 635, 638, 640, 641, 649, 650, 652–654, 656, 663, 664, 673

\iso@datefrench . . .

…. 419, 447–449

\iso@dategerman . . .

…. 527, 548, 549

\iso@datenaustrian .

…. 542, 557, 558

\iso@datengerman . .

…. 532, 551, 552

\iso@datenorsk . . . .

…. \underline{596}, 621, 622

\iso@daterange@american

. . . . . . . . . . . \underline{341}

\iso@daterange@danish

. . . . . . . . . . . \underline{209}

\iso@daterange@english

. . . . . . . . \underline{285}, \underline{307}

\iso@daterange@french

. . . . . . . . . . . 421

\iso@daterange@norsk

. . . . . . . . . . . \underline{598}

\iso@daterange@swedish

. . . . . . . . . . . \underline{662}

                   \iso@dateswedish . .

…. \underline{660}, 686, 687

                   \iso@dmsepgerman . .

…. 455, 458, 479

                   \iso@input@english .

. . . . . . . . 91, \underline{104}

                   \iso@input@german .

. . . . . . . . 87, \underline{103}

                   \iso@input@iso . 89, \underline{102}
                   \iso@input@TeX 109, \underline{119}
                   \iso@isodash . . . . . .

67, 68, 92, 110, 137, 183, 184, 258, 271, 315, 328, 395, 481, 493, 573, 636, 637

                   \iso@languageloaded

. . 39, \underline{174}, \underline{239}, \underline{385}, \underline{454}, \underline{564}, \underline{627}

                   \iso@languagename .

. . . . . 71, 149, 152, 155, 165, 169, 212, 217, 223, 225, 231, 288, 293, 301, 302, 308, 344, 349, 357, 359, 361, 365, 366, 371, 424, 429, 438, 439, 445, 488, 495, 508, 512, 513, 518, 520, 521, 529, 534, 539, 544, 601, 606, 612, 613, 619, 665, 670, 676, 678, 684

                   \iso@mylongsepgerman

…. 456, 467, 498

                   \iso@myshortsepgerman

…. 457, 468, 503

                   \iso@printdate . . . .

. . \underline{73}, 102–104, 119

                   \iso@printdate@american

…. \underline{327}, 338, 340

                   \iso@printdate@austrian

. . . . . . . . . . . 538

                   \iso@printdate@danish

. . . . . . . . \underline{195}, 208

                                             \iso@printdate@english

…. \underline{270}, 282, 284

                                             \iso@printdate@french

. . . . . . . . 408, 420

                                             \iso@printdate@german

. . . . . . . . . . . 528

                                             \iso@printdate@naustrian

. . . . . . . . . . . 543

                                             \iso@printdate@ngerman

. . . . . . . . . . . 533

                                             \iso@printdate@norsk

. . . . . . . . \underline{584}, 597

                                             \iso@printdate@swedish

. . . . . . . . \underline{648}, 661

                                             \iso@printdate@UKenglish

. . . . . . . . . . . \underline{282}

                                             \iso@printdate@USenglish

. . . . . . . . . . . \underline{338}

                                             \iso@printmonthday@american

…. \underline{310}, 330, 348, 354, 356, 364

                                             \iso@printmonthday@danish

. \underline{178}, 198, 216, 222

                                             \iso@printmonthday@english

. \underline{253}, 273, 292, 300

                                             \iso@printmonthday@french

. 390, 411, 428, 437

                                             \iso@printmonthday@norsk

. \underline{568}, 587, 605, 611

                                             \iso@printmonthday@swedish

. \underline{631}, 651, 669, 675

                                             \iso@range@input@english

. . . . . . . . 136, \underline{154}

                                             \iso@range@input@german

. . . . . . . . 131, \underline{151}

                                             \iso@range@input@iso

. . . . . . . . 133, \underline{148}

                                             \iso@rangesign . . . .

… 71, 72, 213, 225, 289, 302, 345, 354, 356, 360, 366, 425, 439, 509, 521, 602, 613, 666, 678

                                             \iso@rangesign@american

. . . . . . . . . . . \underline{370}

                                             \iso@rangesign@danish

. . . . . . . . . . . \underline{230}

                                             \iso@rangesign@english

. . . . . . . . . . . 307

\iso@rangesign@french

. . . . . . . . . . . 444

\iso@rangesign@norsk

. . . . . . . . . . . \underline{618}

\iso@rangesign@swedish

. . . . . . . . . . . \underline{683}

\iso@tmplang . . 166, 167
\iso@twodigitsign .

. . . . . . 69, 70, 202, 277, 334, 415, 501, 591, 655

\iso@yeartwo  \underline{54}, 202,

204, 277, 279, 334, 336, 415, 417, 501, 503, 591, 593, 655, 657

\isodash . . . . . . . . 4, \underline{67} \isodate . . . . . 2, 13, \underline{63}

\isorangesign . . . . . \underline{71}

L

\languagename . 164–166

\lday . 264, 298, 402, 434 \lmonth … 190, 265,

321, 322, 403, 487, 488, 579, 643

M

\MessageBreak . . . . .

…. 43, 45, 47, 48 \month . 76, 175, 190,

208, 240, 265, 284, 322, 340, 386, 403, 420, 469, 473, 488, 528, 533, 538, 543, 565, 579, 597, 628, 643, 661

\month@austrian 473, 475
\month@danish . \underline{175}, 191
\month@english . . . .

…. \underline{240}, 266, 322

\month@french . 386, 404
\month@german . . . . .

…. 469, 472, 474

\month@naustrian . . 475
\month@ngerman . . . . 472

\month@norsk . . \underline{565}, 580
\month@swedish   \underline{628}, 644
\monthyearsepgerman

. . . . . . 5, 461, 466

N

\NeedsTeXFormat . . . . 1

\noexpand …. 404, 435 \not . . . . . . . . . . . . . 164 \numdate . . . . . 2, 14, \underline{61}

O

\or . . . . . . 175–177, 179, 187, 196, 210, 240–243, 245–251, 254, 261, 286, 311, 318, 342, 386– 388, 391, 399, 409, 422, 469– 471, 477, 484, 506, 565–567, 569, 576, 585, 599, 628–630, 632, 640, 649, 663

\origdate …. 2, 17, \underline{64}

P

\PackageError . . . 7,

33, 40, 93, 111, 138

\printdate . . . . . . 3, \underline{81}
\printdateTeX . . . 3, \underline{105}
\printnumber . . . \underline{51},

181, 183, 184, 186, 189, 215, 221, 256, 258, 260, 291, 299, 313, 315, 317, 324, 347, 355, 393, 395, 396, 398, 427, 436, 479, 481, 483, 486, 511, 517, 571, 573, 575, 578, 604, 610, 634, 636, 637, 639, 642, 668, 674

                   \ProcessOptions . . . 38

\protect . 48, 98, 99,

116, 117, 143, 144

                   \ProvidesFile . . . . .

…. 172, 237, 383, 452, 562, 625

                   \ProvidesPackage . . . 2

R

                   \RequirePackage . . . 4–6

S

                   \selectlanguage . . . 167
                   \shortdate . . . 2, 15, \underline{62}
                   \shortorigdate 2, 18, \underline{65}
                   \shortyearsign . . . 4, \underline{69}

\string . . . . . . . . . . 44

                   \SubStringsToCounter

. . . . . . . . 83– 85, 107, 124–129

T \TeXdate . . . . . 2, 16, \underline{66}

                   \theiso@@dot . . . . . . 130
                   \theiso@@minus . . . . 132
                   \theiso@@slash . . . . 135
                   \theiso@dot . . . . 86, 130
                   \theiso@minus . . 88, 132
                   \theiso@slash . . . . .

. . . . . 90, 108, 134

                   \theiso@yeartwo . 57–59

\today . . . . . . 3, 78, 208, 284, 340, 420, 528, 533, 538, 543, 597, 661

U

                   \undefined . . . . . . .

. 233, 374, 378, 447, 548, 551, 554, 557, 621, 686

                   \usepackage . . . . . 44, 48

Y \year 75, 208, 284, 340,

420, 528, 533, 538, 543, 597, 661