From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/grnumalt/grnumalt.dtx | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 macros/latex/contrib/grnumalt/grnumalt.dtx (limited to 'macros/latex/contrib/grnumalt/grnumalt.dtx') diff --git a/macros/latex/contrib/grnumalt/grnumalt.dtx b/macros/latex/contrib/grnumalt/grnumalt.dtx new file mode 100644 index 0000000000..df20e518e6 --- /dev/null +++ b/macros/latex/contrib/grnumalt/grnumalt.dtx @@ -0,0 +1,281 @@ +%% \CheckSum{134} +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%\iffalse +% +%% This is file `grnumalt.dtx' +%% (c) 1997 Apostolos Syropoulos. +%% All rights reserved. +% +% Please report errors or suggestions for improvement to +% +% Apostolos Syropoulos +% 366, 28th October Str. +% GR-671 00 Xanthi, GREECE +% apostolo@platon.ee.duth.gr or apostolo@obelix.ee.duth.gr +% +%\fi +% +% \iffalse +% \begin{macrocode} +%<*driver> +\documentclass{ltxdoc} +\def\PiIt#1{{% + \newdimen\boxW \newdimen\boxH + \settowidth{\boxW}{#1}% + \settoheight{\boxH}{#1}% + \addtolength{\boxW}{0.8pt} + \vbox{% + \hrule width\boxW\hbox{% + \vrule height\boxH\mbox{#1}% + \vrule height\boxH}}\kern.5pt}} +\GetFileInfo{grnumalt.drv} +\begin{document} + \DocInput{grnumalt.dtx} +\end{document} +% +% \end{macrocode} +% \fi +% +%\title{Athenian Numerals} +%\author{Apostolos Syropoulos\\366, 28th October Str.\\ +%GR-671 00 Xanthi, HELLAS\\ Email:\texttt{apostolo@platon.ee.duth.gr}} +% \date{1997/09/19} +%\maketitle +% +%\MakeShortVerb{\|} +% +%\section{Introduction} +% +% This little \LaTeX\ package implements the macro +% \DescribeMacro{\athnum} +% |\athnum|. The macro transforms an Arabic numeral, i.e., the kind +% of numerals we all use (e.g., 1, 5, 789 etc), to the corresponding +% {\itshape Athenian} numeral. Athenian numerals were in use only in +% ancient Athens. +% The special multiples, which the system employs, are drawn +% \DescribeMacro{\PiIt} with the special macro |\PiIt|. The macro +% produces a more or less $\Pi$-like shape above a letter. +% +%\section{The Numbering System} +% +% The athenian numbering system, like the roman one, employs +% letters to denote important numbers. Multiple occurrence of a letter denote +% a multiple of the ``important'' number, e.g., the letter I denotes 1, so +% III denotes 3. Here are the basic digits used in the Athenian numbering +% system: +% \begin{itemize} +% \item I denotes the number one (1) +% \item $\Pi$ denotes the number five (5) +% \item $\Delta$ denotes the number ten (10) +% \item H denotes the number one hundred (100) +% \item X denotes the number one thousand (1000) +% \item M denotes the number ten thousands (10000) +%\end{itemize} +% Moreover, the letters $\Delta$, H, X, and M under the letter $\Pi$, +% denote five times their original value, e.g., the symbol +% \PiIt{X}, denotes the number 5000, and the symbol +% \PiIt{$\Delta$}, denotes the number 50. It must be noted that +% the numbering system does not provide negative numerals or a symbol for +% zero. +% +% The Athenian numbering system is described, among others, in an article in +% Encyclopedia $\Delta o\mu\acute{\eta}$, Vol. 2, page 280, 7th edition, +% Athens, October 2, 1975. +% +% \section{The Code} +% Before we do anything further, we have to identify the package. +% \StopEventually +% +% \begin{macrocode} +%<*package> +\ProvidesPackage{grnumalt}[1997/09/19\space v1.1] +\typeout{Package: `grnumalt' v1.0\space <1997/09/19> (AS)} +% \end{macrocode} +% +%\begin{macro}{\PiIt} +% It is very important to be able to correctly typeset the multiples of +% the numbering system. For this purpose we define the macro |\PiIt|. The +% macro uses two ``length'' variables. +% \begin{macrocode} +\newdimen\@boxW \newdimen\@boxH +% \end{macrocode} +% We make the |\PiIt| macro a robust command. +% \begin{macrocode} +\DeclareRobustCommand{\PiIt}[1]{% +% \end{macrocode} +% In order to correctly produce the $\Pi$ symbol we need to know the +% height and width of the letter that goes under a $\Pi$. This is done by +% using the standard \LaTeX\ macros: |\settowidth| and |\settoheight|. +% \begin{macrocode} + \settowidth{\@boxW}{#1}% + \settoheight{\@boxH}{#1}% +% \end{macrocode} +% Since, the width of an ordinary rule is 0.4 pt we must add 0.8 pt to +% the width of the letter. +% \begin{macrocode} + \addtolength{\@boxW}{0.8pt} +% \end{macrocode} +% Now comes the interesting part: the actual drawing. We create a vertical +% box. Inside this box we draw a horizontal rule of width equal to +% the width of the letter. Next, we create a horizontal box in order to +% make the vertical lines. We draw the first vertical line, then we put +% the letter in a |\mbox|, since it may be a mathematical +% symbol\footnote{greek letters are considered mathematical symbols +% by \TeX.}. After the |\mbox| we draw the second vertical line and we +% ``close'' the horizontal box. A little white space is put after the vertical +% box, so that adjacent multiplies do not look ugly! +% \begin{macrocode} + \vbox{% + \hrule width\@boxW\hbox{% + \vrule height\@boxH\mbox{#1}% + \vrule height\@boxH}}\kern.5pt} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\athnum} +% Now, we turn our attention to the definition of the macro +% |\athnum|. This macro uses one integer variable. +% \begin{macrocode} +\newcount\@ath@num +% \end{macrocode} +% The macro |\athnum| is also defined as a robust command. +% \begin{macrocode} +\DeclareRobustCommand{\athnum}[1]{% +% \end{macrocode} +% The macro does not work in math mode so we must ensure that it will not +% be used in math mode. We could use |\ensuremath|, but our definition +% is too long... +% \begin{macrocode} + \ifmmode + \errhelp{^^J This macro has been defined to work^^J + *only* in non-math mode. It is definitely^^J + sure that you are using it in math mode.^^J}% + \errmessage{^^JYou can't use macro atheniannumeral^^J + in math mode.^^J}% +% \end{macrocode} +% If we are not in math mode, we can start computing the Athenian numeral. +% After assigning to variable |\@ath@num| the value of the macro's argument, we +% make sure that the argument is in the expected range, i.e., it is greater +% than zero. In case it isn't we simply produce a |\space|, warn the user +% about it and quit. +% \begin{macrocode} + \else\@ath@num#1\relax + \ifnum\@ath@num=\z@% + \space% + \PackageWarning{grnumalt}{% + Illegal value (\the\@ath@num) for athenian numeral}% + \else\ifnum\@ath@num<\z@% + \space% + \PackageWarning{grnumalt}{% + Illegal value (\the\@ath@num) for athenian numeral}% + \else$ +% \end{macrocode} +% Having done all the necessary checks, we are now ready to do the actual +% computation. If the number is greater than $49999$, then it certainly +% has at least one \PiIt{M} ``digit''. We find all such digits by continuously +% subtracting $50000$ from |\NumA|, until |\NumA| becomes less than +% $50000$. +% \begin{macrocode} + \loop\ifnum\@ath@num>49999 + \PiIt{$\mathrm{M}$} + \advance\@ath@num-50000 + \repeat +% \end{macrocode} +% We now check for tens of thousands. +% \begin{macrocode} + \loop\ifnum\@ath@num>9999 + \mathrm{M}\advance\@ath@num-\@M + \repeat +% \end{macrocode} +% Since a number can have only on \PiIt{X} ``digit'' (equivalent to 5000), it +% is easy to check it out and produce the corresponding numeral in case it does +% have one. +% \begin{macrocode} + \ifnum\@ath@num>4999 + \PiIt{$\mathrm{X}$} + \advance\@ath@num-5000 + \fi +% \end{macrocode} +% Next, we check for thousands, the same way we checked for tens of thousands. +% \begin{macrocode} + \loop\ifnum\@ath@num>999 + \mathrm{X}\advance\@ath@num-\@m + \repeat +% \end{macrocode} +% Like the five thousands, a numeral can have at most one \PiIt{H} ``digit'' +% (equivalent to 500). +% \begin{macrocode} + \ifnum\@ath@num>499 + \PiIt{$\mathrm{H}$} + \advance\@ath@num-500 + \fi +% \end{macrocode} +% It is time to check hundreds, which follow the same pattern as thousands +% \begin{macrocode} + \loop\ifnum\@ath@num>99 + \mathrm{H}\advance\@ath@num-100 + \repeat +% \end{macrocode} +% A numeral can have only one \PiIt{$\Delta$} ``digit'' (equivalent to 50). +% \begin{macrocode} + \ifnum\@ath@num>49 + \PiIt{$\Delta$} + \advance\@ath@num-50 + \fi +% \end{macrocode} +% Let's check now decades. +% \begin{macrocode} + \loop\ifnum\@ath@num>9 + \Delta\advance\@ath@num by-10 + \repeat +% \end{macrocode} +% We check for fives and, finally, for the digits 1, 2, 3, and 4. +% \begin{macrocode} + \ifnum\@ath@num>4 + \Pi + \advance\@ath@num-5 + \fi + \ifcase\@ath@num + \or\mathrm{I} + \or\mathrm{II} + \or\mathrm{III} + \or\mathrm{IIII} + \fi$ + \fi\fi\fi} +% \end{macrocode} +% \DescribeMacro{\@athnum} The command |\@athnum| is defined just to make +% it possible to have, e.g., page numbering with athenian numerals. +% \begin{macrocode} +\let\@athnum\athnum +% +% \end{macrocode} +%\end{macro} +% +% \noindent{\large\bfseries Dedication}\\ +% I would like to dedicate this piece of work to my son Demetrios-Georgios. +% +% \Finale +% +\endinput + + + + + + + + + -- cgit v1.2.3