diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/unroman/unroman.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/unroman/unroman.dtx | 531 |
1 files changed, 0 insertions, 531 deletions
diff --git a/Master/texmf-dist/source/latex/unroman/unroman.dtx b/Master/texmf-dist/source/latex/unroman/unroman.dtx deleted file mode 100644 index 2f408253258..00000000000 --- a/Master/texmf-dist/source/latex/unroman/unroman.dtx +++ /dev/null @@ -1,531 +0,0 @@ -% \iffalse meta-comment -% -% Copyright (C) 2007 by -% Joseph Wright <joseph.wright@morningstar2.co.uk> -% -% Released under the GNU General Public License v2 -% See http://www.gnu.org/licenses/gpl.txt -% -% This work consists of the main source file unroman.dtx -% and the derived files unroman.sty and unroman.pdf -% -%<*driver> -\documentclass{ltxdoc} -\EnableCrossrefs -\CodelineIndex -\RecordChanges -%\OnlyDescription -\usepackage[T1]{fontenc} -\usepackage[english,UKenglish]{babel} -\usepackage{mathpazo,booktabs,array,url} -\usepackage{\jobname} -\begin{document} - \DocInput{\jobname.dtx} -\end{document} -%</driver> -% \fi -% -% \CheckSum{277} -% -% \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 \~} -% -% \GetFileInfo{\jobname.sty} -% -% \changes{v1.0}{2007/06/11}{Initial public release} -% -% \DoNotIndex{\@whilenum,\addtocounter,\DeclareRobustCommand,\def} -% \DoNotIndex{\do,\edef,\else,\end,\expandafter,\fi,\if,\ifnum} -% \DoNotIndex{\if,\let,\NeedsTeXFormat,\newcommand,\newcounter} -% \DoNotIndex{\newif,\PackageInfo,\ProvidesPackage} -% \DoNotIndex{\RequirePackage,\setcounter,\strlenstore,\the,\value} -% \DoNotIndex{\z@} -% -% \title{From Roman numerals to Arabic numbers} -% \author{Joseph Wright% -% \thanks{E-mail: joseph.wright@morningstar2.co.uk}} -% \date{\filedate} -% -% \maketitle -% -% \begin{abstract} -% -% The |unroman| package provides a number of functions to convert -% from Roman numerals to Arabic numbers. The set of functions is -% designed to cover a range of applications. -% -% \end{abstract} -% -% \section{Introduction} -% -% TeX and the LaTeX kernel provide a number of functions for -% converting Arabic numbers to Roman numerals. However, there is -% a lack of functions to go the opposite way, back to Arabic numbers -% from a given Roman numeral. The |unroman| package seeks to address -% this, providing a flexible set of macros for a variety of -% applications. -% -% \section{Usage} -% -% \subsection{Conversion from Roman numerals} -% -% \DescribeMacro{\unroman} -% \DescribeMacro{\unromanhead} -% \DescribeMacro{\unromantail} -% The main aim of the package is to allow Roman numerals to be turned -% into Arabic numbers. This is achieved using the -% |\unroman|\marg{numeral} macro, which takes a single argument -% \meta{numeral}. The case of \meta{numeral} is unimportant, but the -% string must only contain valid Roman numeral characters (i, v, x, -% c, d, l, m). If the string contains any non-valid characters, -% |\unroman| returns the value 0, and writes a message to the log. -% The macros |\unromanhead|\marg{numeral} and -% |\unromantail|\marg{numeral} extract a Roman numeral from the -% beginning and end of a string, respectively. This is illustrated -% in Table~\ref{tbl:examples}. -% \begin{table} -% \centering -% \begin{tabular}{ll} -% \toprule -% LaTeX code & Output \\ -% \midrule -% |\unroman{MCMXCII}| & \unroman{MCMXCII} \\ -% |\unroman{ii--xi}| & \unroman{ii--xi} \\ -% |\unromanhead{ii--xi}| & \unromanhead{ii--xi} \\ -% |\unromantail{ii--xi}| & \unromantail{ii--xi} \\ -% \bottomrule -% \end{tabular} -% \caption{Conversion examples} -% \label{tbl:examples} -% \end{table} -% -% \DescribeMacro{\unromanstore} -% \DescribeMacro{\unromanheadstore} -% \DescribeMacro{\unromantailstore} -% \newcounter{mycounter} -% Following the example of the |coolstr| package, versions of all -% three conversion macros are provided that do do produce any typeset -% output. Instead, they are designed to store the result in a LaTeX -% counter for further manipulation. So -% |\unromanstore|\marg{numeral}\marg{counter} will store the value -% of \meta{numeral} in counter \meta{counter}. For example, -% |\unromanstore{mcmxcii}{mycounter}| -% \unromanstore{mcmxcii}{mycounter} yields |\the\value{mycounter}| -% of \the\value{mycounter}. -% -% \subsection{The length of a Roman numeral} -% -% \DescribeMacro{\romanheadlen} -% \DescribeMacro{\romantaillen} -% \DescribeMacro{\romanheadlenstore} -% \DescribeMacro{\romantaillenstore} -% Using the core macros of |unroman|, it is easy to design methods -% for determining how many characters of a string constitute a valid -% Roman numeral. Obviously, if the entire string is expected to be -% a numeral, then the |\substr| macro from the |coolstr| package -% is applicable. The |unroman| package provides two functions to -% measure numerals at the end of strings, |\romanheadlen| and -% |\romantaillen|. For example, |\romantaillen{Figure~XI}| -% yields \romantaillen{Figure~XI}. Versions of both macros -% are provided which store the result in a counter, as -% |\romanheadlenstore| and |\romantaillenstore| -% -% \subsection{Reversing a string} -% -% \DescribeMacro{\reversestr} -% The most efficient method for converting Roman numerals to -% Arabic numbers in LaTeX first requires the string to be reversed. -% For example, the numeral MCMXCII is first changed to IICXMCM before -% processing. As a result, |unroman| contains code to reverse a -% string. This is made available as a user command -% |\reversestr|\marg{string}. A simple example is -% |\reversestr{Hello}|, yielding ``\reversestr{Hello}''. This command is -% robust. -% -% \StopEventually{} -% -% \iffalse -%<*package> -% \fi -% -% \section{Implementation} -% -% \subsection{Setup code} -% -% The first part of the package is concerned with basic -% identification and loading support packages. The only package -% needed is |coolstr|, which is used to provide a length-of-string -% function. -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{unroman}% - [2007/06/11 v1.0 From Roman numerals to Arabic numbers] -\RequirePackage{coolstr} -% \end{macrocode} -% -% \begin{macro}{urm@counta} -% \begin{macro}{urm@countb} -% \begin{macro}{urm@value} -% \begin{macro}{urm@stringlength} -% \begin{macro}{\ifurm@tailerror} -% Various internal counters are needed by the package in order to -% function. These are declared here. A single new Boolean is also -% needed. -% \begin{macrocode} -\newcounter{urm@counta} -\newcounter{urm@countb} -\newcounter{urm@value} -\newcounter{urm@stringlength} -\newif\ifurm@tailerror -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \subsection{Internal macros} -% -% \begin{macro}{\urm@numtoint} -% The business-end macro of the entire package is the conversion of -% a single character to its value. Using any of the case-changing -% macros (\emph{e.g.}~|\lowercase|, |\MakeLowercase|, \emph{etc.}) -% leads to problems. So the function tests for both upper- and -% lowercase letters. See also the LaTeX kernel function -% |\@slowromancap|, which takes a similar cautious approach to -% changing case. -% \begin{macrocode} -\def\urm@numtoint#1{% - \if#1i% - 1% - \else% - \if#1v% - 5% - \else% - \if#1x% - 10% - \else% - \if#1l% - 50% - \else% - \if#1c% - 100% - \else% - \if#1d% - 500% - \else% - \if#1m% - 1000% - \else% - \if#1I% - 1% - \else - \if#1V% - 5% - \else% - \if#1X% - 10% - \else% - \if#1L% - 50% - \else% - \if#1C% - 100% - \else% - \if#1D% - 500% - \else% - \if#1M% - 1000% -% \end{macrocode} -% If the character hasn't been matched, then it is not a valid -% Roman numeral. The value $-1$ is used as an indicator of this. -% \begin{macrocode} - \else% - -1% - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\urm@calc} -% The |\urm@calc| macro is the engine-room of the whole package. -% \begin{macrocode} -\def\urm@calc#1#2\end{% -% \end{macrocode} -% First, the current lead character is converted to its integer -% equivalent. This is stored in the first working counter -% \begin{macrocode} - \setcounter{urm@counta}{\urm@numtoint{#1}}% -% \end{macrocode} -% The value returned by |\urm@numtoint| is examined to check for -% the warning value $-1$. -% \begin{macrocode} - \ifnum\the\value{urm@counta}>\z@% -% \end{macrocode} -% The character returned is a valid Roman numeral. The next step is -% to compare to the value of the previous character. The value is then -% compared to that for the previous character (stored in -% |urm@countb|). Working from right to left, the current value is -% to be taken off the running total if it is less than the previous -% value. This is handled by sign inversion. -% \begin{macrocode} - \ifnum\the\value{urm@counta}<\the\value{urm@countb}% - \setcounter{urm@counta}{-\the\value{urm@counta}}% - \fi% - \addtocounter{urm@value}{\the\value{urm@counta}}% - \setcounter{urm@countb}{\the\value{urm@counta}}% -% \end{macrocode} -% Having carried out the calculation, the string being processed -% is shortened by one character, ready for the next pass. -% \begin{macrocode} - \def\urm@string@a{#2}% -% \end{macrocode} -% The case where |urm@counta| equals $-1$ value is now handled. -% Depending on which user function is in action, processing of the -% string may just stop. The alternative is to return a value of 0 -% and also provide suitable information in the run log. -% \begin{macrocode} - \else% - \ifurm@tailerror% - \PackageInfo{unroman}% - {Invalid character in string --- returning value 0}% - \setcounter{urm@value}{0}% - \fi% - \def\urm@string@a{}% - \fi% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\urm@reverse@string} -% The core of the string-reversing algorithm is picking off the -% first character of the string and using it to build a new string, -% in the opposite direction. Here, |\urm@string@b| is used to -% store the new string, while |\urm@string@c| holds the original -% information being ``eaten'' at each step. -% \begin{macrocode} -\def\urm@reverse@string#1#2\end{% - \edef\urm@string@b{#1\urm@string@b}% - \def\urm@string@c{#2}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\urm@reversestring} -% The second internal function for reversing strings loops through -% each character of the supplied string. As this function is used -% for internal reasons, it doesn't print anything. This leads to -% the need for this to be an internal function. -% \begin{macrocode} -\def\urm@reversestring#1{% - \def\urm@string@c{#1}% - \strlenstore{#1}{urm@stringlength}% - \def\urm@string@b{}% - \@whilenum\the\value{urm@stringlength}>\z@\do% - {\expandafter\urm@reverse@string\urm@string@c\end% - \strlenstore{\urm@string@c}{urm@stringlength}% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\urm@roman@length} -% The core function for finding the length of a Roman numeral -% uses |\urm@numtoint| to determine whether characters in the -% string are valid Roman numerals. Once this stops, the -% string is truncated. -% \begin{macrocode} -\def\urm@roman@length#1#2\end{% - \setcounter{urm@counta}{\urm@numtoint{#1}}% - \ifnum\the\value{urm@counta}>\z@% - \addtocounter{urm@value}{1}% - \def\urm@string@a{#2}% - \else% - \def\urm@string@a{}% - \fi% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\urm@romanlength} -% The counter for the length of a Roman numeral is set up here, and -% the same looping as used elsewhere is implemented. -% \begin{macrocode} -\def\urm@romanlength#1{% - \setcounter{urm@value}{0}% - \strlenstore{#1}{urm@stringlength}% - \def\urm@string@a{#1}% - \@whilenum\the\value{urm@stringlength}>\z@\do% - {\expandafter\urm@roman@length\urm@string@a\end% - \strlenstore{\urm@string@a}{urm@stringlength}% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\urm@make@head} -% \begin{macro}{\urm@makehead} -% The functions to strip a Roman numeral at the start of a string -% are very similar to those used to count how long such a string -% is. The only difference is the construction of a new string as -% the counting occurs. -% \begin{macrocode} -\def\urm@make@head#1#2\end{% - \setcounter{urm@counta}{\urm@numtoint{#1}}% - \ifnum\the\value{urm@counta}>\z@% - \edef\urm@string@b{\urm@string@b#1}% - \def\urm@string@a{#2}% - \else% - \def\urm@string@a{}% - \fi% -} -\def\urm@makehead#1{% - \strlenstore{#1}{urm@stringlength}% - \def\urm@string@a{#1}% - \def\urm@string@b{}% - \@whilenum\the\value{urm@stringlength}>\z@\do% - {\expandafter\urm@make@head\urm@string@a\end% - \strlenstore{\urm@string@a}{urm@stringlength}% - }% -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\urm@unroman} -% The final internal macro is the loop to convert a Roman numeral -% into a number. -% \begin{macrocode} -\newcommand*{\urm@unroman}[1]{% -% \end{macrocode} -% The counters needed are initialised. The counter |urm@value| is -% used to hold the result of the conversion, whilst |urm@countb| -% is needed to track the value of the previously-converted character. -% \begin{macrocode} - \setcounter{urm@value}{0}% - \setcounter{urm@countb}{0}% -% \end{macrocode} -% The string is reversed, as this makes it much easier to calculate -% the value of the numeral. -% \begin{macrocode} - \urm@reversestring{#1}% - \let\urm@string@a\urm@string@b% -% \end{macrocode} -% The main loop then converts the value, iterating through the string -% one character at a time. -% \begin{macrocode} - \strlenstore{\urm@string@a}{urm@stringlength}% - \@whilenum\the\value{urm@stringlength}>\z@\do% - {\expandafter\urm@calc\urm@string@a\end% - \strlenstore{\urm@string@a}{urm@stringlength}% - }% -} -% \end{macrocode} -% \end{macro} -% -% \subsection{User space macros} -% -% \begin{macro}{\reversestr} -% The string reversing macro simply calls the internal version of -% the function, then outputs the resulting string. Due to the -% interaction of the internal macros, this ends up as -% |\urm@string@b| rather than the more obvious |\urm@string@a|. -% \begin{macrocode} -\DeclareRobustCommand*{\reversestr}[1]{% - \urm@reversestring{#1}% - \urm@string@b% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\unroman} -% \begin{macro}{\unromanstore} -% \begin{macro}{\unromantail} -% \begin{macro}{\unromantailstore} -% \begin{macro}{\unromanhead} -% \begin{macro}{\unromanheadstore} -% \begin{macro}{\unromanheadlen} -% \begin{macro}{\unromanheadlenstore} -% \begin{macro}{\unromantaillen} -% \begin{macro}{\unromantaillenstore} -% All of the user space functions to generate numbers come in two -% versions. The |store| versions are modelled on the |coolstr| -% package. All of these functions simple make appropriate calls to -% the internal functions, then deal correctly with the output. -% \begin{macrocode} -\newcommand*{\unroman}[1]{% - \urm@tailerrortrue% - \urm@unroman{#1}% - \the\value{urm@value}% -} -\newcommand*{\unromanstore}[2]{% - \urm@tailerrortrue% - \urm@unroman{#1}% - \setcounter{#2}{\the\value{urm@value}}% -} -\newcommand*{\unromantail}[1]{% - \urm@tailerrorfalse% - \urm@unroman{#1}% - \the\value{urm@value}% -} -\newcommand*{\unromantailstore}[2]{% - \urm@tailerrorfalse% - \urm@unroman{#1}% - \setcounter{#2}{\the\value{urm@value}}% -} -\newcommand*{\unromanhead}[1]{% - \urm@makehead{#1}% - \expandafter\unroman\expandafter{\urm@string@b}% -} -\newcommand*{\unromanheadstore}[2]{% - \urm@makehead{#1}% - \expandafter\unromanstore\expandafter{\urm@string@b}{#2}% -} -\newcommand*{\romanheadlen}[1]{% - \urm@romanlength{#1}% - \the\value{urm@value}% -} -\newcommand*{\romanheadlenstore}[2]{% - \urm@romanlength{#1}% - \setcounter{#2}{\the\value{urm@value}}% -} -\newcommand*{\romantaillen}[1]{% - \urm@reversestring{#1}% - \expandafter\urm@romanlength\expandafter{\urm@string@b}% - \the\value{urm@value}% -} -\newcommand*{\romantaillenstore}[2]{% - \urm@reversestring{#1}% - \expandafter\urm@romanlength\expandafter{\urm@string@b}% - \setcounter{#2}{\the\value{urm@value}}% -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \iffalse -%</package> -% \fi -% \PrintChanges -% \PrintIndex -% \Finale |