% \iffalse
% +AMDG  This document was begun on 14 November 2008, the
% feast of St. Josaphat, and it is humbly dedicated to him
% and to the Immaculate Heart of Mary for their prayers, and
% to the Sacred Heart of Jesus for His mercy.
% 
% This document is copyright 2008 by Donald P. Goodman, and is
% released publicly under the LaTeX Project Public License.  The
% distribution and modification of this work is constrained by the
% conditions of that license.  See
% 	http://www.latex-project.org/lppl.txt
% for the text of the license.  This document is released
% under version 1.3 of that license, and this work may be distributed
% or modified under the terms of that license or, at your option, any
% later version.
% 
% This work has the LPPL maintenance status 'maintained'.
% 
% The Current Maintainer of this work is Donald P. Goodman
% (dgoodmaniii@gmail.com).
% 
% This work consists of the files listed in dozenalfilelist.txt.
% \fi

% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{dozenal}[2017/07/01 v7.1 support for dozenal fonts]
%<*driver>

\documentclass{ltxdoc}
\usepackage{doc}
\usepackage{verbatim}
\usepackage{url}
\usepackage[typeone]{dozenal}
\usepackage{mflogo}
\usepackage{makeidx}
\makeindex
\long\def\demonstrate#1#2{%
	\bigskip%
	\hrule%
	\hbox to\linewidth{%
		\hbox to0.5\linewidth{%
			\vbox to2in{\vfil#1\vfil}%
		}\hbox to0.5\linewidth{%
			\vbox to2in{\vfil#2\vfil}%
		}%
	}%
	\hrule%
	\bigskip%
}

\begin{document}
\DocInput{dozenal.dtx}
\end{document}
%</driver>
% \fi
% \title{The \texttt{dozenal} Package, v7.1}
% \author{Donald P.\ Goodman III}
% \date{\today}
%
% \maketitle
% \begin{abstract}\noindent
% The |dozenal| package provides some simple mechanisms for
% working with the dozenal (duodecimal or ``base 12'')
% numerical system.  It redefines all basic \LaTeX\
% counters, provides a command for converting arbitrary
% decimal numbers into dozenal, and provides new, real
% \MF\ characters for ten and eleven, though the
% commands for producing them can be redefined to produce
% any figure.  As of v2.0, it also includes Type 1 versions
% of the fonts, selected (as of v5.0) with the |typeone|
% package option.  This package uses the |\basexii|
% algorithm by David Kastrup.
% \end{abstract}
% 
% \tableofcontents
% 
% \section{Introduction}
% \label{sect:intro}
% 
% While most would probably call it at best overoptimistic and
% at worst foolish, some people (the author included) do still
% find themselves attracted to the dozenal (base-twelve)
% system.  These people, however, have been pretty hard
% up\footnote{This is an Americanism for ``out of luck'' or
% ``in difficult circumstances,'' for those who do not
% know.} in the \LaTeX\ world.  There is no package file
% available which produces dozenal counters, like page and
% chapter numbers, nor were there \emph{any} (I made a
% pretty diligent search) dozenal characters for ten and
% eleven, leaving dozenalists forced to use such makeshift
% ugliness as the ``X/E'' or ``T/E'' or ``*/\#'' or whatever
% other standard they decided to use.  While this sort of
% thing may be acceptable in ASCII, it's absolutely
% unacceptable in a beautiful, typeset document.
% 
% Enter the |dozenal| package.  This package automates all
% the messiness of being a dozenalist and using \LaTeX.  It
% redefines all the counters (though you'll have to redefine
% them yourself if you're using your own), provides an
% algorithm (generously donated by the intrepid David
% Kastrup) for converting arbitrary positive whole numbers
% into dozenal (this is e\TeX, but all modern distributions
% will compile that), and finally, it includes original
% dozenal characters, specifically designed to blend in well
% with Knuth's Computer Modern fonts, though they should do
% fine with a few other common body fonts, as well.
% 
% This document was typeset in accordance with the \LaTeX\
% \textsc{docstrip} utility, which allows automatic
% extraction of source code and documentation from the same
% source.
%
% \section{Basic Functionality}
% \label{sect:func}
%
% The |dozenal| package performs several basic tasks, which
% are the core of its functionality.  A brief listing of
% them will help the user understand the options available,
% which are explained later on in this document.
%
% \begin{itemize}
% \item Provides commands for converting decimal numbers to
% dozenal and back again.  (The ``back again,'' conversion
% of dozenal back to decimal, only works in limited
% circumstances.)
% \item Provides default characters for the two transdecimal
% digits, ``\x'' for ten and ``\e'' for eleven; these
% correspond to the accepted Unicode standard digits
% ``turned digit two'' and ``turned digit three,'' which (as
% of June 11\e\e) are now part of the Unicode standard.
% These characters copy-paste as ``X'' and
% ``E,'' the (somewhat) standard ASCII representations of
% these two digits.  However, other characters can easily be
% substituted if desired.
% \item Redefines the counters in standard \LaTeX\ document
% classes (such as |article|, |book|, and so forth) to use
% dozenal rather than decimal.  This behavior can be shut
% off if desired.
% \item Provides macros for converting dozenal numbers to
% words; e.g., ``3\e'' to ``three dozen eleven.''
% \item Provides macros for converting numbers to ``doman''
% numerals; that is, a dozenal version of Roman numerals.
% \end{itemize}
%
% That covered, we can now move on to how these features are
% exploited by the user.
% 
% \subsection{Base Conversion}
% \label{sub:numconv}
%
% The |dozenal| package provides several new commands for
% base conversion.  The first, and by far the most important
% given the purpose and content of this package, is
% |\basexii|\DescribeMacro{\basexii}.  This is a very simple
% command which takes the following structure:
% \begin{quote}
% \cs{basexii}\marg{number}\marg{ten symbol}\marg{eleven symbol}
% \end{quote}
% What the above means is that the command is |\basexii| and
% it takes three mandatory arguments:  first, the number to
% be converted into dozenal; second, the symbol that should
% be used for ten; and third, the symbol that should be used
% for eleven.  This number should be positive and whole;
% that is, it should be zero or higher, and it should not
% contain a fractional part.  \TeX\ is a typesetting
% program, after all; if you want a robust decimal to
% dozenal converter, there are many options that any
% dozenalists caring enough to use this package will already
% know about.
% 
% This |\basexii| algorithm was produced by David Kastrup,
% well known and admired in the \TeX\ world for his many
% useful packages and other contributions.  He posted this
% algorithm on comp.text.tex; it is included here with his 
% kind and generous permission.
%
% \label{page:dozens}
% That one would want to use the same ten and eleven symbols
% throughout a document seems a reasonable assumption;
% therefore, I have provided a simplified version of the
% |\basexii| command, |\dozens|\DescribeMacro{\dozens}.
% |\dozens| takes only a single argument, the number to be
% converted; the ten and eleven symbols used are those
% produced by the commands |\x| and |\e|, to which we'll get
% in a moment.
%
% Finally, as of v5.0, we can convert numbers back to
% decimal from dozenal, if we wish.  We do this with the
% \DescribeMacro{\basex}|\basex| macro, which takes a single
% argument, which is the dozenal number you wish to convert
% to decimal.  This is subject to a pretty harsh
% restriction, however:  the only tokens allowed in
% the number are 0--9, |X|, and |E|; putting in anything
% else will cause violent choking with ``expected a
% number''-type errors.
%
% To illustrate these limitations, let's define a new
% counter and dozenize it.  Here, we define the counter and
% give it a nice value which will ensure that its dozenal
% value will have an |\e| in it:
%
% \newcounter{testcount}\setcounter{testcount}{47}
% \begin{quotation}
% |\newcounter{testcount}\setcounter{testcount}{47}|
% \end{quotation}
%
% In dozenal, of course, ``47'' is ``3\e.''  Now, let's
% redefine that counter so that its results will be dozenal:
%
% \renewcommand\thetestcount{\basexii{\value{testcount}}{\x}{\e}}
% \begin{quotation}
% |\renewcommand\thetestcount{\basexii{\value{testcount}}{\x}{\e}}|
% \end{quotation}
%
% Now |dozenal| allow us to do lovely things like the following:
%
% \begin{quotation}
% |\thetestcount| = \thetestcount
% \end{quotation}
%
% It's tempting to try to put that number into |\basex| to
% get it in decimal; but don't try it;
% |\basex{\thetestcount}| doesn't work because it contains
% expanded versions of |\x| and |\e|.  Fortunately, you
% don't need it; \LaTeX\ already has the value of the
% |testcount| counter in its innards, and is quite used to
% outputting it in decimal:
%
% \begin{quotation}
% |\arabic{testcount}| = \arabic{testcount}
% \end{quotation}
%
% On the other hand, if you have an actual string you want
% converted, you can send it directly to |\basex|:
%
% \begin{quotation}
% |\basex{3E}| = \basex{3E}
% \end{quotation}
%
% So |\basex| is of limited utility, but it's a nice tool to
% add to the box.
%
% \subsection{Numbers to Words}
% \label{sub:numtowords}
%
% |dozenal| allows you to easily convert counters into
% \emph{words}, by supplying said counter's name to the
% \DescribeMacro{\doznumtoword}|\doznumtoword| macro.  It
% takes as its argument the name of a \emph{counter} (not a
% number itself!) and converts this into words:
%
% \newcounter{somecount}\setcounter{somecount}{851} 
% \begin{quote}
% |This page's number is ``\doznumtoword{page}.''| \\
% This page's number is ``\doznumtoword{page}.''
% \end{quote}
%
% This macro works with much larger numbers, as well.
% Purely for exemplary purposes, let's define a counter
% |somecount| with |\newcounter{somecount}|, and set it
% equal to (decimal) 851 with |\setcounter{somecount}{851}|.
% ``851''
% in dozenal is ``5\x\e.''  Therefore,
% |\doznumtoword{somecount}| will yield
% ``\doznumtoword{somecount}.''  If you want to change the
% capitalization, use other macros; e.g.,
% \DescribeMacro{\DOZnumtoword}|\DOZnumtoword{somecount}| gives
% ``\DOZnumtoword{somecount},'' while
% \DescribeMacro{\Doznumtoword}|\Doznumtoword{somecount}| gives
% ``\Doznumtoword{somecount}.''
%
% |\doznumtoword| (and friends) do act correctly when there
% are zeroes in the middle of the number, e.g., when
% |somecount| is equal to decimal 6977, which is dozenal
% 4055, it will output
% \setcounter{somecount}{6977}``\doznumtoword{somecount}.''
% When there's a zero at the \emph{end} of the number, that
% zero is still output:  |\doznumtoword{somecount}| where
% |somecount|\setcounter{somecount}{144} is equal to 144 gives
% ``\doznumtoword{somecount},'' not simply ``one biqua.''  I
% haven't decided yet if this is a bug or a feature; when I
% do, I'll act accordingly.
%
% The rank words (``unqua,'' ``biqua,'' and so forth) are
% all customizable by user-level commands, which are named
% |\dozrankoneword| for ``unqua,'' |\dozranktwoword| for
% ``biqua,'' and so forth.  Simply redefine them like so:
%
% \begin{quote}
% |\def\dozrankoneword{dozen}|\def\dozrankoneword{dozen} \\
% |\setcounter{somecount}{51}|\setcounter{somecount}{51} \\
% |\doznumtoword{somecount}| = \doznumtoword{somecount}
% \end{quote}
% \def\dozrankoneword{unqua}
%
% This type of macro is useful for putting page numbers in
% both digits and words, for example.
% 
% \subsection{Doman Numerals}
% \label{sub:domannums}
%
% Dozenalists have also come up with some ideas for how to
% use Roman numerals in a decimal way; therefore, the
% |dozenal| package provides some macros to assist with
% that, as well.
%
% To form ``Doman'' numerals, we simply alter the values of
% the traditional Roman characters into more
% dozenal-friendly alternatives.  So ``v'' is 6, ``x'' is
% 10, and so on.  Then, to avoid stringing four of the same
% character together, we extend the subtractive principle to
% allow up to \emph{two} lower characters prior to a
% higher-value character.  So, e.g., ``iiv'' is $6 - 2$, or
% 4, while ``iv'' is $6 - 1$, or 5.
%
% The macros |\Doman|\DescribeMacro{\Doman}\ and
% |\doman|\DescribeMacro{\doman}\ are equivalent to |\Roman|
% and |\roman|, giving either capitalized or lowercase
% dozenal Roman numerals.
%
% \newcounter{testdoman}\setcounter{testdoman}{1}
% \renewcommand\thetestdoman{\doman{\value{testdoman}}}
%
% \begin{center}
% \begin{tabular}{cccccccccccccc}
% \dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} \\
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
% \dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} \\
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
% \dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} \\
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} \\
% \dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} \\
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
% \dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} \\
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} \\
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} \\
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} \\
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} \\
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} \\
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} &
%	\dozens{\value{testdoman}} & \thetestdoman\stepcounter{testdoman} \\
% \end{tabular}
% \end{center}
%
% In the table above, the Doman numerals 1--60 are
% displayed, along with their Hindu-Arabic equivalents.  This
% table was produced entirely using a new \LaTeX\ counter,
% |testdoman|; |\thetestdoman| was defined by saying
%
% \begin{quote}
% |\renewcommand\thetestdoman{\doman{\value{testdoman}}}|
% \end{quote}
%
% The Hindu-Arabic columns were displayed with
% |\dozens{\value{testdoman}}|.  Every two table cells,
% |testdoman| is increased by one.  The whole table was
% produced without manually entering a single number in
% either form.
%
% Most commonly, Roman numerals are seen in part numbers and
% in the page numbering of frontmatter.  
% To achieve that result, do:
%
% \begin{quote}
% |\renewcommand\thepage{\doman{\arabic{page}}}|
% \end{quote}
%
% You can reset this to normal dozenal numerals (or whatever
% else you'd prefer) when you reach your mainmatter.
%
% \section{Dozenal Characters and Fonts}
% \label{sect:fonts}
%
% \subsection{Shorthands for Dozenal Characters}
% \label{sub:shorthands}
%
% To make use of the |\dozens| shorthand discussed
% earlier,\footnote{See supra, Section \ref{sub:numconv},
% at page \pageref{page:dozens}.} you need to have the
% commands |\x| and |\e| defined.  Fortunately, this package
% does that for you.
%
% |\x|\DescribeMacro{\x}\ and |\e|\DescribeMacro{\e}\ are
% the commands used to quickly and easily access the symbols
% for ten and eleven.  They default to using the special
% dozenal characters that are part of this package; they
% could be easily redefined if for some reason you don't
% like the Pitman characters (which are soon to be included
% in Unicode) in the following manner:
% \begin{quote}
% |\renewcommand\x{X}|
% \end{quote}
% Or whichever characters you like to use.  If you prefer
% the Dozenal Society of America's proposed characters (a
% stylized X and E), then this package will disappoint you.
% May I suggest |$\chi$| ($\chi$) and |$\xi$| ($\xi$) as a
% stopgap while you locate or produce real characters of
% your own?  Sorry; I'm an American myself, but I much
% prefer the Pitman characters for a variety of reasons
% (feel free to email me if you care), and creating fonts in
% \MF, even small and inconsequential ones like this, is too
% much work for characters that I don't even like.
% 
% \subsection{The \texttt{dozenal} Fonts}
% \label{sub:dozfonts}
%
% The fonts provided by the dozenal package are essentially
% complete fonts which contain only the Pitman dozenal
% characters; these are \x\ for ten and \e\ for eleven.
% These characters are designed to blend well with the
% Computer Modern fonts; they work passably well with
% Times-type fonts and with kpfonts, and possibly with
% others.
%
% The characters also come in all the appropriate shapes and
% sizes; a few examples follow.
%
% \begin{center}
% \begin{tabular}{lccc}
% {} & Roman & \textit{Italic} & \textbf{Boldface} \\
% \footnotesize Footnotesize & \footnotesize\x\ \e & \footnotesize\itshape
% 	\x\ \e & \footnotesize\bfseries \x \e \\
% \normalsize Normalsize & \normalsize\x\ \e & \normalsize\itshape
% 	\x\ \e & \normalsize\bfseries \x \e \\
% \LARGE LARGE & \LARGE\x\ \e & \LARGE\itshape
% 	\x\ \e & \LARGE\bfseries \x \e \\
% \Huge Huge & \Huge\x\ \e & \Huge\itshape
% 	\x\ \e & \Huge\bfseries \x \e \\
% \end{tabular}
% \end{center}
% 
% They will work in paragraph or math mode without
% distinction.
%
% \subsection{Tally Marks}
% \label{sub:tallymarks}
% 
% As of v4.0, |dozenal| also includes fonts for tally marks
% specifically designed for use in the dozenal base.  In many
% European countries tallies are kept in a very similar way;
% this font demonstrates a way that such tally marks can be
% made consistent as well as dozenal.
% 
% \begin{center}
% \begin{tabular}{cccccc}
% 1 & 2 & 3 & 4 & 5 & 6 \\
% \Huge\tally{1} & \Huge\tally{2} & \Huge\tally{3} & \Huge\tally{4} & \Huge\tally{5} & \Huge\tally{6} \\
% \end{tabular}
% \end{center}
%
% These are accessed by the \DescribeMacro{\tally}|\tally|
% command, which takes one argument:  the number, 1--6,
% which you want to put in tallies.  Entering ``X'' or ``E''
% will yield ``\x'' or ``\e'' respectively.  Other
% characters will produce nothing.
%
% As of v6.0, there are separate, hand-written versions of
% the tally marks, accessed by putting tallies in italic:
%
% \begin{center}\itshape
% \begin{tabular}{cccccc}
% 1 & 2 & 3 & 4 & 5 & 6 \\
% \Huge\tally{1} & \Huge\tally{2} & \Huge\tally{3} & \Huge\tally{4} & \Huge\tally{5} & \Huge\tally{6} \\
% \end{tabular}
% \end{center}
%
% In other words, to get these shapes, say
% |\textit{\tally{6}}|; this will give you
% ``\textit{\tally{6}}.''
%
% The fonts are all prefixed |dozch|, if for some reason
% direct access to them is needed.
%
% \subsection{Dozenal Radix Point}
% \label{sub:dozradixpoint}
%
% Lastly, |dozenal| allows the use of the common dozenal
% radix point, ``;'', to work properly in math mode.  Some
% dozenalists prefer to use ``;'' rather than ``.'' (or
% ``,'') to mark the transition from integers to fractions
% in numbers; e.g., three-and-a-half is ``3;6.''  In math
% mode, however, this doesn't work; a semicolon in math
% mode is punctuation, and a spurious space is inserted
% (quite correctly) afterward.  We don't want this space
% when we're using it as a radix point.  So |dozenal| (using
% code adapted from Walter Schmidt's |icomma| package) fixes
% this:
%
% |$3;6$| = 3;6
%
% And all is right with the world.
%
% \section{Package Options}
% \label{sect:packopts}
%
% The |dozenal| package redefines all the standard
% \LaTeX\ counters, such as |section| and |enumii|.  If
% you've defined your own counters, you'll need to dozenize
% them yourself; however, this is an easy matter: 
% \begin{quote}
% |\renewcommand\thecounter{\basexii{\arabic{counter}}{\x}{\e}}|
% \end{quote}
% For example.  Of course, you can fill in the |\x| and |\e|
% with whatever you want (though it would make more sense to
% simply redefine |\x| and |\e|, so that all the counters
% would use the same characters), or you could use the
% |\dozens| command instead.  Whatever your pleasure might
% be.
%
% If you \emph{don't} want all the counters to be redefined,
% or if you're using a class which doesn't include basic
% \LaTeX\ counters, you'll want to use the |nocounters|
% option.  The |nocounters|\DescribeMacro{nocounters}\
% option to the package prevents the redefinition of these
% counters.  The effect of this is that the commands of the
% package (|\basexii|, |\dozens|, etc.) are made available,
% but all the counters will still be in decimal.  This
% permits using dozenal characters in an otherwise decimal
% document; it also proves useful in document classes in
% which these counters are undefined (e.g., |minimal|).
%
% The |dozenal| fonts were designed in \MF, and they are
% distributed in both \MF-generated bitmaps and autotraced
% Postscript Type1 fonts.  The
% |typeone|\DescribeMacro{typeone}\ option forces |dozenal|
% to provide Postscript Type 1 fonts rather than \MF\
% bitmaps to \TeX.  Both of these are produced from the same
% font files, though, so the difference is very slight.
% However, the Type1 fonts do generally look better on
% screen; the |typeone| option will probably be used most of
% the time that |dozenal| itself is used.
%
% \section{Implementation}
% \label{sect:code}
% 
% Make sure that we have |fixltx2e| loaded, so that the 
% |\TextorMath| magic will work.  Also, as of v6.0, we also
% require |xstring| to use |\IfStrEq| in the number-to-word
% code.
%    \begin{macrocode}
\RequirePackage{fixltx2e}
\RequirePackage{xstring}
%    \end{macrocode}
% Now we ensure that |ifpdf| is loaded, so that we can test
% for pdf or dvi modes.  We also make sure we have
% |ifluatex|, so that |dozenal| won't choke when you use it
% with the |typeone| option.  We'll take care of the
% |luatex| stuff right away, while we're at it:
%    \begin{macrocode}
\RequirePackage{ifpdf}
\RequirePackage{ifluatex}
\ifluatex
	\protected\def\pdfmapfile {\pdfextension mapfile }
\fi
%    \end{macrocode}
% We also require |mfirstuc|, because it's \emph{great}:
%    \begin{macrocode}
\RequirePackage{mfirstuc}
%    \end{macrocode}
% Now we declare the option ``nocounters'', which prevents
% |dozenal| from redefining all the counters.  This prevents
% errors in document classes which don't have these counters,
% such as |minimal|.  Defines the command |\nocounters| if
% and only if the options is named.
%    \begin{macrocode}
\DeclareOption{nocounters}{%
	\def\nocounters{}%
}%
%    \end{macrocode}
% Now we define the |typeone| option, which forces the use
% of the Type 1 versions of the dozenal fonts.
%    \begin{macrocode}
\newif\iftypeone\typeonefalse
\DeclareOption{typeone}{\typeonetrue}
\ProcessOptions\relax
%    \end{macrocode}
% We then define the font that we're using for our
% \MF-produced Pitman characters.  Incidentally, we also
% define the command |\doz|, though I can't foresee any
% decent use for it except in packages and preambles; it is
% then used to define |\x| and |\e|, which provide the ten
% and eleven symbols for all the counter redefinitions.
% This includes definitions for both T1 and OT1 encodings,
% so it will work with either.
%    \begin{macrocode}
\iftypeone%
	\ifpdf
		\pdfmapfile{=dozenal.map}
	\fi
	\DeclareFontFamily{T1}{dozch}{}
	\DeclareFontShape{T1}{dozch}{m}{n}{<-6> dozchars6 
		<7> dozchars7 <8> dozchars8 <9> dozchars9 <10-11> 
		dozchars10 <12-16> dozchars12 <17-> dozchars17  }{}
	\DeclareFontShape{T1}{dozch}{b}{n}{<-> dozchb10 }{}
	\DeclareFontShape{T1}{dozch}{bx}{n}{<-6> dozchbx6 
		<7> dozchbx7 <8> dozchbx8 <9> dozchbx9 <10-11> 
		dozchbx10 <12-> dozchbx12 }{}
	\DeclareFontShape{T1}{dozch}{m}{sl}{<-8> dozchsl8 
		<9> dozchsl9 <10-11> dozchsl10 <12-> dozchsl12 }{}
	\DeclareFontShape{T1}{dozch}{bx}{sl}{<-> dozchbxsl10 }{}
	\DeclareFontShape{T1}{dozch}{m}{it}{<-7> dozchit7 
		<8> dozchit8 <9> dozchit9 <10-11> dozchit10 
		<12-> dozchit12 }{}
	\DeclareFontShape{T1}{dozch}{bx}{it}{<-> dozchbxi10 }{}
	\def\doz#1{{\fontfamily{dozch}\fontencoding{T1}\selectfont #1}}%
	\DeclareSymbolFont{dozens}{T1}{dozch}{m}{n}
\else%
	\DeclareFontFamily{OT1}{dozch}{}
	\DeclareFontShape{OT1}{dozch}{m}{n}{<-6> dozchars6 
		<7> dozchars7 <8> dozchars8 <9> dozchars9 <10-11> 
		dozchars10 <12-16> dozchars12 <17-> dozchars17  }{}
	\DeclareFontShape{OT1}{dozch}{b}{n}{<-> dozchb10 }{}
	\DeclareFontShape{OT1}{dozch}{bx}{n}{<-6> dozchbx6 
		<7> dozchbx7 <8> dozchbx8 <9> dozchbx9 <10-11> 
		dozchbx10 <12-> dozchbx12 }{}
	\DeclareFontShape{OT1}{dozch}{m}{sl}{<-8> dozchsl8 
		<9> dozchsl9 <10-11> dozchsl10 <12-> dozchsl12 }{}
	\DeclareFontShape{OT1}{dozch}{bx}{sl}{<-> dozchbxsl10 }{}
	\DeclareFontShape{OT1}{dozch}{m}{it}{<-7> dozchit7 
		<8> dozchit8 <9> dozchit9 <10-11> dozchit10 
		<12-> dozchit12 }{}
	\DeclareFontShape{OT1}{dozch}{bx}{it}{<-> dozchbxi10 }{}
	\def\doz#1{{\fontfamily{dozch}\fontencoding{OT1}\selectfont #1}}%
	\DeclareSymbolFont{dozens}{OT1}{dozch}{m}{n}
\fi%
\newcommand\x{\TextOrMath{\protect\doz{{X}}}{\doz@X}}%
\newcommand\e{\TextOrMath{\protect\doz{{E}}}{\doz@E}}%
\DeclareMathSymbol{\doz@X}{\mathord}{dozens}{88}%
\DeclareMathSymbol{\doz@E}{\mathord}{dozens}{69}%
%    \end{macrocode}
% Put in some additional code for the tally marks.
%    \begin{macrocode}
\newcommand\tally[1]{%
%	\usefont{OT1}{dozch}{m}{n}\selectfont{#1}%
	\doz{#1}%
}%
%    \end{macrocode}
% Then we define our command which will produce the dozenal
% numbers from decimal sources.  This algorithm was taken
% directly from the publicly available archives of
% comp.text.tex, where it was posted by the well-known and
% redoubtable David Kastrup.  We also define the |\dozens|
% command, a simplified |\basexii| (which, in fact, depends
% utterly upon |\basexii|), just to make it easy for
% everyone.
%    \begin{macrocode}
\def\basexii#1#2#3{\ifcase\numexpr(#1)\relax
0\or1\or2\or3\or4\or5\or6\or7\or8\or9\or#2\or#3\else
\expandafter\basexii\expandafter{\number\numexpr((#1)-6)/12}{#2}{#3}\expandafter\basexii\expandafter{\number\numexpr(#1)-((#1)-6)/12*12}{#2}{#3}\fi}
\newcommand\dozens[1]{\basexii{#1}{\x}{\e}}
%    \end{macrocode}
% Now that we can convert numbers \emph{to} dozenal, let's
% set it up so that we can convert them \emph{from} dozenal.
% I use |xstring| here, replacing a messy macro mesh from
% the last version (5.3).
%    \begin{macrocode}
\newcount\doz@countchar
\def\doz@charcount#1{%
	\StrLen{#1}[\doz@filler]%
	\doz@countchar=\doz@filler%
}%
%    \end{macrocode}
% Now we develop our conversion routines for |\basex|.  For
% v6.0, these were hugely simplified by using the |xstring|
% package instead of trying to bash through in plain
% \TeX, which eventually worked but was \emph{not} pretty.
% We start by defining a few counters to help us out:
%    \begin{macrocode}
\newcount\doz@lfiller\doz@lfiller=-1%
\newcount\doz@total\doz@total=0%
\newcount\doz@loopi\doz@loopi=0%
\newcount\doz@multiplier\doz@multiplier=1%
%    \end{macrocode}
% Next we adopt a macro from TeX.SE question 140476, from
% user "Dan", which works like a charm even when using
% counter values rather than simple integers.  These macros
% let us grab an individual character from a string; in this
% case, from the argument of |\basex|.
%    \begin{macrocode}
% macro from TeX.SE question 140476, posted by user "Dan"
\def\ninthofmany#1#2#3#4#5#6#7#8#9{#9\gobbletorelax}
\def\gobbletorelax#1\relax{}
\def\doz@CharAt#1#2{%
	\expandafter\ninthofmany\romannumeral\numexpr(9000-\number#1000)#2\relax}
% end "Dan" macro
%    \end{macrocode}
% Here's where the money happens.  We loop through each
% digit of the argument, multiplying it by the appropriate
% factor of 10 (the dozen, of course), and then add that to
% a rolling total.  At the end, we output the number.
%    \begin{macrocode}
\def\doz@ten{X}%
\def\doz@elv{E}%
\def\doz@basex#1{%
	\doz@total=0%
	\doz@loopi=\doz@countchar%
	\doz@multiplier=1%
	\def\doz@wholenum{#1}%
	\loop\ifnum\doz@loopi>0%
		\def\doz@currchar{\doz@CharAt{\number\doz@loopi}{\doz@wholenum}}%
		\if\doz@currchar\doz@ten%
			\doz@lfiller=10%
		\else\if\doz@currchar\doz@elv%
			\doz@lfiller=11%
		\else%
			\doz@lfiller=\doz@currchar%
		\fi\fi%
		\multiply\doz@lfiller by\doz@multiplier%
		\multiply\doz@multiplier by12%
		\advance\doz@total by\doz@lfiller%
		\advance\doz@loopi by-1%
	\repeat%
	\the\doz@total%
}%
\def\basex#1{%
	\doz@charcount{#1}%
	\doz@loopi=0%
	\doz@basex{#1}%
	\doz@multiplier=1%
	\doz@total=0%
}%
%    \end{macrocode}
% Finally, we define the macros for creating ``Doman''
% (dozenal Roman) numerals.  One, of course, is defined in
% terms of the other.  First, though, we need a modulus
% operator:
%    \begin{macrocode}
\newcount\doz@modulus%
\def\doz@modulo#1#2{%
	\doz@modulus=#1%
	\divide\doz@modulus by#2%
	\multiply\doz@modulus by#2%
	\multiply\doz@modulus by-1%
	\advance\doz@modulus by#1\relax%
}%
\newcount\doz@quotient%
\def\doz@quot#1#2{%
	\doz@quotient=#1%
	\divide\doz@quotient by#2%
}%
%    \end{macrocode}
% Now we can move on to the meat of the operation:
%    \begin{macrocode}
\newcount\doz@romct%
\newif\ifdoz@domancaps%
\def\doz@doman#1{%
	\doz@romct=#1%
	\doz@quot{\doz@romct}{1728}%
	\loop\ifnum\doz@quotient>0%
		\ifdoz@domancaps M\else m\fi%
		\advance\doz@quotient by-1%
		\advance\doz@romct by-1728%
	\repeat
	\ifnum\doz@romct>1440
		\ifnum\doz@romct<1584
			\ifdoz@domancaps CCM\else ccm\fi%
			\advance\doz@romct by-1440
		\else%\ifnum\doz@romct>1583
			\ifdoz@domancaps CM\else cm\fi%
			\advance\doz@romct by-1584
		\fi
	\fi
	\ifnum\doz@romct>575%
		\ifnum\doz@romct<719
			\ifdoz@domancaps CCD\else ccd\fi%
			\advance\doz@romct by-576
		\else
			\ifnum\doz@romct<864%
				\ifdoz@domancaps CD\else cd\fi%
				\advance\doz@romct by-720%
			\fi
		\fi
	\else
		\ifnum\doz@romct>719
			\ifdoz@domancaps D\else d\fi%
			\advance\doz@romct by-719%
		\fi
	\fi
	\doz@quot{\doz@romct}{144}%
	\loop\ifnum\doz@quotient>0%
		\ifdoz@domancaps C\else c\fi%
		\advance\doz@quotient by-1%
		\advance\doz@romct by-144%
	\repeat
	\ifnum\doz@romct>119
		\ifnum\doz@romct<132
			\ifdoz@domancaps XXC\else xxc\fi%
			\advance\doz@romct by-120
		\else
			\ifdoz@domancaps XC\else xc\fi%
			\advance\doz@romct by-132
		\fi
	\fi
	\ifnum\doz@romct>71
		\ifdoz@domancaps L\else l\fi%
		\advance\doz@romct by-72
	\fi
	\ifnum\doz@romct>47%
		\ifnum\doz@romct>59%
			\ifdoz@domancaps XL\else xl\fi%
			\advance\doz@romct by-60%
		\else
			\ifdoz@domancaps XXL\else xxl\fi%
			\advance\doz@romct by-48%
		\fi
	\fi
	\doz@quot{\doz@romct}{12}%
	\loop\ifnum\doz@quotient>0%
		\ifdoz@domancaps X\else x\fi%
		\advance\doz@quotient by-1%
		\advance\doz@romct by-12%
	\repeat
	\doz@modulo{\doz@romct}{12}%
	\ifnum\doz@modulus=10
		\ifdoz@domancaps IIX\else iix\fi%
		\advance\doz@romct by-10
	\fi
	\ifnum\doz@modulus=11
		\ifdoz@domancaps IX\else ix\fi%
		\advance\doz@romct by-11
	\fi
	\ifnum\doz@romct>5
		\ifdoz@domancaps V\else v\fi%
		\advance\doz@romct by-6
	\fi
	\ifnum\doz@romct>3%
		\ifnum\doz@romct=4%
			\ifdoz@domancaps IIV\else iiv\fi%
			\advance\doz@romct by-4%
		\else
			\ifnum\doz@romct=5%
				\ifdoz@domancaps IV\else iv\fi%
				\advance\doz@romct by-5%
			\fi
			\ifnum\doz@romct=6%
				\ifdoz@domancaps V\else v\fi%
				\advance\doz@romct by-6
			\fi
		\fi
	\fi
	\doz@quot{\doz@romct}{1}%
	\loop\ifnum\doz@quotient>0%
		\ifdoz@domancaps I\else i\fi%
		\advance\doz@quotient by-1%
		\advance\doz@romct by-1%
	\repeat
}
\protected\def\doman#1{%
	\doz@domancapsfalse%
	\doz@doman{#1}%
}%
\protected\def\Doman#1{%
	\doz@domancapstrue%
	\doz@doman{#1}%
}%
%    \end{macrocode}
% Now, of course, we simply redefine all the counters.  This
% covers only those counters included in the basic \LaTeX\
% document classes, however, so if you've written your own,
% you'll need to redefine them yourself.
%
% This first bit ensures that the counters are redefined
% even if the command |\mainmatter| is not defined.  We have
% to do this outside of the |\g@addto@macro| below;
% otherwise, in documents where |\mainmatter| is defined but
% not used, the counters will not be redefined.  This way,
% they're redefined in all cases.
% 
% This also takes care of ensuring that the counters are
% only redefined if the ``nocounters'' options was
% \emph{not} specified.
%    \begin{macrocode}
\@ifundefined{nocounters}{%
	\@ifundefined{c@page}{}{%
		\renewcommand\thepage{\basexii{\value{page}}{\x}{\e}}}
	\@ifundefined{c@footnote}{}{%
		\renewcommand\thefootnote{%
			\basexii{\value{footnote}}{\x}{\e}}}
	\@ifundefined{c@part}{}{%
		\renewcommand\thepart{%
			\basexii{\value{part}}{\x}{\e}}}
	\@ifundefined{c@subparagraph}{}{%
		\renewcommand\thesubparagraph{%
		\basexii{\value{subparagraph}}{\x}{\e}}}
	\@ifundefined{c@paragraph}{}{%
		\renewcommand\theparagraph{%
			\basexii{\value{paragraph}}{\x}{\e}}}
	\@ifundefined{c@equation}{}{%
		\renewcommand\theequation{%
			\basexii{\value{equation}}{\x}{\e}}}
	\@ifundefined{c@figure}{}{%
		\renewcommand\thefigure{%
			\basexii{\value{figure}}{\x}{\e}}}
	\@ifundefined{c@table}{}{%
		\renewcommand\thetable{%
			\basexii{\value{table}}{\x}{\e}}}
	\@ifundefined{c@table}{}{%
		\renewcommand\thempfootnote{%
			\basexii{\value{mpfootnote}}{\x}{\e}}}
	\@ifundefined{c@enumi}{}{%
		\renewcommand\theenumi{%
			\basexii{\value{enumi}}{\x}{\e}}}
	\@ifundefined{c@enumii}{}{%
		\renewcommand\theenumii{%
			\basexii{\value{enumii}}{\x}{\e}}}
	\@ifundefined{c@enumiii}{}{%
		\renewcommand\theenumiii{%
			\basexii{\value{enumiii}}{\x}{\e}}}
	\@ifundefined{c@enumiv}{}{%
		\renewcommand\theenumiv{%
			\basexii{\value{enumiv}}{\x}{\e}}}
	\@ifundefined{c@chapter}{%
		\renewcommand\thesection{%
			\basexii{\value{section}}{\x}{\e}}
		\renewcommand\thesubsection{%
			\thesection.\basexii{\value{subsection}}{\x}{\e}}
		\renewcommand\thesubsubsection{%
			\thesubsection.\basexii{\value{subsubsection}}{\x}{\e}}
	}{
		\renewcommand\thechapter{%
			\basexii{\value{chapter}}{\x}{\e}}
		\renewcommand\thesection{%
			\thechapter.\basexii{\value{section}}{\x}{\e}}
		\renewcommand\thesubsection{%
			\thesection.\basexii{\value{subsection}}{\x}{\e}}
		\renewcommand\thesubsubsection{%
			\thesubsection.\basexii{\value{subsubsection}}{\x}{\e}}
	}
%    \end{macrocode}
% Finally, if the |\mainmatter| command is used, we need to
% make sure that it doesn't mess up our numbering scheme.
%    \begin{macrocode}
\@ifundefined{mainmatter}{}{%
	\g@addto@macro\mainmatter{%
		\@ifundefined{c@page}{}{%
			\renewcommand\thepage{\basexii{\value{page}}{\x}{\e}}}
		\@ifundefined{c@footnote}{}{%
			\renewcommand\thefootnote{\basexii{\value{footnote}}{\x}{\e}}}
		\@ifundefined{c@part}{}{%
			\renewcommand\thepart{\basexii{\value{part}}{\x}{\e}}}
		\@ifundefined{c@subparagraph}{}{%
			\renewcommand\thesubparagraph{%
				\basexii{\value{subparagraph}}{\x}{\e}}}
		\@ifundefined{c@paragraph}{}{%
			\renewcommand\theparagraph{%
				\basexii{\value{paragraph}}{\x}{\e}}}
		\@ifundefined{c@equation}{}{%
			\renewcommand\theequation{%
				\basexii{\value{equation}}{\x}{\e}}}
		\@ifundefined{c@figure}{}{%
			\renewcommand\thefigure{%
				\basexii{\value{figure}}{\x}{\e}}}
		\@ifundefined{c@table}{}{%
			\renewcommand\thetable{%
				\basexii{\value{table}}{\x}{\e}}}
		\@ifundefined{c@table}{}{%
			\renewcommand\thempfootnote{%
				\basexii{\value{mpfootnote}}{\x}{\e}}}
		\@ifundefined{c@enumi}{}{%
			\renewcommand\theenumi{%
				\basexii{\value{enumi}}{\x}{\e}}}
		\@ifundefined{c@enumii}{}{%
			\renewcommand\theenumii{%
				\basexii{\value{enumii}}{\x}{\e}}}
		\@ifundefined{c@enumiii}{}{%
			\renewcommand\theenumiii{%
				\basexii{\value{enumiii}}{\x}{\e}}}
		\@ifundefined{c@enumiv}{}{%
			\renewcommand\theenumiv{%
				\basexii{\value{enumiv}}{\x}{\e}}}
		\@ifundefined{c@chapter}{
			\renewcommand\thesection{%
				\basexii{\value{section}}{\x}{\e}}
			\renewcommand\thesubsection{%
				\thesection.\basexii{\value{subsection}}{\x}{\e}}
			\renewcommand\thesubsubsection{%
				\thesubsection.\basexii{\value{subsubsection}}{\x}{\e}}
		}{
			\renewcommand\thechapter{%
				\basexii{\value{chapter}}{\x}{\e}}
			\renewcommand\thesection{%
				\thechapter.\basexii{\value{section}}{\x}{\e}}
			\renewcommand\thesubsection{%
				\thesection.\basexii{\value{subsection}}{\x}{\e}}
			\renewcommand\thesubsubsection{%
				\thesubsection.\basexii{\value{subsubsection}}{\x}{\e}}
		} % end if it's defined
	}
}
}{} % end redefinition of counters block
%    \end{macrocode}
% Now we begin the number-to-word macros.  First, we define
% the macros which allow the user to specify his own words
% for each rank:
%    \begin{macrocode}
\def\dozrankoneword{unqua}
\def\dozranktwoword{biqua}
\def\dozrankthreeword{triqua}
\def\dozrankfourword{quadqua}
\def\dozrankfiveword{pentqua}
\def\dozranksixword{hexqua}
\def\dozranksevenword{septqua}
\def\dozrankeightword{octqua}
\def\dozranknineword{ennqua}
\def\dozranktenword{decqua}
\def\dozrankelvword{elvqua}
%    \end{macrocode}
% Then we define some |\if|s to help us decide how we should
% capitalize the end result.
%    \begin{macrocode}
\newif\ifDOZcaps\DOZcapsfalse
\newif\ifDozcaps\Dozcapsfalse
%    \end{macrocode}
% Then, we give some utility macros:
%    \begin{macrocode}
\def\doz@expandloop#1{\doz@xloop#1\relax}
\def\doz@xloop#1{%
	\ifx\relax#1\else%
	\doz@numword#1%
	\expandafter\doz@xloop\fi%
}
\def\printdozrankword{}
\def\doz@rankword{%
	\ifnum\doz@countchar=12
		\def\printdozrankword{\dozrankelvword}%
	\fi
	\ifnum\doz@countchar=11
		\def\printdozrankword{\dozranktenword}%
	\fi
	\ifnum\doz@countchar=10
		\def\printdozrankword{\dozranknineword}%
	\fi
	\ifnum\doz@countchar=9
		\def\printdozrankword{\dozrankeightword}%
	\fi
	\ifnum\doz@countchar=8
		\def\printdozrankword{\dozranksevenword}%
	\fi
	\ifnum\doz@countchar=7
		\def\printdozrankword{\dozranksixword}%
	\fi
	\ifnum\doz@countchar=6
		\def\printdozrankword{\dozrankfiveword}%
	\fi
	\ifnum\doz@countchar=5
		\def\printdozrankword{\dozrankfourword}%
	\fi
	\ifnum\doz@countchar=4
		\def\printdozrankword{\dozrankthreeword}%
	\fi
	\ifnum\doz@countchar=3
		\def\printdozrankword{\dozranktwoword}%
	\fi
	\ifnum\doz@countchar=2
		\def\printdozrankword{\dozrankoneword}%
	\fi
	\ifnum\doz@countchar=1
		\def\printdozrankword{\relax}%
	\fi
	\advance\doz@countchar by-1
	\ifDOZcaps
		\edef\printdozrankword{\uppercase{\printdozrankword}}%
	\fi
	\ifDozcaps
		\edef\printdozrankword{\capitalisewords{\printdozrankword}}%
	\fi
	\ifnum\doz@countchar>0
		\ \printdozrankword\ %
	\else
		\printdozrankword%
	\fi
}%
\def\doz@numword#1{%
	\IfStrEq{#1}{0}{\def\doz@numberword{zero}}{}%
	\IfStrEq{#1}{1}{\def\doz@numberword{one}}{}%
	\IfStrEq{#1}{2}{\def\doz@numberword{two}}{}%
	\IfStrEq{#1}{3}{\def\doz@numberword{three}}{}%
	\IfStrEq{#1}{4}{\def\doz@numberword{four}}{}%
	\IfStrEq{#1}{5}{\def\doz@numberword{five}}{}%
	\IfStrEq{#1}{6}{\def\doz@numberword{six}}{}%
	\IfStrEq{#1}{7}{\def\doz@numberword{seven}}{}%
	\IfStrEq{#1}{8}{\def\doz@numberword{eight}}{}%
	\IfStrEq{#1}{9}{\def\doz@numberword{nine}}{}%
	\IfStrEq{#1}{X}{\def\doz@numberword{ten}}{}%
	\IfStrEq{#1}{E}{\def\doz@numberword{eleven}}{}%
	\ifDOZcaps
		\edef\doz@numberword{\uppercase{\doz@numberword}}%
	\fi
	\ifDozcaps
		\edef\doz@numberword{\makefirstuc{\doz@numberword}}%
	\fi
	\doz@numberword%
	\doz@rankword%
}%
\def\doznumtoword#1{%
	\edef\thenumber{\basexii{\value{#1}}{X}{E}}%
	\expandafter\doz@charcount\expandafter{\thenumber}%
	\expandafter\doz@expandloop\expandafter{\thenumber}%
	\doz@countchar=0%
}%
\def\DOZnumtoword#1{%
	\DOZcapstrue%
	\doznumtoword{#1}%
	\DOZcapsfalse%
}%
\def\Doznumtoword#1{%
	\Dozcapstrue%
	\doznumtoword{#1}%
	\Dozcapsfalse%
}%
%    \end{macrocode}
% Our last job is to make sure the semicolon (Humphrey
% point) works correctly as a radix point in math mode.
% This code is adapted from the |icomma| package by Walter
% Schmidt.
%    \begin{macrocode}
\AtBeginDocument{%
   	\mathchardef\humphrey\mathcode`\;%
   	\mathcode`\;="8000 %
}
{\catcode`;=\active
   	\gdef;{\futurelet\@let@token\sm@rtsemi}
}
\def\sm@rtsemi{%
   	\ifx\@let@token\@sptoken \else
   	\ifx\@let@token\space \else
   	\mathord\fi\fi \humphrey}
%    \end{macrocode}
% And that's the end.  Thanks for reading, 
% folks; please email me with any suggestions or improvements.
