% \iffalse
%% File: euro.dtx      Copyright (C) 1999--2005    Melchior FRANZ
%% $Id: euro.dtx,v 1.14 2005/03/07 14:22:19 m Exp $
%% $Version: 1.1 $
%<*preamble>
%
%
%
% on Unix/Linux just run "make" to get the style file and the documentation;
% else generate the driver euro.ins (if you don't already have it):
%
%     $ latex euro.dtx
%
% Now generate the style file:
%
%     $ tex euro.ins
%
% And finally to produce the documentation run LaTeX three times:
%
%     $ latex euro.dtx
%
%
%
%
% This package needs the fp-package!
%
% fp      -- CTAN//macros/latex/contrib/other/fp/  --  (by Michael MEHLICH)
%
%$
%% ====================================================================
%%  @LaTeX-package-file{
%%     author          = "Melchior FRANZ",
%%     version         = "1.1",
%%     date            = "7 March 2005",
%%     filename        = "euro.dtx",
%%     address         = "Melchior FRANZ
%%                        Rieder Hauptstrasse 52
%%                        A-5212 SCHNEEGATTERN
%%                        AUSTRIA",
%%     telephone       = "++43 7746 3109",
%%     URL             = "http://members.aon.at/mfranz/TeX/",
%%     email           = "mfranz \# aon : at",
%%     codetable       = "ISO/ASCII",
%%     keywords        = "euro",
%%     supported       = "yes",
%%     docstring       = "This document describes the euro package, which
%%                        converts arbitrary national currency amounts
%%                        using the Euro as base unit, and typesets monetary amounts
%%                        in almost any desired way. Write e.g. \ATS{17.6} to get
%%                        something like `17,60 \"oS  (1,28 Euro)' automatically.
%%                        Conversion rates for the so-called Euro-zone countries
%%                        are already built-in. Further rates can be added easily."
%%  }
%% ====================================================================
%
% COPYRIGHT NOTICE:
% This package is free software that can be redistributed and/or modified
% under the terms of the LaTeX Project Public License as specified
% in the file macros/latex/base/lppl.txt on any CTAN archive server.
%
% Note that you may freely distribute modified versions of this documentation, with one
% exception: If you modify or remove section "The European Union & Software Patents",
% you agree that your and/or your company's/institution's name may be listed in said
% section in any official distribution.
%</preamble>
%
%
%
%<*batchfile>
\begin{filecontents}{euro.ins}
\def\batchfile{euro.ins}
\input docstrip.tex
\askforoverwritefalse
\keepsilent
\generate{\file{euro.sty}{\from{euro.dtx}{package}}}
\endbatchfile
\end{filecontents}
%</batchfile>
%
%
%<*driver>
\def\fileversion{1.1}
\def\filedate{2005/03/07}
\documentclass{ltxdoc}
%
%
%
\ifx\makehyperref\EUROundefined
    \newcommand*\texorpdfstring[2]{#1}
    \newcommand*\color[1]{}
\else   ^^A for "make hyper"
    \usepackage{hyperref}
    \hypersetup{
        bookmarksopen,
        colorlinks,
        pdftitle={The euro package},
        pdfauthor={Melchior FRANZ},
        pdfsubject={${}$Id: euro.dtx,v 1.14 2005/03/07 14:22:19 m Exp ${}$},
        pdfkeywords={currency, euro, monetary, conversion}
    }
    \usepackage[pdftex]{graphicx,color}
\fi
%
%
%
\IfFileExists{euro.sty}
  {\usepackage{euro}[1999/05/15]\let\EUROSTYfound\active}
  {\GenericWarning{euro.dtx}
    {Package file `euro.sty' not found. All the instructive^^J^^A
    examples will be replaced by boldfaced question marks.^^J^^A
    (Generate `euro.sty' by (La)TeXing `euro.ins' and process^^J^^A
    `euro.dtx' three times to get the documentation right.)^^J}
  \newcommand*\EURO[1]{\EUROii}
  \newcommand*\EUROii[2][]{\textbf{??}}
  \newcommand*\EUROFORMAT[2]{}
  \newcommand*\EUROADD[3]{}
  \newcommand*\EUROSYM[2]{}}
%
\usepackage{multicol}
\setcounter{tocdepth}{2}
\begin{document}
\DocInput{euro.dtx}
\end{document}
%</driver>
% \fi
%
%
% \CheckSum{452}
% \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         \~}
%
%
% \newcommand*\opt{\textsf}
% \newcommand*\DescribeOption[1]{\leavevmode
%   \marginpar{\raggedleft\opt{\strut#1\strut}}\ignorespaces}
%
% \newcommand*\ATS{\EURO{ATS}}
% \newcommand*\EUR{\EURO{EUR}}
% \newcommand*\DEM{\EURO{DEM}}
% \newcommand*\ESP{\EURO{ESP}}
% \newcommand*\ITL{\EURO{ITL}}
% \newcommand*\USD[1]{{%
%   \EUROFORMAT{main}{\in}%
%   \EUROFORMAT{in}{\val\,\$}%
%   \EUROFORMAT{EUR}{\form,.,\round{-2}}%
%   \EURO{EUR}{#1}}}
% \newcommand*\NUM[1]{{%
%   \EUROFORMAT{main}{\in}%
%   \EUROFORMAT{in}{\val}%
%   \EUROFORMAT{EUR}{\form,.,\round{-10}}%
%   \EURO{EUR}{#1}}}
%
%
% \makeatletter
% ^^A Don't use this! It's really ugly!      :-(
% \newcommand*\euro{\unitlength.7em
%   \begin{picture}(1.2,1)(-.2,.1)
%     \linethickness{.05em}
%     \qbezier(.8,.9)(.5,1.2)(.1,.87)
%     \qbezier(.1,.87)(-.0,.78)(0,.5)
%     \qbezier(.0,.5)(-.0,.22)(.35,.1)
%     \qbezier(.35,.1)(.54,.02)(.77,.22)
%     \put(-.12,.65){\line(1,0){.9}}
%     \put(-.12,.46){\line(1,0){.8}}
%   \end{picture}}
%
% \newenvironment{example}[1][.45\textwidth]
%   {\par\medskip\begin{tabular}{p{#1}l}}
%   {\end{tabular}\noindentafter\medbreak}
%
% \newenvironment{syntax}
%   {\par\medskip\def\<##1>{$\langle$\textit{##1}$\rangle$}%
%    \indent\begin{tabular}{l}}
%   {\end{tabular}\noindentafter\medbreak}
%
% \newcommand*\noindentafter{\@nobreaktrue\everypar{{\setbox\z@\lastbox}}}
%
% \newenvironment{labeling}[1]
%  {\list{}{\settowidth{\labelwidth}{\textbf{#1}}
%  \leftmargin\labelwidth\advance\leftmargin\labelsep
%  \def\makelabel##1{\textbf{##1}\hfil}}}{\endlist}
%
% \makeatother
%
% \changes{v0.1}{1999/02/01}{initial version}%
% \changes{v0.2}{1999/05/15}{interface completely new; integer rounding implemented}%
% \changes{v1.0}{2001/10/12}{greek currency added}%
% \changes{v1.1}{2003/02/19}{specific currency formats inherit generic settings}%
%
%
%
%
% \title{The \texttt{euro} package}
% \author{Melchior \textsc{FRANZ}}
% \date{March 7, 2005}
% \maketitle
%
%
%
% \begin{abstract}
% \EUROSYM{EUR}{\euro}^^A  introduce the Euro symbol for within the abstract only
%
% This article describes the |euro| package^^A
%      \footnote{This package has version number \fileversion, last revised \filedate.},
% which converts arbitrary currency units into each other using the \emph{Euro}
% (official symbol \euro
%      \footnote{The \euro\ symbol in this documentation is
%      `handmade'---it is really ugly and not to be used in real documents. Take the well designed symbol
%      defined e.\,g.~in the |eurosym| package by \textsc{Henrik Theiling} eventually using
%      the |eurofont| package by \textsc{Rowland McDonnell} to select the proper fo(u)nt/shape.}^^A
% ) as base unit, and formats monetary amounts in almost any desired way.
% The respective conversion rates are predefined for the national
% currency units of the \emph{Euro-zone} countries, every other
% currency unit can easily be added.
% The package allows to type e.\,g.\ |\ATS{17.6}| to get something
% like \ATS{17.6}. All necessary calculations are with high precision done
% by the great |fp| package^^A
%      \footnote{\(\langle\)|CTAN//macros/latex/contrib/other/fp/|\(\rangle\)}
% by \textsc{Michael Mehlich},
% which you have to install to get this package working.
% The package complies with the concerned rules and orders of the European
% Council.
% \end{abstract}
%
%
%
% {\setlength{\parskip}{0pt}\tableofcontents}
% \addtocontents{toc}{\protect\begin{multicols}{2}}
%
%
% \section{Introduction}
%
% Twelve of the fifteen members of the European Union have agreed
% to replace their national currencies by a common currency, the
% \emph{Euro}. Before the 1\textsuperscript{st} of January 2001 the Euro was only a
% unit for calculations, with fixed conversion rates for
% each of the old currencies. Since then the Euro is actual money with
% coins and bank notes. The Francs, the D-Mark, the Schilling,
% they are history.
% Several further countries will join the European Union over
% the next years, and sooner or later also the so-called \emph{Euro-zone}.
% It's still common practice in Europe to write monetary amounts both in the national
% currency and in the new \euro~currency,
% thus helping to become familiar with the \emph{Euro}.
%
% But it's a nuisance to convert every value by hand or even with
% a calculator. Let our computers do all the hard work.
% Although \TeX\ is unable to do such calculations with
% its basic arithmetic functions, there's a way out: The |fp| package
% allows to deal with numbers ranging from
% \(-999999999999999999{,}999999999999999999\) to
% \(+999999999999999999{,}999999999999999999\) with high precision.
%
% Since there are so many currencies and different possible formats,
% this package provides only a customizable interface. All parameters are
% predefined in a common way, though, so that no further definitions will be
% necessary in most cases. The package tries to load an optional file
% `|euro.cfg|' where such local customizing commands may be placed in
% (see section~\ref{sec:config} for further explanation).
%
%
%
%
%
% \section{How to use the package}
%
% \subsection{The main macro}
%
% The \DescribeMacro{\EURO}|\EURO| command does the main work.
% It takes the \textit{source currency unit,} an optional \textit{destination currency unit,}
% both as three-digits \textsc{ISO} currency codes (see table \ref{tab:iso}), and
% the respective \emph{money amount}.
%
% \begin{syntax}
% |\EURO{|\<source currency unit>|}[|\<destination currency unit>|]{|\<amount>|}|
% \end{syntax}
%
%
% \begin{table}
% \begin{quote}
% \begin{center}
% \begin{tabular}{ll@{\hspace{2cm}}ll}
% \texttt{EUR}& Europe&    \texttt{GRD}& Greece\\
% \texttt{ATS}& Austria&   \texttt{IEP}& Ireland\\
% \texttt{BEF}& Belgium&   \texttt{ITL}& Italy\\
% \texttt{DEM}& Germany&   \texttt{LUF}& Luxembourg\\
% \texttt{ESP}& Spain&     \texttt{NLG}& The Netherlands\\
% \texttt{FIM}& Finland&  \texttt{PTE}& Portugal\\
% \texttt{FRF}& France
% \end{tabular}
%
% \caption{ISO currency codes of the \emph{Euro} and of the twelve \emph{Euro-zone} countries.}
% \label{tab:iso}
% \end{center}
% \end{quote}
% \end{table}
%
% A dot is to be used as \emph{decimal `point'} separating a number's integer and
% fractional part. Numbers may of course be negative.
% If the optional destination currency unit is omitted, the \emph{Euro} is taken.
%
% \begin{example}
% |\EURO{BEF}[FIM]{70}|&  \EURO{BEF}[FIM]{70}\\
% |\EURO{FIM}[BEF]{70}|&  \EURO{FIM}[BEF]{70}\\
% |\EURO{BEF}[BEF]{70}|&  \EURO{BEF}[BEF]{70}\rlap{\hspace{3.5em}[surprised?]}\\
% |\EURO{FIM}{17.8}|&     \EURO{FIM}{17.8}
% \end{example}
% \null
%
%
%
%
% \subsection{How to change the local style}
%
% The ISO currency codes don't really look good in running text. You
% can replace them by some other currency symbol or tag using the
% \DescribeMacro{\EUROSYM}|\EUROSYM| command.
%
% \begin{syntax}
% |\EUROSYM{|\<currency unit>|}{|\<symbol>|}|
% \end{syntax}
%
% We Austrians, for example, prefer to write `\"oS' instead of `ATS'.
% We don't have to write |\EUROSYM{ATS}{\"oS}| though, because this national
% style (like those of some other countries) is already predefined. If your
% national style is still missing, please drop me a line, and I will insert it.
% Meanwhile the \textsc{ISO} currency codes are used in such cases.
%
% \begin{example}
% |\EURO{FRF}{16.3}|&      \EURO{FRF}{16.3}\\
% |\EUROSYM{FRF}{Francs}|&\\
% |\EURO{FRF}{16.3}|&      \EUROSYM{FRF}{Francs}\EURO{FRF}{16.3}
% \end{example}
%
% The official Euro symbol is not provided by default, since there are a lot of
% different fonts and methods to produce an \euro\ sign. Type
% |\EUROSYM{EUR}{|\(\langle\)\textit{euro symbol}\(\rangle\)|}| to
% replace the word `Euro' with your local \euro\ sign.
% (I'm still hoping that some day the text companion fonts will contain the official in
% addition or instead of the phantasy \emph{Euro} symbols.)
% This documentation, for example, says |\EUROSYM{EUR}{\euro}|
% because it has its own |\euro| symbol built-in. (Isn't it beautiful?)
%
% \begin{example}
% |\EURO{LUF}{137.8}|&      \EURO{LUF}{137.8}\\
% |\EUROSYM{EUR}{\euro}|&\\
% |\EURO{LUF}{137.8}|&      \EUROSYM{EUR}{\euro}\EURO{LUF}{137.8}
% \end{example}
%
% \EUROSYM{EUR}{\euro}    ^^A define this globally now
%
%
% Writing e.\,g.~|\EURO{ATS}{...}| again and again is cumbersome, so it's recommended to
% define macros for the most often used currency units. You may put such definitions
% into your local configuration file (see section~\ref{sec:config}).
%
% \begin{example}
% |\newcommand*\ATS{\EURO{ATS}}|\\
% |\ATS{9.90}|& \ATS{9.90}\\
% |\ATS[ITL]{19.90}|& \ATS[ITL]{19.90}
% \end{example}
% \null
%
%
%
%
% \subsection{The package options}
% \label{sec:options}
%
% The |euro| package provides six package options. See table~\ref{tab:options} for
% a short demonstration.
%
% \begin{labeling}{\opt{emdash}~~}
% \item[\textbf{\opt{eco}}]
%   The \opt{eco} option typesets monetary amounts as, I think,
%   economists prefer it, with \textsc{ISO} codes preceding the values.
% \item[\textbf{\opt{dots}}]
%   The \opt{dots} option inserts dots as three-digits group
%   separators. (Default is a little space like \rule{.4pt}{.75em}\,\rule{.4pt}{.75em}.)
% \item[\textbf{\opt{table}}]
%   Turns the \emph{table mode} globally on.
%   While integers are normally printed without decimal point and fractional part (sic!),
%   it may especially in tables be desirable to typeset a decimal point followed by a dash.
%   See section \ref{sec:align} for how to keep this behavior local to a particular table.
% \item[\textbf{\opt{emdash}}]
%   Lets the \opt{table} dashes be `---'. Doesn't turn on \emph{table mode}.
%   (This option is selected by default, so it doesn't make much sense at
%   the moment. But this might change some day.)
% \item[\textbf{\opt{endash}}]
%   Lets the \opt{table} dashes be `--'. Doesn't turn on \emph{table mode}.
% \item[\textbf{\opt{zeros}}]
%   Lets zeros be printed instead of dashes. Doesn't turn on \emph{table mode}.
% \end{labeling}
%
%
% \begin{table}
% \begin{center}
%^^A the options are only faked here   ;-)
% \makeatletter
% \begin{tabular}{lr}%
% |\EURO{ATS}{1000}| with&\\[.5ex]
% \hline\\[-1.5ex]
% (default settings)&
%   \EURO{ATS}{1000}\\
% \opt{dots}&\let\EURO@lsep.\let\EURO@rsep.^^A
%   \EURO{ATS}{1000}\\
% \opt{endash}&\let\EURO@table\EURO@endash
%   \EUROFORMAT{main}{\table\in\ (\out)}^^A
%   \EURO{ATS}{1000}\\
% \opt{emdash}&\let\EURO@table\EURO@emdash
%   \EUROFORMAT{main}{\table\in\ (\out)}^^A
%   \EURO{ATS}{1000}\\
% \opt{zeros}&\let\EURO@table\EURO@zeros
%   \EUROFORMAT{main}{\table\in\ (\out)}^^A
%   \EURO{ATS}{1000}\\
% \opt{eco}&
%   \EUROFORMAT{in}{\iso~\val}^^A
%   \EUROFORMAT{out}{\iso~\val}^^A
%   \EURO{ATS}{1000}\\
% \opt{eco,endash}&\let\EURO@table\EURO@endash
%   \EUROFORMAT{main}{\table\in\ (\out)}^^A
%   \EUROFORMAT{in}{\iso~\val}^^A
%   \EUROFORMAT{out}{\iso~\val}^^A
%   \EURO{ATS}{1000}\\
% \opt{eco,emdash}&\let\EURO@table\EURO@emdash
%   \EUROFORMAT{main}{\table\in\ (\out)}^^A
%   \EUROFORMAT{in}{\iso~\val}^^A
%   \EUROFORMAT{out}{\iso~\val}^^A
%   \EURO{ATS}{1000}\\
%   \end{tabular}
% \end{center}
% \caption{Package options}
% \label{tab:options}
% \end{table}
%
%
%
%
% \subsection{Adding currency units}
%
% If some day further countries will join the \emph{Euro-zone,} you can easily
% add their currency units to your document files or, better, to
% your local `|euro.cfg|' configuration file.
% The |euro| package will then, of course, be updated as soon as possible.
%
% \begin{syntax}
% |\EUROADD{|\<ISO code>|}{|\<national style/symbol>|}{|\<conversion rate>|}|
% \end{syntax}
%
% The conversion rate describes, how many units of the new currency
% equal 1~\euro. You can also add currencies, that will
% probably never become member of the \emph{Euro-zone,} like the US-\$. But be aware that such
% conversion rates may change daily/hourly! See \(\langle\)|http://europa.eu.int/|\(\rangle\) for the
% actual rates. The used \textsc{ISO} code serves as identifier for the
% respective currency unit.
%
% \EUROADD{GBP}{\textit{\char`\$}}{0.6694}
% \begin{example}
% |%  1 Euro = 0.6694 Pound Sterling    (March 11, 1999)|\hspace*{-4.5cm}\\
% |%|\\
% |\EUROADD{GBP}{\textsterling}{0.6694}|\hspace*{-3cm}\\
% |\newcommand*\GBP{\EURO{GBP}}|\\
% \\
% |\GBP{47.11}|&            \EURO{GBP}{47.11}\\
% |\GBP[FRF]{47.11}|&       \EURO{GBP}[FRF]{47.11}\\
% |\EURO{EUR}[GBP]{1}|&     \EURO{EUR}[GBP]{1}
% \end{example}
%
% The pound symbol in this example looks a bit too slanted. You'd better take
% |\textsterling| from the |textcomp| package, which I didn't.
%
%
%
%
%
%
% \section{Further customization}
% \label{sec:format}
%
% The desirable format for monetary amounts may differ from country to country and from purpose to purpose.
% The |euro| package uses three kinds of format strings to customize the format, each of which may
% consist of some \emph{reserved keywords} and any other \TeX\ commands. It's a good idea
% to put such commands in your local configuration file (see section~\ref{sec:config}).
%
%
%
% \subsection{The main format}
%
% The main format defines how source and destination currency shall be arranged.
%
% \begin{syntax}
% |\EUROFORMAT{main}{|\<main format string>|}|
% \end{syntax}
%
% The \emph{reserved keywords} |\in| and |\out| stand for the source and the destination currency.
% The following table shows some possible formats with the first line showing the
% default definition.
%
% \begin{example}[.58\hsize]
%                                         & |\EURO{ATS}{30}| yields\\[.5ex]
% \hline\\[-1.5ex]
% |\EUROFORMAT{main}{\in\ (\out)}|&         \EURO{ATS}{30}\\
% |\EUROFORMAT{main}{\in\slash\out}|&       \EUROFORMAT{main}{\in\slash\out}\EURO{ATS}{30}\\
% |\EUROFORMAT{main}{\in\ ($=$\,\out)}|&    \EUROFORMAT{main}{\in\ ($=$\,\out)}\EURO{ATS}{30}\\
% |\EUROFORMAT{main}{\in\ (that is \out)}|& \EUROFORMAT{main}{\in\ (that is \out)}\EURO{ATS}{30}\\
% |\EUROFORMAT{main}{\out}|&                \EUROFORMAT{main}{\out}\EURO{ATS}{30}
% \end{example}
% \null
%
%
%
%
% \subsection{The currency format}
%
%
% The currency format defines how the source and the destination currency
% shall be formatted.
%
% \begin{syntax}
% |\EUROFORMAT{in}{|\<currency format string>|}|\\
% |\EUROFORMAT{out}{|\<currency format string>|}|
% \end{syntax}
%
% The \emph{reserved keywords} |\val|, |\iso| and |\sym| have a special meaning, but
% almost every other \TeX\ command may be used as well.
%
% \medskip\indent
% \begin{tabular}{@{\texttt\bgroup}l@{\egroup\quad}p{.8\hsize}}
% \string\val&   monetary amount\\
% \string\iso&   \textsc{ISO} currency code\\
% \string\sym&   national currency style\slash tag (if defined; \textsc{ISO} code else)\\
% \end{tabular}
%
% \medskip\noindent
% For some currency units
% the |\sym| command produces only the \textsc{ISO} code instead of the national style,
% which I didn't know. This will (with your help!) be changed in future releases.
% The following table shows the most obvious arrangements. All said about the |in| format
% string is also true for the |out| format.
%
% {\EUROFORMAT{main}{\in}\newcommand\EUROaux{\hspace{1.2cm}}
% \begin{example}[.58\textwidth]
% with |\EUROFORMAT{main}{\in}|  & |\EURO{ATS}{30}| yields\\
% \hspace{2cm}and&\\[.5ex]
% \hline\\[-1.5ex]
% |\EUROFORMAT{in}{\val~\sym}|&  \EUROaux\EURO{ATS}{30}\\
% |\EUROFORMAT{in}{\val~\iso}|&  \EUROaux\EUROFORMAT{in}{\val~\iso}\EURO{ATS}{30}\\
% |\EUROFORMAT{in}{\sym~\val}|&  \EUROaux\EUROFORMAT{in}{\sym~\val}\EURO{ATS}{30}\\
% |\EUROFORMAT{in}{\iso~\val}|&  \EUROaux\EUROFORMAT{in}{\iso~\val}\EURO{ATS}{30}
% \end{example}}
% \null
%
%
%
%
%
%
%
% \subsection{The number format}
%
% The number format, finally, defines how the numbers themselves should be
% typeset considering positive\slash negative numbers, rounding and so on.
%
% \begin{syntax}
% |\EUROFORMAT{all}{|\<number format>|}|\\
% |\EUROFORMAT{|\<ISO currency code>|}{|\<number format>|}|
% \end{syntax}
%
% The definitions labeled with |all| will be used for all currency units.
% By using |\EUROFORMAT| with one of the three-digits \textsc{ISO} codes
% as the first argument, these general settings can be overridden for this
% currency.
% Only the \emph{Italian Lira} is defined this way by default, because it
% wouldn't make sense to write \emph{Lira} amounts with two fractional digits
% like the other European currencies.^^A
% \footnote{The package, for example, says something like
% \texttt{\string\EUROFORMAT\char`\{ITL\char`\}\char`\{\string\round\char`\{0\char`\}\char`\}}.} ^^A   8-P
%
% The \textit{number format string} may contain the commands |\form|,
% |\round|, |\zero|, |\plus|, and |\minus|, each of which takes one or
% more arguments. You have only to mention the points that shall differ
% from the default behavior.
% Such a number format might look horrible like this
%
% \begin{example}
% |\EUROFORMAT{all}{%|\\
% |  \form{\,}{,}{\,}%|\\
% |  \round{-2}%|\\
% |  \zero{0}{0}{}%|\\
% |  \plus{}{}%|\\
% |  \minus{\(-\)}{}}|
% \end{example}
%
% which, by fortune, is the predefined default format\footnote{Well, that is a lie: In fact,
% it is only the equivalent of the default definition, which is defined in another way.},
% but it might as well be empty or contain only one of the commands and its arguments.
% Here again all arguments are predefined quite reasonably, so you won't have
% to bother with these verbose definitions.
%
% To make further explanations easier, figure~\ref{fig:nomencl} describes the elements
% that a number may consist of (using my own nomenclature).
%
% \begin{center}
% \begin{figure}
% {\setlength{\unitlength}{1mm}
% \begin{picture}(80,60)(-15,10)
%   \put(50,55){\makebox(0,0)[l]{preamble}}
%     \put(48,55){\line(-1,0){46.5}}
%     \put(1.5,55){\line(0,-1){27}}
%   \put(50,50){\makebox(0,0)[l]{integer part}}
%     \put(3,24){\makebox(8,10){\downbracefill}}
%     \put(48,50){\line(-1,0){41}}
%     \put(7,50){\line(0,-1){19}}
%   \put(50,45){\makebox(0,0)[l]{decimal point}}
%     \put(48,45){\line(-1,0){36.5}}
%     \put(11.5,45){\line(0,-1){17}}
%   \put(50,40){\makebox(0,0)[l]{fractional part}}
%     \put(12.5,24){\makebox(11,10){\downbracefill}}
%     \put(48,40){\line(-1,0){30}}
%     \put(18,40){\line(0,-1){9}}
%   \put(50,35){\makebox(0,0)[l]{postamble (none in this example)}}
%     \put(48,35){\line(-1,0){23}}
%     \put(25,35){\line(0,-1){7}}
% \put(0,25){\makebox(0,0)[l]{\(-\)1 000,234 567}}
%   \put(50,15){\makebox(0,0)[l]{fractional group separator}}
%     \put(48,15){\line(-1,0){30}}
%     \put(18,15){\line(0,1){8}}
%   \put(50,10){\makebox(0,0)[l]{integer group separator}}
%     \put(48,10){\line(-1,0){43}}
%     \put(5,10){\line(0,1){13}}
% \end{picture}}
% \caption{Elements that a number may consist of.}
% \label{fig:nomencl}
% \end{figure}
% \end{center}
%
%
%
%
%
% \subsubsection{The \texttt{\char`\\form} command}
%
% The \DescribeMacro{\form}|\form| command takes three arguments: the \emph{integer group separator},
% the \emph{decimal point} and the \emph{fractional group separator}.
%
% \begin{syntax}
% |\form|\\
% |  {|\<integer group separator>|}|\\
% |  {|\<decimal point>|}|\\
% |  {|\<fractional group separator>|}|
% \end{syntax}
%
%
% \begin{description}
% \item[group separators:]
%   separate groups of three decimal digits to improve legibility of bigger numbers.
%   It's a small space by default, but taking a space, a dot or just nothing might be
%   desirable in some cases.
% \item[decimal point:]
%   separates a number's integer part from the fractional part. It's a comma by default.
%
%   {\EUROFORMAT{main}{\in}
%   \EUROFORMAT{in}{\align\val\hspace*{1cm}}
%   \newcommand*\test[3]{\EUROFORMAT{EUR}{\form{#1}{#2}{#3}}\EURO{EUR}{1000.12345}}
%   \medskip\noindent
%   \begin{center}
%   \begin{tabular}{lr}
%   |\form{.}{,}{.}|&        \test{.}{,}{.}\\
%   |\form{\,}{,}{\,}|&      \test{\,}{,}{\,}\\
%   |\form{~}{,}{~}|&        \test{~}{,}{~}\\
%   |\form{}{,}{}|&          \test{}{,}{}\\
%   |\form{,}{.}{,}|&        \test{,}{.}{,}\\
%   |\form{,}{$\cdot$}{,}|&  \test{,}{$\cdot$}{,}
%   \end{tabular}
%   \end{center}}
% \end{description}
%
%
%
%
% \subsubsection{The \texttt{\char`\\round} command}
%
% The \DescribeMacro{\round}|\round| command takes the \emph{rounding number} as argument.
%
% \begin{syntax}
% |\round{|\<rounding number>|}|
% \end{syntax}
%
% It describes where to round the given money amount. Positive values round to integer digits,
% negative numbers round to fractional digits. Numbers lower than \(-9\) suppress rounding.
%
%   {\EUROFORMAT{main}{\align\in}
%   \EUROFORMAT{in}{\val}
%   \newcommand*\test[1]{\EUROFORMAT{EUR}{\round{#1}}\EURO{EUR}{12345.67898765}}
%   \medskip\noindent
%   \begin{center}
%   \begin{tabular}{r@{\hspace{1cm}}r@{\hspace{1.8cm}}}%
%   \textit{rounding}& \textit{result}\\[.5ex]
%   \hline\\[-1.5ex]
%    |-10|&      \test{-10}\\
%    |-4|&      \test{-4}\\
%    |-3|&      \test{-3}\\
%    |-2|&      \test{-2}\\
%    |-1|&      \test{-1}\\
%    |0|&       \test{0}\\
%    |1|&       \test{1}\\
%    |2|&       \test{2}\\
%    |3|&       \test{3}\\
%    |4|&       \test{4}\\
%    |5|&       \test{5}
%   \end{tabular}
%   \end{center}}
%
%
%
%
% \subsubsection{The \texttt{\char`\\zero} command}
%
% The \DescribeMacro{\zero}|\zero| command describes how to deal with zeros. It takes
% three arguments: the \emph{overall zero} part, the \emph{integer zero} part and the
%  \emph{fractional zero} part.
%
% \begin{syntax}
% |\zero{|\<overall zero>|}{|\<integer zero>|}{|\<fractional zero>|}|
% \end{syntax}
%
% \noindent
% The following table shows some of the possible settings. The first entry is
% the predefined one, which should be used for running text.
% The last line shows the number format that is obtained in table mode with
% the default style \DescribeOption{emdash}\opt{emdash} selected.
%
%   {\makeatletter
%   \EUROFORMAT{main}{\align\in}
%   \EUROFORMAT{in}{\val}
%   \newcommand*\test[4]{\EUROFORMAT{EUR}{\zero{#1}{#2}{#3}}\EURO{EUR}{#4}}
%   \def\|{\hspace{.1em}}
%   \medskip\noindent
%   \begin{center}
%   \begin{tabular}{rr@{\hspace{1cm}}r@{\hspace{1cm}}r@{\hspace{1cm}}}%
%                    & \texttt{0\rlap{.0}} & \texttt{0\rlap{.3}} & \texttt{3\rlap{.0}}\\[.5ex]
%   \hline\\[-1.5ex]
%   |\zero{0}{0}{}|&  \test{0}{0}{}{0}& \test{0}{0}{}{0.3}& \test{0}{0}{}{3.0}\\
%   |\zero{0}{0}{,00}|&  \test{0}{0}{,00}{0}& \test{0}{0}{,00}{0.3}& \test{0}{0}{,00}{3.0}\\
%   |\zero{0}{}{}|&  \test{0}{}{}{0}& \test{0}{}{}{0.3}& \test{0}{}{}{3.0}\\
%   |\zero{---\EURO@align{,---}}{---}{,---}|&
%     \quad\test{---\EURO@align{,---}}{---}{,---}{0}&
%     \test{---\EURO@align{,---}}{---}{,---}{0.3}&
%     \test{---\EURO@align{,---}}{---}{,---}{3.0}\\
%   |\zero{0}{---}{,---}|&
%     \test{0}{---}{,---}{0}&
%     \test{0}{---}{,---}{0.3}&
%     \test{0}{---}{,---}{3.0}\\
%   \end{tabular}
%   \end{center}}
%
% \bigskip\noindent
% The |\EURO@align| command will get replaced by |\rlap| if alignment was requested.
% You only have to state it in the first argument, if you want to align zero
% amounts in tables.
%
%
%
%
% \subsubsection{The \texttt{\char`\\plus} and \texttt{\char`\\minus} commands}
%
% The \DescribeMacro{\plus}|\plus| and |\minus| commands allow to
% define a preamble\slash postamble for positive and negative numbers, respectively.
% \DescribeMacro{\minus}^^A
%
% \begin{syntax}
% |\plus{|\<positive preamble>|}{|\<positive postamble>|}|\\
% |\minus{|\<negative preamble>|}{|\<negative postamble>|}|
% \end{syntax}
%
% While |\plus| isn't used by default, |\minus| is defined to provide a preceding
% minus sign for negative numbers.
%
%   {\EUROFORMAT{main}{\align\in\hspace*{10mm}}
%   \EUROFORMAT{in}{\val}
%   \newcommand*\test[3]{\EUROFORMAT{EUR}{\minus{#1}{#2}}\EURO{EUR}{#3}}
%   \medskip\noindent
%   \begin{center}
%   \begin{tabular}{rrr}%
%                    &  positive numbers         & negative numbers\\[.5ex]
%   \hline\\[-1.5ex]
%   |\minus{\(-\)}{}|&  \test{\(-\)}{}{12000}& \test{\(-\)}{}{-12000}\\
%   |\minus{(}{)}|&     \test{(}{)}{.79}&      \test{(}{)}{-.79}\\
%   |\minus{\color{red}(}{)}|&^^A
%     \test{\color{red}(}{)}{123.456}&^^A
%     \test{\color{red}(}{)}{-123.456}\\^^A
%   |\minus{\color{red}\(-\)}{}|\qquad&^^A
%     \test{\color{red}\(-\)}{}{10}&^^A
%     \test{\color{red}\(-\)}{}{-10}^^A
%   \end{tabular}
%   \end{center}}
%
%
%
%
%
% \subsection{Tables and alignment}
% \label{sec:align}
%
% To achieve proper alignment in tables there's an |\align| command that
% can be used in any of the different format strings no matter if it's a
% \emph{main}, an \emph{in}, \emph{out}, or one of the \emph{number} formats.
% This command is to be stated before the
% concerned |\in|, |\out|, or |\val| command, respectively.
% It lets a number's fractional part have
% no width, thus allowing to align such numbers properly in a flush-right
% table column (|r| column). The example below also shows how to use
% the \DescribeMacro{\table}|\table| keyword. It turns the \opt{table}
% mode on for the current table. To turn it on for the whole document,
% use the \opt{table} package option. If you find the `---' dashes
% too long, you can load the package with the \DescribeOption{endash}\opt{endash}
% option.
%
%
% \medskip
% \newcommand*\ALNUM{\EUROFORMAT{main}{\table\in}\EUROFORMAT{in}{\align\val}\EURO{EUR}}
% \begin{tabular}{lr}
% |\newcommand*\ALNUM{%|\\
% |  \EUROFORMAT{main}{\table\in}%    % no \out currency|\hspace*{-2cm}\\
% |  \EUROFORMAT{in}{\align\val}%     % no symbol/ISO code|\hspace*{-10cm}\\
% |  \EURO{EUR}}%|\\[2ex]
% |\begin{tabular}{r}|&\\
% |\textbf{costs}\\|&     \textbf{costs}\\
% |\ALNUM{123456}\\|&     \ALNUM{123456}\\
% |\ALNUM{1234.56}\\|&    \ALNUM{1234.56}\\
% |\ALNUM{12.3456}\\|&    \ALNUM{12.3456}\\
% |\ALNUM{0.123456}|&     \ALNUM{0.123456}\\
% |\end{tabular}|
% \end{tabular}
%
% \medskip\noindent
% It may be necessary to put a |\hspace| after such an aligned number,
% especially when it is applied more than once. The second column would
% have to be |\llap|ped in this case.
%
% \medskip
% \newcommand*\IEP{^^A
%   \EUROFORMAT{main}{\align\in\hspace{1.8cm}\llap{\align\out}}^^A
%   \EUROFORMAT{in}{\val}^^A
%   \EUROFORMAT{out}{\val}^^A
%   \EURO{IEP}}
% \begin{example}[.9\textwidth]
% |\newcommand*\IEP{%|\\
% |  \EUROFORMAT{main}{\align\in\hspace{1.8cm}\llap{\align\out}}%|\hspace*{-1cm}\\
% |  \EUROFORMAT{in}{\val}%|\\
% |  \EUROFORMAT{out}{\val}%|\\
% |  \EURO{IEP}}|
% \end{example}
% \null
%
% \begin{tabular}{llr}
% |\begin{tabular}{lr}|&\\
% |\bf Month& \bf Irish Pound/Euro\\|& \bf Month& \bf Irish Pound/Euro\\
% |January&   \IEP{6070.83}\\|&   January&  \IEP{6070.83}\\
% |February&  \IEP{1200}\\|&      February& \IEP{1200}\\
% |March&     \IEP{0.123}\\|&     March&    \IEP{0.123}\\
% |April&     \IEP{441.0358}|&    April&    \IEP{441.0358}\\
% |\end{tabular}|
% \end{tabular}
%
% \medskip\noindent
% It would have been much simpler, though, not to combine two
% columns in one |\EURO| command, but to use two separate entries.
% \medskip
%
%
%
%
% \subsection{Dirty tricks}
%
%
% Of course, the format doesn't have to deal with the \euro, nor with monetary amounts
% at all. (The |EUR| currency in the following examples has no meaning,
% we could also have used any other currency, provided that no |\out| command
% is used within the \emph{format string.})
%
% \begin{example}[.6\textwidth]
% |\newcommand*\USD[1]{{%|\\
% |  \EUROFORMAT{main}{\in}%|\\
% |  \EUROFORMAT{in}{\val\,\$}%|\\
% |  \EUROFORMAT{EUR}{\form{,}{.}{,}\round{-2}}%|\hspace*{-1cm}\\
% |  \EURO{EUR}{#1}}}|\\[1.5ex]
% |\USD{-123450.6789}|& \USD{-123450.6789}\\[1ex]
% \end{example}
%
% These examples are probably too complicated for the simple things they do.
% But they may serve as examples of how to use some of the customization
% commands.
%
% \begin{example}[.6\textwidth]
% |\newcommand*\NUM[1]{{%|\\
% |  \EUROFORMAT{main}{\in}%|\\
% |  \EUROFORMAT{in}{\val}%|\\
% |  \EUROFORMAT{EUR}{\form{,}{.}{,}\round{-10}}%|\hspace*{-1cm}\\
% |  \EURO{EUR}{#1}}}|\\[1.5ex]
% |\NUM{1000} red ants|& \NUM{1000} red ants
% \end{example}
% \null
%
%
%
% \subsection{The default settings}
%
% The following lines show how the |\EURO| command's default behavior
% could have been defined. The real settings, however, were defined on
% a lower programming level.
%
% \begin{example}[.6\textwidth]
% |\EUROFORMAT{main}{\in\ (\out)}|\\
% |\EUROFORMAT{in}{\val~\sym}|\\
% |\EUROFORMAT{out}{\val~\sym}|\\
% |\EUROFORMAT{all}{%|\\
% |  \form{\,}{,}{\,}%|\\
% |  \round{-2}%|\\
% |  \zero{0}{0}{}%|\\
% |  \plus{}{}%|\\
% |  \minus{\(-\)}{}}|\\
% |\EUROFORMAT{ITL}{%|\\
% |  \round{0}}|
% \end{example}
% \null
%
%
%
% \subsection{The configuration file}
% \label{sec:config}
%
% If you want to change the predefined settings, create a
% file named `|euro.cfg|' and put it in a directory, where \TeX\
% can find it. This configuration file will then be loaded
% at the end of the |euro.sty| file, so you may redefine
% any settings or commands, select package options and even
% introduce new package options. But if you intend to give
% your documents to others, don't forget to give them the
% required configuration files, too! That's how such a file
%  could look like:
%
% \begin{example}[.92\textwidth]
% |% introduce the US-Dollar and the British Pound Sterling|\\
% |\EUROADD{USD}{\$}{1.0891}|\\
% |\EUROADD{GBP}{\textsterling}{0.6694}|
% \end{example}
%
% \indent
% \begin{example}[.85\textwidth]
% |% let Italian Lire be rounded to 10s|\\
% |\EUROFORMAT{ITL}{\round{1}}|\\
% |% and let their symbol be only `L.'|\\
% |\EUROSYM{ITL}{L.}|
% \end{example}
%
% \indent
% \begin{example}[.92\textwidth]
% |% declare a new package option `bold',|\\
% |% which typesets the source currency in boldface type|\\
% |\DeclareOption{bold}{%|\\
% |  \EUROFORMAT{main}{\textbf{\in} (\out)}}|
% \end{example}
%
% \indent
% \begin{example}[.85\textwidth]
% |% always select the `endash' option|\\
% |\ExecuteOptions{endash}|\\
% |\endinput|
% \end{example}
% \null
%
%
%
%
% \section*{The European Union \&\ Patents on Software}
%
%^^A^^  NOTE TO DISTRIBUTORS: If you feel like distributing the euro package documentation with
%^^A^^  this section removed or modified, note the special copyright clause that applies in this case!
%
% Because this package is dedicated to the European Union's official currency,
% I feel the obligation --~in the name of freedom and democracy, and as a citizen
% of the EU~-- to comment on today's decision on the ``Computer Implemented
% Inventions Directive'':
%
% Today, 2005/03/07, unelected bureaucrats --~the European Council of ministers~-- decided
% to ignore the objections and clear will of the elected European Parliament, those of the
% Committee on Legal Affairs~(JURI), the presidency of the European Parliament, of several
% national parliaments, and nothing less than the interests of the citizens of the European Union.
% Instead, they chose to fulfill the wishes of software industry giants (some of which have
% been convicted of abusing their monopoly power in several countries), and the wishes of
% bureaucrats from the European Patent Office, which has illegally granted 30.000~software
% patents already.
%
% This is an incredible offense and disgusting abuse of power. It has yet to be
% investigated, which r\^ole corruption played in this plot, for which there
% seem to be strong signs. We are facing nothing less than an oligarchy of
% unelected bureaucrats who feel more obliged to maintaining the wealth of the richest
% man on earth, than the interests of the European citizens and the European
% economy. There is still hope that the European Parliament will reject the
% directive in the second reading. This appeal will remain in the documentation, though,
% as long as the European Parliament is treated as a fig leaf for undemocratic decisions.
% And should this directive become effective, and should I ever encounter conflicts
% with software patent claims in \emph{any} of my software packages, the |euro|~package
% will be the first that I will withdraw.
%
% This is a sad day. Shame on the European~Council! Shame on the European~Commission!
%
%
%
%
%
% \begin{thebibliography}{0}
% \bibitem{Duden}{Duden, Volume 1: \textit{Die Rechtschreibung.} Bibliographisches Institut,
%   Mann\-heim--Wien--Z\"urich, 1986, 19th~edition.}
%
% \bibitem{EUrates}{European Council: \textit{Council Regulation (EC) No.~2866/98 of 31~December~1998
%   on the conversion rates between the euro and the currencies of the Member States adopting
%   the euro.} Official Journal L~359. 31~December~1998.}
%
% \bibitem{EUratesGRD}{European Council: \textit{Council Regulation (EC) No.~1478/2000 of 19~June 2000
%   amending Regulation (EC) No.~2866/98 on the conversion rates between the euro and the currencies
%   of the Member States adopting the euro.} Official Journal L~167. 7~July~2000.}
%
% \bibitem{EUround}{European Council: \textit{Certain provisions related to the introduction of the
%   Euro.} Council Regulation 1103/97, 17~June~1997.}
%
% \bibitem{DEK}{\textsc{Knuth, Donald Ervin:} \textit{The \TeX book.}
%   Addison--Wesley Publishing Company, Reading/Massachusetts, 1989, 16th~edition.}
%
% \bibitem{Tschichold}{\textsc{Tschichold, Jan:} \textit{Ausgew\"ahlte Aufs\"atze
%   \"uber Fragen der Gestalt des Buches und der Typographie.}
%   Birkh\"auser, Basel, 1987, 2nd~edition.}
% \end{thebibliography}
%
%
%
% \StopEventually{\addtocontents{toc}{\protect\end{multicols}}}
%
%
%
%
%
%
%
%
%^^A max 72 columns
%^^A--------------------------------------------------------------------
%
%
%
%
% \section{The implementation}
%    \begin{macrocode}
%<*package>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{euro}[2003/02/19 v1.1 euro  (mf)]
\RequirePackage{fp-basic}
\RequirePackage{fp-snap}
\FPmessagesfalse
%    \end{macrocode}
%
%
%
%
%^^A--------------------------------------------------------------------
%
%
%
%
% \subsection{The engine}
%
% \begin{macro}{\EURO@zero}
% \begin{macro}{\EURO@lzero}
% \begin{macro}{\EURO@rzero}
% \begin{macro}{\EURO@lminus}
% \begin{macro}{\EURO@rminus}
% \begin{macro}{\EURO@lplus}
% \begin{macro}{\EURO@rplus}
% \begin{macro}{\EURO@align}
% \begin{macro}{\EURO@lsep}
% \begin{macro}{\EURO@lsep}
% \begin{macro}{\EURO@point}
% \begin{macro}{\EURO@round}
% These macros are for internal use only. They partly predefine the
% format strings. Never change them here, but create a `|euro.cfg|'
% file, where you can redefine them without causing undesirable
% side effects.
%
%    \begin{macrocode}
\newcommand*\EURO@zero{0}
\newcommand*\EURO@lzero{0}
\newcommand*\EURO@rzero{}
\newcommand*\EURO@lminus{\(-\)}
\newcommand*\EURO@rminus{}
\newcommand*\EURO@lplus{}
\newcommand*\EURO@rplus{}
\newcommand*\EURO@align{}
\newcommand*\EURO@lsep{\,}
\newcommand*\EURO@rsep{\,}
\newcommand*\EURO@point{,}
\newcommand*\EURO@round{-2}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
%
%
%^^A--------------------------------------------------------------------
%
%
%
%
% \begin{macro}{\EURO}
% \begin{macro}{\EURO@@}
% \begin{macro}{\EURO@scan}
% These macros manage the whole package. All the \emph{format string}
% macros (also called \emph{keywords}) are defined here locally.
% Note the beautiful |####|s! \texttt{;-)}
%
%    \begin{macrocode}
\newcommand*\EURO[1]{\bgroup\def\EURO@icurr{#1}\EURO@@}
\newcommand*\EURO@@[2][EUR]{\FPset\EURO@ival{#2}%
  \def\EURO@set##1##2##3##4##5{\FPset##5{##1}}%
  \csname EURO@@\EURO@icurr\endcsname\EURO@ifac
  \csname EURO@@#1\endcsname\EURO@ofac
  \FPdiv\EURO@oval\EURO@ival\EURO@ifac
  \FPmul\EURO@oval\EURO@oval\EURO@ofac
  \def\EURO@set##1##2##3##4##5{\def##5{##4}}%
  \EURO@@main\EURO@
  \EURO@@all\EURO@dflt
  \let\EURO@set\EURO@scan
  \def\in{{\csname EURO@@\EURO@icurr\endcsname\EURO@ival
    \def\EURO@set####1####2####3{}\EURO@@in}}%
  \def\out{{\csname EURO@@#1\endcsname\EURO@oval
    \def\EURO@set####1####2####3{}\EURO@@out}}%
  \def\align{\def\EURO@align####1{\rlap{####1}\let\EURO@align\relax}}%
  \let\table\EURO@table
  \def\form##1##2##3{\def\EURO@lsep{##1}\def\EURO@rsep{##3}%
    \def\EURO@point{##2}}%
  \def\round##1{\def\EURO@round{##1}}%
  \let\zero\EURO@setzero
  \def\minus##1##2{\def\EURO@lminus{##1}\def\EURO@rminus{##2}}%
  \def\plus##1##2{\def\EURO@lplus{##1}\def\EURO@rplus{##2}}%
  \EURO@\egroup}
\newcommand*\EURO@scan[5]{%
  \def\val{\FPifzero#5\EURO@zero\else\EURO@num#5\fi}%
  \def\iso{#2}\def\sym{#3}\def\EURO@form{\EURO@dflt#4}%
  \ifx\EURO@form\empty\let\EURO@form\EURO@dflt\fi
  \EURO@form}%
\newcommand*\EURO@setzero[3]{\def\EURO@zero{#1}%
  \def\EURO@lzero{#2}\def\EURO@rzero{#3}}%
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
%
%
%^^A--------------------------------------------------------------------
%
%
%
%
% \begin{macro}{\EUROSYM}
% \begin{macro}{\EUROFORMAT}
% \begin{macro}{\EUROADD}
% These macros replace the third\slash fourth parameter of the
% respective currency entry with another currency code\slash
% format string, or add a new currency entry.
%
%    \begin{macrocode}
\newcommand*\EUROSYM[2]{%
  \def\EURO@set##1##2##3##4{\toks@={\EURO@set{##1}{##2}{#2}{##4}}%
    \expandafter\edef\csname EURO@@#1\endcsname{\the\toks@}}%
  \csname EURO@@#1\endcsname}
\newcommand*\EUROFORMAT[2]{%
  \def\EURO@set##1##2##3##4{\toks@={\EURO@set{##1}{##2}{##3}{#2}}%
    \expandafter\edef\csname EURO@@#1\endcsname{\the\toks@}}%
  \csname EURO@@#1\endcsname}
\newcommand*\EUROADD[3]{%
  \expandafter\def\csname EURO@@#1\endcsname{\EURO@set{#3}{#1}{#2}{}}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
%
%
%^^A--------------------------------------------------------------------
%
%
%
%
% \begin{macro}{\EURO@num}
% \begin{macro}{\EURO@split}
% Takes a macro containing a number, passes the integer part to |\EURO@grp| and
% outputs everything else, cares about rounding and such\dots
%
%    \begin{macrocode}
\newcommand*\EURO@num[1]{{%
  \FPifneg#1%
    \EURO@lminus\let\EURO@post\EURO@rminus\FPneg#1#1%
  \else
    \EURO@lplus\let\EURO@post\EURO@rplus
  \fi
  \EURO@rround#1%
  \let\EURO@aux#1%
  \FPtrunc#1#10%
  \FPifzero#1\EURO@lzero\else\EURO@grp#1\fi
  \EURO@align{%
     \FPsub\EURO@aux\EURO@aux#1%
     \FPifzero\EURO@aux
       \ifnum\EURO@round<0 \EURO@rzero\fi
     \else
       \ifnum\EURO@round<0
         \ifnum\EURO@round<-9
           \FPclip\EURO@aux\EURO@aux
         \else
           \FPtrunc\EURO@aux\EURO@aux{-\EURO@round}%
         \fi
         \EURO@point
         \expandafter\EURO@split\EURO@aux\relax\relax\relax\EURO@
       \fi
     \fi
     \EURO@post}}%
  \let\EURO@align\relax}
\newcommand*\EURO@split{}
\def\EURO@split0.#1#2#3#4\EURO@{#1#2#3%
  \EURO@threedig#4\relax\relax\relax\EURO@}
\newcommand*\EURO@threedig[3]{%
  \if#1\relax
    \let\EURO@\relax
  \else
    \EURO@rsep#1#2#3\let\EURO@\EURO@threedig
  \fi\EURO@}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
%
%
%
%^^A--------------------------------------------------------------------
%
%
%
%
% \begin{macro}{\EURO@rround}
% \begin{macro}{\EURO@rfac}
% Takes a macro containing a number, returns it rounded.
% |\EURO@rfac| calculates the rounding factor \(10^r\)
% for positive \(r\) (\emph{rounding number}).
%
%    \begin{macrocode}
\newcommand*\EURO@rround[1]{%
  \count@=\EURO@round\relax
  \ifnum\count@<1%
    \count@-\count@
    \FPround#1#1\count@
  \else
    \FPset\EURO@aux1%
    \EURO@rfac\EURO@aux\count@
    \FPdiv#1#1\EURO@aux
    \FPround#1#10%
    \FPmul#1#1\EURO@aux
  \fi}
\newcommand*\EURO@rfac[2]{%
  \ifnum#2>0 \advance#2-1 \EURO@rfac#1#2\FPmul#1#1{10}\fi}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
%
%
%
%^^A--------------------------------------------------------------------
%
%
%
%
% \begin{macro}{\EURO@grp}
% Let's do some recursion---it's fun! (This macro does the three-digit grouping.)
%
%    \begin{macrocode}
\newcommand*\EURO@grp[1]{\bgroup%
  \FPtrunc#1#10%
  \FPiflt#1{1000}%
    #1%
  \else
    \let\EURO@aux=#1%
    \FPdiv#1#1{1000}%
    \FPtrunc#1#10%
    \EURO@grp#1%
    \FPmul#1#1{1000}%
    \FPsub\EURO@aux\EURO@aux#1%
    \FPtrunc\EURO@aux\EURO@aux0%
    \count0=\EURO@aux\relax
    \EURO@lsep
    \ifnum\count0<100 0\ifnum\count0<10 0\fi\fi\EURO@aux
  \fi\egroup}
%    \end{macrocode}
% \end{macro}
%
%
%
%
%^^A--------------------------------------------------------------------
%
%
%
%
% \subsection{The facts}
%
% \begin{macro}{\EURO@@ATS}
% \begin{macro}{\EURO@@BEF}
% \begin{macro}{\EURO@@DEM}
% \begin{macro}{\EURO@@ESP}
% \begin{macro}{\EURO@@FIM}
% \begin{macro}{\EURO@@FRF}
% \begin{macro}{\EURO@@GRD}
% \begin{macro}{\EURO@@IEP}
% \begin{macro}{\EURO@@ITL}
% \begin{macro}{\EURO@@LUF}
% \begin{macro}{\EURO@@NLG}
% \begin{macro}{\EURO@@PTE}
% \begin{macro}{\EURO@@EUR}
% These values have been irrevocably fixed by the European Council on suggestion
% by the European Commission and been published in the \emph{Council Regulation (EC) No.~2866/98}
% \cite{EUrates} and \emph{No.~1478/2000} \cite{EUratesGRD}
% (taken from |http://europa.eu.int/|).
%
%    \begin{macrocode}
\newcommand*\EURO@@ATS{\EURO@set{13.7603}{ATS}{\"oS}{}}
\newcommand*\EURO@@BEF{\EURO@set{40.3399}{BEF}{BEF}{}}
\newcommand*\EURO@@DEM{\EURO@set{1.95583}{DEM}{DM}{}}
\newcommand*\EURO@@ESP{\EURO@set{166.386}{ESP}{Pt.}{}}
\newcommand*\EURO@@FIM{\EURO@set{5.94573}{FIM}{FIM}{}}
\newcommand*\EURO@@FRF{\EURO@set{6.55957}{FRF}{FRF}{}}
\newcommand*\EURO@@GRD{\EURO@set{340.750}{GRD}{GRD}{}}
\newcommand*\EURO@@IEP{\EURO@set{.787564}{IEP}{IEP}{}}
\newcommand*\EURO@@ITL{\EURO@set{1936.27}{ITL}{Lit.}{}}
\newcommand*\EURO@@LUF{\EURO@set{40.3399}{LUF}{LUF}{}}
\newcommand*\EURO@@NLG{\EURO@set{2.20371}{NLG}{NLG}{}}
\newcommand*\EURO@@PTE{\EURO@set{200.482}{PTE}{PTE}{}}
\newcommand*\EURO@@EUR{\EURO@set{1.00000}{EUR}{Euro}{}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
%
%
%^^A--------------------------------------------------------------------
%
%
%
%
% \begin{macro}{\EURO@@main}
% \begin{macro}{\EURO@@in}
% \begin{macro}{\EURO@@out}
% \begin{macro}{\EURO@@all}
% Define the generic format macros and `fill' them with
% some default settings. Define the number format for
% the \emph{Italian Lira} and the package options,
% load the optional `|euro.cfg|' file and, finally:
% Exit.
%
%
%    \begin{macrocode}
\newcommand*\EURO@@main{\EURO@set0{}{}{}}
\newcommand*\EURO@@in{\EURO@set0{}{}{}}
\newcommand*\EURO@@out{\EURO@set0{}{}{}}
\newcommand*\EURO@@all{\EURO@set0{}{}{}}
\EUROFORMAT{main}{\in\ (\out)}
\EUROFORMAT{in}{\val~\sym}
\EUROFORMAT{out}{\val~\sym}
\EUROFORMAT{ITL}{\round0}
\DeclareOption{eco}%
  {\EUROFORMAT{in}{\iso~\val}%
   \EUROFORMAT{out}{\iso~\val}}
\newcommand*\EURO@emdash{\EURO@setzero
  {0}{---}{\EURO@point---}}
\newcommand*\EURO@endash{\EURO@setzero
  {0}{--\kern.1em}{\EURO@point\kern.1em--}}
\newcommand*\EURO@zeros{\EURO@setzero
  {0\EURO@align{\EURO@point00}}{0}{\EURO@point00}}
\DeclareOption{emdash}{\let\EURO@table\EURO@emdash}
\DeclareOption{endash}{\let\EURO@table\EURO@endash}
\DeclareOption{zeros}{\let\EURO@table\EURO@zeros}
\DeclareOption{table}{\EURO@table}
\DeclareOption{dots}{\let\EURO@lsep.\let\EURO@rsep.}
\ExecuteOptions{emdash}
\InputIfFileExists{euro.cfg}%
  {\PackageInfo{euro}{Local config file euro.cfg used}}{}
\ProcessOptions
\endinput
%</package>
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
%
%
%^^A--------------------------------------------------------------------
%
%
%
%
% \vspace{2explus1fill}
%\begin{verbatim}
%$Id: euro.dtx,v 1.14 2005/03/07 14:22:19 m Exp $
%\end{verbatim}
% \Finale
%
%
%
%                                                       ^^A.E.I.O.U.^^
% ^^A vim:ts=4:sw=4:et:cindent
