% \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 dozenal.dtx, dozenal.sty,
% dozchars6.mf, dozchars7.mf, dozchars8.mf, dozchars9.mf,
% dozchars10.mf, dozchars12.mf, dozchars17.mf, dozchsl8.mf,
% dozchsl9.mf, dozchsl10.mf, dozchsl12.mf, dozchb10.mf,
% dozchbx5.mf, dozchbx6.mf, dozchbx7.mf, dozchbx8.mf, dozchbx9.mf, 
% dozchbx10.mf, dozchbx12.mf, dozchit7.mf, dozchit8.mf, 
% dozchit9.mf, dozchit10.mf, dozchit12.mf, dozchbxi10.mf, 
% dozchbxsl10.mf, dozenal.mf, dozenalb.mf, dozenali.mf, 
% testdozchars.tex, dozenal.sty, and dozenal.pdf, along with 
% the README.
% \fi
%
% \maketitle
% \begin{abstract}
% 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
% Metafont characters for ten and eleven, though the
% commands for producing them can be redefined to produce
% any figure.  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 the more common body fonts, as well.
% 
% This document was typeset in accordance with the \LaTeX\
% \textsc{docstrip} utility.
%
% \section{Usage}
% \label{sect:usage}
%
% The |dozenal| package provides four new commands (though
% I can only take credit for two of them).  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 symbol
% that should be used for ten; second, the symbol that
% should be used for eleven; and third, the number that
% should be converted into dozenal using those two symbols.
% 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.
%
% 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.
% 
% |\x|\DescribeMacro{\x} and |\e|\DescribeMacro{\e} are the
% commands used to quickly and easily access the symbols for
% ten and eleven without having to use active characters
% (the \TeX\ gurus will know what that means; if you don't
% know, that's okay; you don't need to to use this package
% effectively).  In any case, |\x| and |\e| 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 this package,
% and the Dozenal Society of Great Britain, prefer), 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.
% 
% The |dozenal| package also redefines all the standard
% \LaTeX\ counters, such as |section| and |enumii|.  If
% you've defined your own counters, you'll need to define
% 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.
% 
% \section{Implementation}
% \label{sect:code}
% 
% First, we name the package that we provide.  This is
% not exactly the most difficult part of the code.
%    \begin{macrocode}
\ProvidesPackage{dozenal}
%    \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.
%    \begin{macrocode}
\DeclareFontFamily{OT1}{dozch}{}
\DeclareFontShape{OT1}{dozch}{m}{n}{<-7> 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 }{}
\newcommand\doz[1]{{\fontfamily{dozch}\selectfont #1}}
\newcommand\x{\protect\doz{X}}%
\newcommand\e{\protect\doz{E}}%
%    \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, 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.
%    \begin{macrocode}
\@ifundefined{c@page}{}{\renewcommand\thepage{\basexii{\arabic{page}}{\x}{\e}}}
\@ifundefined{c@chapter}{}{\renewcommand\thechapter{\basexii{\arabic{chapter}}{\x}{\e}}}
\@ifundefined{c@footnote}{}{\renewcommand\thefootnote{\basexii{\arabic{footnote}}{\x}{\e}}}
\@ifundefined{c@section}{}{\renewcommand\thesection{\basexii{\arabic{section}}{\x}{\e}}}
\@ifundefined{c@subsection}{}{\renewcommand\thesubsection{\basexii{\arabic{subsection}}{\x}{\e}}}
\@ifundefined{c@subsubsection}{}{\renewcommand\thesubsubsection{\basexii{\arabic{subsubsection}}{\x}{\e}}}
\@ifundefined{c@part}{}{\renewcommand\thepart{\basexii{\arabic{part}}{\x}{\e}}}
\@ifundefined{c@subparagraph}{}{\renewcommand\thesubparagraph{\basexii{\arabic{subparagraph}}{\x}{\e}}}
\@ifundefined{c@paragraph}{}{\renewcommand\theparagraph{\basexii{\arabic{paragraph}}{\x}{\e}}}
\@ifundefined{c@equation}{}{\renewcommand\theequation{\basexii{\arabic{equation}}{\x}{\e}}}
\@ifundefined{c@figure}{}{\renewcommand\thefigure{\basexii{\arabic{figure}}{\x}{\e}}}
\@ifundefined{c@table}{}{\renewcommand\thetable{\basexii{\arabic{table}}{\x}{\e}}}
\@ifundefined{c@table}{}{\renewcommand\thempfootnote{\basexii{\arabic{mpfootnote}}{\x}{\e}}}
\@ifundefined{c@enumi}{}{\renewcommand\theenumi{\basexii{\arabic{enumi}}{\x}{\e}}}
\@ifundefined{c@enumii}{}{\renewcommand\theenumii{\basexii{\arabic{enumii}}{\x}{\e}}}
\@ifundefined{c@enumiii}{}{\renewcommand\theenumiii{\basexii{\arabic{enumiii}}{\x}{\e}}}
\@ifundefined{c@enumiv}{}{\renewcommand\theenumiv{\basexii{\arabic{enumiv}}{\x}{\e}}}
%    \end{macrocode}
% And that's the end.  Thanks for reading, 
% folks; please email me with any suggestions or improvements.
% \printindex
