% \iffalse meta-comment
%
% unitsdef.dtx
%
% This file is part of the package unitsdef for use with LaTeX2e
%
% Function: Typesetting units in a proper way
% 
% Copyright (C) 2004, Patrick Happel
%
% This program may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.2
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.2 or later is part of all distributions of LaTeX
% version 1999/12/01 or later.
%
% Please send error reports and suggestions for improvements to 
%    Patrick Happel <patrick.happel@ruhr-uni-bochum.de>
%
%
%<*dtx>
  \ProvidesFile{unitsdef.dtx}
%</dtx>
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{unitsdef}[2005/01/04 v0.2 Typesetting units]
%<driver>\ProvidesFile{unitsdef.dtx}
% \fi
          \ProvidesFile{unitsdef.dtx}
          [2004/01/05 Typesetting units a proper way]
%
% \GetFileInfo{unitsdef.sty}
%
% \CheckSum{1054}
%
%% \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
%<*driver>
\documentclass[a4paper,10pt]{ltxdoc}
\usepackage{tabularx}
\usepackage{longtable}
\usepackage{ltxtable}
\usepackage{unitsdef}
\usepackage[latin1]{inputenc}
\usepackage[english]{babel}
\usepackage[DIVcalc]{typearea}
\usepackage{multicol}
\usepackage{color}
  \definecolor{dred}{rgb}{.5,0,0}
  \definecolor{gray}{rgb}{.9,.9,.9}
\usepackage{url}
\usepackage{soul}
\usepackage{booktabs}
\newcommand{\paket}[1]{\textsf{#1}}
\newcommand{\option}[1]{\texttt{#1}}
\newcommand{\name}[1]{\caps{#1}}
\newcommand{\zitat}[1]{\frqq#1\flqq}

\GlossaryPrologue{\section*{Changes}}
\makeatletter

\newenvironment{example}{\par\vspace*{.5\baselineskip}}{\par}
\makeatother
\RecordChanges
\EnableCrossrefs         
\CodelineIndex
\begin{document}
   \DocInput{unitsdef.dtx}
\end{document}
%</driver>
% \fi
% \MakeShortVerb{\§}
% \title{\paket{unitsdef} -- Typesetting units with \LaTeXe\thanks{Version \fileversion}}
% \author{\name{Patrick Happel}\thanks{patrick.happel@rub.de}}
% \date{\filedate}
% \setcounter{tocdepth}{2}
% \DoNotIndex{\csname,\endcsname,\expandafter,\noexpand,\string}
% \DoNotIndex{\begingroup,\endgroup,\def,\xdef,\long,\let}
% \DoNotIndex{\ifx,\newcommand,\renewcommand}
% \DoNotIndex{\\,\%,\,\@ifpackageloaded,\@tempa,\AtBeginDocument}
% \DoNotIndex{\cdot,\DeclareOption,\DeclareRobustCommand,\edef}
% \DoNotIndex{\else,\ensuremath,\f@family,\fi,\global,\ifmmode}
% \DoNotIndex{\ifnum,\InputIfFileExists,\mathrm,\MessageBreak,\newif}
% \DoNotIndex{\PackageError,\PackageInfo,\PackageWarning,\PassOptionsToPackage}
% \DoNotIndex{\prime,\ProcessOptions,\relax,\RequirePackage,\sfdefault}
% \DoNotIndex{\text,\unit,\upshape,\xspace}
% \DoNotIndex{\unit@@literfalse,\unit@@litertrue,\unit@@numprintfalse,\unit@@numprinttrue}
% \DoNotIndex{\unit@@Ohmfalse,\unit@@Ohmtrue,\unit@@redefgensymbfalse,\unit@@redefgensymbtrue}
% \DoNotIndex{\unit@@useabbrvtrue,\unit@@useabbrvfalse}
% \DoNotIndex{\unit@@useampabbrvfalse,\unit@@useampabbrvtrue,\unit@@useampabbrvtrue,\unit@@useampabbrvtrue}
% \DoNotIndex{\unit@@useconfigfiletrue,\unit@@useconfigfilefalse,\unit@@useenergyabbrvtrue}
% \DoNotIndex{\unit@@useenergyabbrvfalse,\unit@@usefreqabbrvtrue,\unit@@usefreqabbrvfalse}
% \DoNotIndex{\unit@@uselengthabbrvtrue,\unit@@uselengthabbrvfalse,\unit@@usemolabbrvfalse}
% \DoNotIndex{\unit@@usemolabbrvtrue,\unit@@usetimeabbrvtrue,\unit@@usetimeabbrvfalse}
% \DoNotIndex{\unit@@usevolabbrvtrue,\unit@@usevolabbrvfalse,\unit@@usevoltabbrvtrue,\unit@@usevoltabbrvfalse}
% \DoNotIndex{\unit@@useweightabbrvtrue,\unit@@useweightabbrvfalse,\unit@@xspacetrue,\unit@@xspacefalse}
% \changes{v0.1}{2004/02/14}{First public release}
% \changes{v0.11}{2004/02/17}{Added electronvolt}
% \changes{v0.12}{2004/02/26}{Fixed some bugs relating to
%   \paket{gensymb}.}
% \changes{v0.13}{2004/03/02}{Some bugfixes and some units added.}
% \changes{v0.13a}{2004/04/27}{More bugfixes. \cmd{\utimes} is now
%   called \cmd{\unittimes}}
% \maketitle
% \begin{abstract}
% There are a lot of packages for typesetting units in
% \LaTeXe. Some define macros to typeset a lot of units but do not suit
% to the actual font settings, some make the characters needed available
% but do not predefine any unit.\par
% This package tries to comply with both requirements. It predefines
% common units, defines an easy to use interface to define new units and
% changes the output concerning to the surrounding font settings.
% \end{abstract}
% \begin{multicols}{2}
% \tableofcontents
% \end{multicols}
% \PrintChanges
% \vfill
% \section*{Thanks}
% \begin{multicols}{2}\small\noindent\raggedright
% I have to thank some people who helped me by delivering suggestions, bug-reports,
% feature request, providing general ideas or anything else:
% \name{Frank Heimann}, \name{Stephan Mann}, \name{Frank Küster}, \name{Stefan
% Salewski}, \name{Stephan Hennig}, \name{Klaus Wacker}, \name{Christoph Löser}
% \end{multicols}\newpage
% \section{Packages loaded by \paket{unitsdef}}
% \paket{unitsdef} loads (and so needs) the following packages with the given
% options: 
% \begin{itemize}
% \item \paket{[T1]fontenc}
% \item \paket{textcomp}
% \item \paket{amsmath}
% \item \paket{units}
% \item \paket{xspace} (as long as \option{noxspace}, see
% section~\ref{sec:more-options}, isn't specified) 
% \end{itemize}
% The first two packages are needed for different characters in the
% encodings set by these packages, \paket{amsmath} provides the very useful
% |\text| macro and \paket{units} is used for typesetting the
% units. \paket{xpsace} is included to obtain the facility to write
% §5\mm and some text§ instead of §5\mm\ and some text§.
% \section{General usage}\label{generell}
% To use \paket{unitsdef} simply specify
% \begin{verse}
% \cmd{\usepackage}\oarg{options}|{unitsdef}|
% \end{verse} 
% in the preamble of your document.
% \section{Options}\label{sec:options}
% \subsection{Options related to \paket{gensymb}}\label{sec:gensymb-options}
% \paket{unitsdef} knows three options to avoid conflicts with the
% \paket{gensymb}-package that also predefines macros for typesetting
% »\textmu«, »\textohm« and »\textcelsius«. Some macros are definied both by
% \paket{gensymb} and \paket{unitsdef}. To solve this problem three different
% options exist:
% \begin{description}
% \item[OHM] makes \paket{unitsdef} use uppercase macros (\cmd{\Ohm},
%   \cmd{\Celsius}, \cmd{\Micro} and \cmd{\Degree}). The predefined units with
%   prefixes still appear lowercase (\cmd{\kiloohm}).
% \item[ohm] is the opposite to \option{OHM} and is the default setting.
% \item[redef-gensymb] This option copies \cmd{\ohm}, \cmd {\celsius},
%   \cmd{\micro} and \cmd{\degree} from \paket{gensymb} to \cmd{\gensymbohm},
%   \cmd{\gensymbcelsius}, \cmd{\gensymbmicro} and \cmd{\gensymbdegree}.
%   \paket{unitsdef} then redefines this four commands so that they
%   have the same meaning as without \paket{gensymb}. \textbf{Important:} To
%   use this option \paket{gensymb} has to be loaded \emph{before}
%   \paket{unitsdef}!
% \end{description}
% \subsection{More options}\label{sec:more-options}
% \paket{unitsdef} knows some other options to change its behaviour:
% \begin{description}
% \item[LITER] Makes \paket{unitsdef} use the \emph{uppercase} L as the sign produced
% by \cmd{\liter}. This is default behaviour.
% \item[liter] Makes \paket{unitsdef} use the \emph{lowercase} l as the sign produced
% by \cmd{\liter}.
% \item[noxspace] Maybe some problems occur due to the \paket{xspace}
% functionality of \paket{unitsdef}. This option forces \paket{unitsdef} to do
% without \paket{xspace}.
% \item[noconfig] Tells \paket{unitsdef} not to look for a local
% \paket{unitsdef} configuration file §unitsdef.cfg§ (see
% section~\ref{config-file} for details).
% \item[noabbrv] Is an abbreviation for \emph{no abbreviations}. \paket{unitsdef}
% does not define any short commands for a unit. This might be helpfull if
% another package defines a command with the same name and \LaTeX\ exits with
% an error.
% \item[ugly] Applies the option \option{ugly} to \paket{units}, thus all
% units containing fraction will be typeset like m/s in text mode and
% $\frac{\mathrm{m}}{\mathrm{s}}$ in mathmode.
% \item[\emph{skipping only particular abbreviations}] Usually only
% one macro causes conflict between a definition made by
% \paket{unitsdef} and another package. There are some options to
% avoid loading only particular abbreviations to avoid the definition
% that causes the conflict:
% \begin{description}
% \item[noamperageabbr] Avoids defining the abbreviations for units of
% amperage (\cmd{\pA}, \cmd{\nA}, \cmd{\micA}, \cmd{\mA}, \cmd{\kA}).
% \item[nofrequncyabbr] Avoids defining \cmd{\kHz}, \cmd{\MHz} and
% \cmd{\GHz}.
% \item[nomolabbr] Avoids defining \cmd{\fmol}, \cmd{\pmol},
% \cmd{\nmol}, \cmd{\micmol} and \cmd{\mmol}.
% \item[novoltageabbr] Avoids defining \cmd{\kV} and \cmd{\mv}.
% \item[novolumeabbr] Avoids defining \cmd{\fl}, \cmd{\pl}, \cmd{\nl},
% \cmd{\micl}, \cmd{\ml}, \cmd{\cl} and \cmd{\dl}.
% \item[noweightabbr] Avoids defining \cmd{\kg}, \cmd{\fg}, \cmd{\pg},
% \cmd{\nanog}, \cmd{\micg} and \cmd{\mg}.
% \item[noenergyabbr] Avoids defining \cmd{\kJ}, \cmd{\eV},
% \cmd{\meV}, \cmd{\keV}, \cmd{\MeV}, \cmd{\GeV} and \cmd{\TeV}.
% \item[nolengthabbr] Avoids defining \cmd{\picom}, \cmd{\nm},
% \cmd{\micm}, \cmd{\mm}, \cmd{\cm}, \cmd{\dm} and \cmd{\km}.
% \item[notimeabbr] Avoids defining \cmd{\sek}, \cmd{\fs}, \cmd{\ps},
% \cmd{\ns}, \cmd{\mics} and \cmd{\ms}.
% \end{description}
% \end{description}
% \section{Typesetting units}\label{setzen}
% \paket{unitsdef} includes a large set of predefined units. They are listed
% in section~\ref{definierte}. These units, as well as units defined by 
% you with \cmd{\newunit} (see below), can be used as follows:
% \begin{verse}
% |\|\meta{unitmacro}$\left[\left<\text{value}\right>\right]$
% \end{verse}
% As you see, the value is an optional argument. Thus you can write |5\kg|
% (instead of |\kg[5]|), this may simplify the writing process. The distance
% in both cases is |\unitvaluesep|.\par
% If the optional argument is not used you still can write 
% |5\kg and some text|
%  due to the \paket{xspace} functionality of \paket{unitsdef}.\par
% \DescribeMacro{\unitvaluesep} If you want another distance between value and
% unit you simply have to redefine |\unitvaluesep|:
% \begin{verse}
% |\renewcommand{\unitvaluesep}{\hspace*{|$\left<\text{\textit{distance}}\right>$|}}|
% \end{verse}
% \DescribeMacro{\unitsignonly} If you want to typeset the sign of a unit
% without any value (for introducing a new unit-sign f.e.) |\unitvaluesep|
% must not be set. This is provided by the macro
% |\unitsignonly{\<unitmacro>}|.\par
% \textbf{Important!} If you want to specify a unit with a prefix, never use
% something like |\milli\hour|. This will lead to problems. Always define the
% units first using \cmd{\newunit} or use the command \cmd{\ilu} to
% typeset an unit without defining it first!
% \subsection{Inline units}\label{sec:inlineunits}
% \DescribeMacro{\ilu}
% Some packages for typesetting units provide the possibility to write
% things like |\micro\meter| to obtain \unitsignonly{\micrometer}. With
% \paket{unitsdef} this will cause some problems due to the toggling of
% some internal switches. If you want to use prefices without defining
% a new unit you have to use the command \cmd{\ilu}. It has one
% optional and one mandatory argument. The first contains the value to
% be typeset, the latter contains the unit:
% \begin{example}
% \noindent\begin{minipage}{\textwidth}
%   \begin{minipage}{.45\linewidth}
%     \begin{verbatim}
% A force of 
% \ilu[17]{\micro\newton} 
% is applied. 
% $F=17\ilu{\micro\newton}$
% \textsf{17\ilu{\micro\newton}}
%     \end{verbatim}
%   \end{minipage}\hfill
%   \colorbox{gray}{%
%   \begin{minipage}{.45\linewidth}  
% A force of \ilu[17]{\micro\newton} is
% applied. $F=17\ilu{\micro\newton}$% \textsf{17\ilu{\micro\newton}}
%   \end{minipage}}
% \end{minipage}
% \end{example}
% \subsection{Typesetting angles and arcs}\label{angles}
% If you type |5\degree10\arcmin12\arcsec| you will get the following result:
% \zitat{5\degree10\arcmin12\arcsec}. There are full spaces between the single
% values and the preceding unit-symbol. This is due to the \paket{xspace} 
% functionality of \paket{unitsdef}. The correct output you will obtain by using
% the macro \cmd{\arc}\footnote{It is expected to have (nearly?) the same
% usage and results as \cmd{\ang} from the \paket{SIstyle} package.}. Using 
% it in this way |\arc{5;10;12}| will lead to  \zitat{\arc{5;10;12}}. There
% are some more features of this macro, best understood if you look at this
% example:
% \begin{example}
% \begin{minipage}{.45\textwidth}
% \begin{verbatim}
%  \begin{enumerate}
%    \item \arc{1}      % 1
%    \item \arc{1;2}    % 2
%    \item \arc{1;2;3}  % 3
%    \item \arc{;2;3}   % 4
%    \item \arc{;;3}    % 5
%    \item \arc{1;;2}   % 6
%    \item \arc{1;;}    % 7 
%    \item \arc{;;;}    % 8
%  \end{enumerate}
% \end{verbatim}
% \end{minipage}\hfill\colorbox{gray}{%
% \begin{minipage}{.45\textwidth}\small
%  \begin{enumerate}
%  \item \arc{1}
%  \item \arc{1;2}
%  \item \arc{1;2;3}
%  \item \arc{;2;3}
%  \item \arc{;;3}
%  \item \arc{1;;2}
%  \item \arc{1;;}
%  \item \arc{;;;}
%  \end{enumerate}
% \end{minipage}}
% \end{example}
% \subsection{Logical markup for units}\label{sec:logicalmarkup}
% One advantage of \paket{unitsdef} is that it typesets the units
% suiting to the surrounding font settings. But some people
% (magazines, universities, \ldots) want units always to be typeset in
% a special way. There is a checklist available at
% \url{http://physics.nist.gov/cuu/Units/checklist.html}. 
% \paket{unitsdef} does not fit to all these requirements by
% default. But there are some macros for figuring out the
% output. \DescribeMacro{\SI}First, there is the command \cmd{\SI} which typesets (by
% default) all units in upright shape, but doesn't change anything
% else according to the font settings. The command \cmd{\SI} has two
% mandatory arguments, the first has to contain the value, the latter
% contains the unit:
% \begin{example}
% \begin{minipage}{.45\textwidth}
%   \begin{verbatim}
%  \textbf{\textit{A force of  
%   \SI{17}{\newton} 
%   was applied.}} 
%   \end{verbatim}
% \end{minipage}\hfill\colorbox{gray}{%
% \begin{minipage}{.45\textwidth}
% \textbf{\textit{A force of \SI{17}{\newton} was applied.}}
% \end{minipage}}
% \end{example} 
% If you want to customize the output of \cmd{\SI}, you can redefine
% the macro \cmd{\unitSIdef}. By default it contains \cmd{\upright},
% but if you want units to be typeset upright in serif family, you can
% achieve this by redefining it to |\upshape\rmfamily|:
% \begin{example}
% \begin{minipage}{.45\textwidth}
%   \begin{verbatim}
%  \renewcommand{\unitSIdef}
%    {\upshape\rmfamily}
%  \textsf{\textbf{\textit{%
%   A force of  
%   \SI{17}{\newton} 
%   was applied.}}}
%   \end{verbatim}
% \end{minipage}\hfill\colorbox{gray}{%
% \begingroup
% \begin{minipage}{.45\textwidth}
%  \renewcommand{\unitSIdef}{\upshape\rmfamily}
%  \textsf{\textbf{\textit{%
%   A force of  
%   \SI{17}{\newton} 
%   was applied.}}}
% \end{minipage}\endgroup}
% \end{example} 
% \section{The interface}\label{schnittstelle}
% \subsection{Defining new units}
% \DescribeMacro{\newunit}
% Besides the predefined unit-macros (see section~\ref{definierte})
% \paket{unitsdef} offers the possibility to define new
% units. This is done with the macro \cmd{\newunit}:
% \begin{verse}
% \cmd{\newunit}\{|\|\meta{unitmacro}\}\marg{unitsign}
% \end{verse}
% To typeset a unit \emph{Newton} (represented by |N|) you have to
% define\footnote{You do not really have to define \emph{newton}, it is
% already defined by \paket{unitsdef}. This is just an example.} it
% as follows:
% \begin{verbatim}
%     \newunit{\newton}{N}
% \end{verbatim}
% After this you can use the macro \cmd{\newton}:
% \begin{verbatim}
%     5\newton plus \newton[3] is 8\newton.
% \end{verbatim}
% This will give the following output:
% \begin{verse}
% 5\newton plus \newton[3] is 8\newton.
% \end{verse}
% To define a unit \emph{millinewton} (|mN|) simply define:
% \begin{verbatim}
%     \newunit{\millinewton}{\milli\newton}
% \end{verbatim}
% \DescribeMacro{\renewunit} For redefining units, the macro
% \cmd{\renewunit} can be used with the same syntax as \cmd{\newunit} 
% (on the lines of \cmd{\newcommand} and \cmd{\renewcommand}).\par
% \DescribeMacro{\newnosepunit} As an additional facility to define new units
% the macro \cmd{\newnosepunit} exists with the same syntax as \cmd{\newunit}.
% It allows you to define a unit without  any space between the value and the
% unit-symbol. The only unit I know typeset without leading space is
% \emph{degree}. You typeset 5\degree instead of 5\,\degree. But maybe there
% are other units that must not have leading space, so I included this command
% in the user interface. 
%
% \DescribeMacro{\renewnosepunit} If you want to redifine a unit to be typeset 
% without leading space, use \cmd{\renewnosepunit}.\par
% \DescribeMacro{\per} To typeset units containing a fraction the macro
% \cmd{\per} is defined. The usage is:
% \begin{verse}
% \cmd{\per}\marg{numerator}\marg{denominator}
% \end{verse}
% To define \emph{newton per squaremeter} you have to say:
% \begin{verbatim}
%     \newunit{\newtonpersmeter}{\per{\newton}{\squaremeter}}
% \end{verbatim}\par
% \DescribeMacro{\unittimes} To typeset a multiplication sign between two
% units the macro \cmd{\unittimes}  is used:
% \begin{verbatim}
%     \newunit{\newtonmeter}{\newton\unittimes\meter}
%     \newunit{\newtonmeterpersec}{\per{\newton\unittimes\meter}{\second}}
% \end{verbatim}\par
% \DescribeMacro{\unitsep} To typeset additional space (instead of \cmd{\unittimes}) between two units
% you can use \cmd{\unitsep} (do NOT use \cmd{\,}):
% \begin{verbatim}
%     \newunit{\newtonmeter}{\newton\unitsep\meter}
% \end{verbatim}
% The default is \cmd{\,} but if you want different amount of space you can
% simply |\renewcommand{\unitsep}|\marg{distance}.\par
% \DescribeMacro{\unitsuperscript} To typeset superscripts use \cmd{\unitsuperscript}:
% \begin{verbatim}
%     \newunit{\squaremeter}{\meter\unitsuperscript{2}}
% \end{verbatim}
% \subsection{Typesetting \textmu, \textohm, \textdegree\ and  
% \textcelsius}\label{diesache} 
% \DescribeMacro{\setTextOmega}\DescribeMacro{\setMathOmega}
% \DescribeMacro{\setTextmu}\DescribeMacro{\setMathmu}
% \DescribeMacro{\setTextCelsius}\DescribeMacro{\setMathCelsius}
% \DescribeMacro{\setMathDegree}\DescribeMacro{\setTextDegree}  
% Typesetting units would be quite easy without \emph{Ohm} and \emph{micro}
% (\emph{degree} and \emph{degree Celsius} as well). The representing
% characters \textmu\ and  \textohm\ have to exist in three variants: One for
% use in math-mode 
% (suiting to \cmd{\mathrm}) the latter two for use in \cmd{\rmfamily} and
% \cmd{\sffamily}. Most fonts have a suiting \textmu\ but very few fonts own a
% \textohm. The fonts from \name{Bitstream} (delivered with some versions of
% \name{Corel Draw}) have an italic non-suiting \textmu, so you have to take care
% of a \textmu\ when using such fonts, too. Also the \textmu\ in Latin Modern
% fonts isn't very good looking yet (but LM is still in
% beta-state). Because of nearly infinite combinations of different
% fonts it is impossible to choose the correct characters for \textmu,
% \textohm\ and \textcelsius\ automatically. To define these characters
% use the macros \cmd{\setTextOmega}, \cmd{\setMathOmega}, \cmd{\setTextmu},
% \cmd{\setMathmu}, \cmd{\setTextCelsius}, \cmd{\setMathCelsius},
% \cmd{\setMathDegree} and \cmd{\setTextDegree}:
% \begin{verse}
% \cmd{\setTextOmega}\marg{serif-definition}\marg{sans-serif-definition}\\
% \cmd{\setMathOmega}\marg{definition}\\[.5\baselineskip]
% \cmd{\setTextmu}\marg{serif-definition}\marg{sans-serif-definition}\\
% \cmd{\setMathmu}\marg{definition}\\[.5\baselineskip]
% \cmd{\setTextCelsius}\marg{serif-definition}\marg{sans-serif-definition}\\
% \cmd{\setMathCelsius}\marg{definition}\\[.5\baselineskip]
% \cmd{\setTextDegree}\marg{serif-definition}\marg{sans-serif-definition}\\
% \cmd{\setMathDegree}\marg{definition}
% \end{verse}
% \textbf{Important!}  The macros concerning typesetting in math-mode use
% \paket{amsamth}'s \cmd{\text}-macro. So you have to switch to math-mode to use a
% character out of the math alphabet. The reason for this is
% \paket{units}. \paket{units} uses \cmd{\mathrm} to typeset in math-mode. But only few
% mathfonts have a suitable \textohm, for example:
% \begin{verbatim}
%     \documentclass{article}
%
%     \usepackage[T1]{fontenc}
%     \usepackage{textcomp}
%     \usepackage{mathpazo}
%
%     \begin{document}
%       $\Omega\qquad\mathrm{\Omega}$
%     \end{document}
% \end{verbatim}
% \paket{unitsdef} sets the defaults in a way suitable to the CM-family:
% \begin{verbatim}
%     \setMathOmega{$\mathrm{\Omega}$}
%     \setMathmu{\textmu}
%     \setTextOmega{\textohm}{\textohm}
%     \setTextmu{\textmu}{\textmu}
%     \setMathCelsius{\textcelsius}
%     \setTextCelsius{\textcelsius}{\textcelsius}
%     \setMathDegree{\textdegree}
%     \setTextDegree{\textdegree}{\textdegree}
% \end{verbatim}
% To find a suitable \textohm\ for different fonts use \name{Walter Schmidt}'s
% \paket{gensymb}-package\footnote{\texttt{CTAN:macros/latex/contrib/was/}}
% and read the documentation of this package.
% \section{Local configuration file}\label{config-file}
% Since version~0.2 unitsdef by default looks for a file §unitsdef.cfg§ and
% inputs its contents. This is useful if you frequently use a similar set of
% units in your documents. You put your definitions in §unitsdef.cfg§ and they
% are included automaticly in your document\footnote{Keep in mind that \TeX\
% has to find the file, so follow the instructions given by your
% \TeX-distribution. On §*nix§-like systems and a TDS compliant distribution it might
% be possible to put |unitsdef.cfg| in \texttt{\textasciitilde}|/texmf/tex/latex/unitsdef/config/|
% and update the filename database.}
%
% A configuration file may look like this: 
% \begin{verbatim}
% \ProvidesFile{unitsdef.cfg}%
%    [2004/12/09 v1.0 some definitions for unitsdef]
% 
% \newunit{\molar}{\per{\mole}{\liter}}
% \newunit{\millimolar}{\per{\millimole}{\liter}}
%
% \endinput
% \end{verbatim}
% If, by some reason, you don't want your local config file to be loaded
% specify the option \option{noconfig} in the \cmd{\usepackage} command.
% \section{Predefined units and prefices}\label{definierte}
% \LTXtable{\textwidth}{defedpraef.tex}
% \LTXtable{\textwidth}{defedunits.tex}
% \section{To Do}\label{sec:todo}
% There are a lot of things to be done. Some are mentioned here: 
% \begin{itemize}
% \item Add some more macros to figure out the ouptut (something
% similar to \cmd{\SI}). Provide the possibility to typeset all units
% in math mode.
% \item Improve the documentation.
% \item Adding interfaces units for \AA, \textperthousand\ and \unitsignonly{\degree}F
% \end{itemize}
% \StopEventually{}   
% \section{Code}\label{code}
%    \begin{macrocode}
%<*package>
%    \end{macrocode}
% \subsection{switches}
%    \begin{macro}{\if@@setunitsep}
% This switch is used internally to decide, whether a distance is to be
% typesetted or not.
%    \begin{macrocode}
\newif\if@@setunitsep
\@@setunitseptrue
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\ifunit@@Ohm}
% This switch decides whether \cmd{\ohm} or \cmd{\Ohm} and 
% \cmd{\celsius} or \cmd{\Celsius} is defined (according to \paket{gensymb}).
%    \begin{macrocode}
\newif\ifunit@@Ohm%
\unit@@Ohmfalse
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\ifunit@@redefgensymb}
% This switch makes \paket{gensymb}'s macros \cmd{\ohm} and \cmd{\celsius}
% available as \cmd{\gensymbohm} and \cmd{\gensymbcelsius}. \paket{unitsdef}
% uses \cmd{\ohm} and \cmd{\celsius}.
%    \begin{macrocode}
\newif\ifunit@@redefgensymb
\unit@@redefgensymbfalse
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\ifunit@@liter}
% This switch decides whether the output of the unit \cmd{liter} is typeset as
% |l| or |L|
%    \begin{macrocode}
\newif\ifunit@@liter
\unit@@literfalse
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\ifunit@@xspace}
% This switch decides whether \paket{xspace} is used.
%    \begin{macrocode}
\newif\ifunit@@xspace
\unit@@xspacetrue
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\ifunit@@xspace}
% This switch decides whether abbreviattions are loaded.
%    \begin{macrocode}
\newif\ifunit@@useabbrv
\unit@@useabbrvtrue
%    \end{macrocode}
%    \end{macro}
% The follwing switches decide whether to load a |.cfg| file containing some
% abbreviations or not. 
%    \begin{macrocode}
\newif\ifunit@@useampabbrv
\unit@@useampabbrvtrue
\newif\ifunit@@usefreqabbrv
\unit@@usefreqabbrvtrue
\newif\ifunit@@usemolabbrv
\unit@@usemolabbrvtrue
\newif\ifunit@@usevoltabbrv
\unit@@usevoltabbrvtrue
\newif\ifunit@@usevolabbrv
\unit@@usevolabbrvtrue
\newif\ifunit@@useweightabbrv
\unit@@useweightabbrvtrue
\newif\ifunit@@useenergyabbrv
\unit@@useenergyabbrvtrue
\newif\ifunit@@uselengthabbrv
\unit@@uselengthabbrvtrue
\newif\ifunit@@usetimeabbrv
\unit@@usetimeabbrvtrue
%    \end{macrocode}
%    \begin{macro}{\ifunit@@useconfigfile}
% This switch stores whether the option \option{noconfig} is given.
%    \begin{macrocode}
\newif\ifunit@@useconfigfile
\unit@@useconfigfiletrue
%    \end{macrocode}
%    \end{macro}
% \subsection{Options}
%    \begin{macrocode}
\DeclareOption{OHM}{\unit@@Ohmtrue}
\DeclareOption{ohm}{\unit@@Ohmfalse}
\DeclareOption{redef-gensymb}{%
  \@ifpackageloaded{gensymb}{%
    \unit@@redefgensymbtrue%
    \AtBeginDocument{%
      \let\gensymbohm\ohm%
      \let\gensymbcelsius\celsius%
      \let\gensymbmicro\micro%
      \renewunit{\ohm}{\unitOmega}%
      \renewunit{\celsius}{\unitCelsius}%
      \renewcommand{\micro}{\unitmu\@@setunitsepfalse}%
    }
  }{%
    \PackageError{unitsdef}{
      You requestet me to save some macros from the\MessageBreak 
      gensymb-package. This package is  not loaded.\MessageBreak
      If you load it later, tell me to use  uppercase\MessageBreak
      macronames where conflicts appear by giving me\MessageBreak
      the option OHM.
    }
  }
}
\DeclareOption{liter}{\unit@@litertrue}
\DeclareOption{LITER}{\unit@@literfalse}
\DeclareOption{noxspace}{\unit@@xspacefalse}
\DeclareOption{noabbrv}{\unit@@useabbrvfalse}
\DeclareOption{ugly}{\PassOptionsToPackage{ugly}{units}}
\DeclareOption{noamperageabbr}{\unit@@useampabbrvfalse}
\DeclareOption{nofrequncyabbr}{\unit@@usefreqabbrvfalse}
\DeclareOption{nomolabbr}{\unit@@usemolabbrvfalse}
\DeclareOption{novoltageabbr}{\unit@@usevoltabbrvfalse}
\DeclareOption{novolumeabbr}{\unit@@usevolabbrvfalse}
\DeclareOption{noweightabbr}{\unit@@useweightabbrvfalse}
\DeclareOption{noenergyabbr}{\unit@@useenergyabbrvfalse}
\DeclareOption{nolengthabbr}{\unit@@uselengthabbrvfalse}
\DeclareOption{notimeabbr}{\unit@@usetimeabbrvfalse}
\DeclareOption{noconfig}{\unit@@useconfigfilefalse}
\ProcessOptions
%    \end{macrocode}
% \subsection{Loading packages}
%    \begin{macrocode}
\RequirePackage[T1]{fontenc}
\RequirePackage{amsmath}
\RequirePackage{textcomp}
\RequirePackage{units}
\ifunit@@xspace
  \RequirePackage{xspace}%
  \let\unit@@xspace\xspace%
\else
  \let\unit@@xspace\relax
\fi
%    \end{macrocode}
% \subsection{The interface}
%    \begin{macro}{\unitsignonly}
% This macro is used to typeset a unit without leading spacing. To
% achieve this \cmd{\@@setunitsep} is set to
% §false§. \cmd{\unitsignonly} has an mandatory argument containig the
% unit to typeset: \cmd{\unitsignonly}\marg{unit}.
% \changes{v0.2}{2004/11/28}{Now defined by \cmd{\DeclareRobustCommand}}
%    \begin{macrocode}
\DeclareRobustCommand{\unitsignonly}[1]{%
  \@@setunitsepfalse%
  \begingroup%
  \let\unit@@xspace\relax%
  #1%
  \endgroup}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\unitvaluesep}
% This Macro specifies the distance between value and unit, default value is
% \cmd{\,}. 
%    \begin{macrocode}
\newcommand{\unitvaluesep}{}
\let\unitvaluesep\,%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\newunit}
% \changes{v0.2}{2004/11/23}{Added code for the use of \paket{xspace}}
% This macro is the interface to define new units. Usage is:
% \begin{verse}
% \cmd{\newunit}\{\textbackslash\meta{unitmacro}\}\marg{unitsign}. 
% \end{verse}
%    \begin{macrocode} 
\newcommand{\newunit}[2]{%
%    \end{macrocode}
% \changes{v0.2}{2004/11/28}{\cmd{\newunit} now uses \cmd{\DeclareRobustCommand}
% instead of \cmd{\newcommand}}
% First there is a check whether the macro already exists:
%    \begin{macrocode}
    \newcommand{#1}{}%
%    \end{macrocode}    
% then its definition is performed.
%    \begin{macrocode}
    \DeclareRobustCommand{#1}[1][]{##1%
%    \end{macrocode}
% The redefinition of \cmd{\unitvaluesep} has to stay local:
%    \begin{macrocode}
      \begingroup%
%    \end{macrocode}
% \cmd{\xpsace} must not do anything when invoked inside a unit. So it is set to
% \cmd{\relax} inside this group. 
%    \begin{macrocode}
       \let\unit@@xspace\relax%
       \if@@setunitsep%
%    \end{macrocode}
% \changes{v0.2}{2004/11/28}{Now \paket{unitsdef} uses \cmd{\unitvaluesep}
% inistead of \cmd{\,}, thereby the interface is more flexible and allows the
% users to commit changes.}
%    \begin{macrocode}
         \unitvaluesep%
%    \end{macrocode}
% Once a spacing is typeset there must no further spacing be
% typeset. To avoid typesetting more spacings I redefine \cmd{\unitvaluesep}
% to \cmd{\relax}.
%    \begin{macrocode}
         \let\unitvaluesep\relax%
       \fi%
       \unit{#2}\global\@@setunitseptrue%
      \endgroup%
%    \end{macrocode}
% Now \cmd{\xspace} has to be invoked, as long as \option{noxspace} is not set.
%    \begin{macrocode}
      \unit@@xspace%
    }%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\renewunit}
% \changes{v0.2}{2004/11/23}{Added code for the use of
% \paket{xspace}. \cmd{\DeclareRobustCommand} is used instead of
% \cmd{\renewcommand}.}
% This macro is to redifine existing units.
%    \begin{macrocode} 
\newcommand{\renewunit}[2]{%
    \renewcommand{#1}{}%
    \DeclareRobustCommand{#1}[1][]{##1%
      \begingroup%
       \let\unit@@xspace\relax%
       \if@@setunitsep%
         \unitvaluesep%
         \let\,\relax%
       \fi%
       \unit{#2}\global\@@setunitseptrue%
      \endgroup%
      \unit@@xspace%
    }%
}

%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\newnosepunit}
% \changes{v0.2}{2004/11/26}{Added \cmd{\newnosepunit} and \cmd{\renewnosepunit}
% for units without any space between value and unitsign}
%    \begin{macrocode}
\newcommand{\newnosepunit}[2]{%
    \newcommand{#1}{}%
    \DeclareRobustCommand{#1}[1][]{##1%
      \begingroup%
       \let\xspace\relax%
       \if@@setunitsep%
         \let\,\relax%
       \fi%
       \unit{#2}\global\@@setunitseptrue%
      \endgroup%
      \unit@@xspace%
    }%
}
\newcommand{\renewnosepunit}[2]{%
    \renewcommand{#1}{}%
    \DeclareRobustCommand{#1}[1][]{##1%
      \begingroup%
       \let\unit@@xspace\relax%
       \if@@setunitsep%
         \let\,\relax%
       \fi%
       \unit{#2}\global\@@setunitseptrue%
      \endgroup%
      \unit@@xspace%
    }%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\per}
%    \begin{macrocode}
\newcommand\per[2]{%
  \@@setunitsepfalse%
  \unitfrac{#1}{#2}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\ilu}
% The command \cmd{\ilu} provides the possibility to typeset
% inline-units that are not defined by a previous \cmd{\newunit}
% command. 
%    \begin{macrocode}
\newcommand{\ilu}[2][]{%
  \begingroup%
    \@@setunitsepfalse%
    \let\unit@@xspace\relax%
    #1\,\unit{#2}%
  \endgroup%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\unittimes}
%    \begin{macrocode} 
\newcommand{\unittimes}{\@@setunitsepfalse\ensuremath{\cdot}}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\unitsep}
%    \begin{macrocode} 
\let\unitsep\,
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\unitsuperscript}
%    \begin{macrocode}
\newcommand{\unitsuperscript}[1]{%
  \ifmmode^{#1}\else\textsuperscript{#1}\fi%
} 
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\unitMathOmega}
%    \begin{macrocode} 
\newcommand{\unitMathOmega}{}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\unitTextOmega}
%    \begin{macrocode} 
\newcommand{\unitTextOmega}{}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\unittextmu}
%    \begin{macrocode} 
\newcommand{\unitTextmu}{}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\unitmathmu}
%    \begin{macrocode} 
\newcommand{\unitMathmu}{}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\unitMathCelsius}
%    \begin{macrocode}
\newcommand{\unitMathCelsius}{}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\unitTextCelsius}
%    \begin{macrocode}
\newcommand{\unitTextCelsius}{}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\unitTextDegree}
%    \begin{macrocode}
\newcommand{\unitTextDegree}{}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\unitMathDegree}
%    \begin{macrocode}
\newcommand{\unitMathDegree}{}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\unitCelsius}
%    \begin{macrocode} 
\newcommand{\unitCelsius}{%
  \ifmmode\unitMathCelsius\else\unitTextCelsius\fi%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\unitmu}
%    \begin{macrocode} 
\newcommand{\unitmu}{%
  \ifmmode\unitMathmu\else\unitTextmu\fi%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\unitOmega}
%    \begin{macrocode} 
\newcommand{\unitOmega}{%
  \ifmmode\unitMathOmega\else\unitTextOmega\fi%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\unitDegree}
%    \begin{macrocode} 
\newcommand{\unitDegree}{%
  \ifmmode\unitMathDegree\else\unitTextDegree\fi%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\setMathOmega}
%    \begin{macrocode} 
\newcommand{\setMathOmega}[1]{%
  \renewcommand{\unitMathOmega}{\text{#1}}%
}
\setMathOmega{$\mathrm{\Omega}$}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\setMathmu}
%    \begin{macrocode} 
\newcommand{\setMathmu}[1]{%
  \renewcommand{\unitMathmu}{\text{#1}}%
}
\setMathmu{\textmu}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\setMathCelsius}
%    \begin{macrocode} 
\newcommand{\setMathCelsius}[1]{%
  \renewcommand{\unitMathCelsius}{\text{#1}}%
}
\setMathCelsius{\textcelsius}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\setMathDegree}
%    \begin{macrocode} 
\newcommand{\setMathDegree}[1]{%
  \renewcommand{\unitMathDegree}{\text{#1}}%
}
\setMathDegree{\textdegree}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\setTextOmega}
% This macro is to define the \zitat{\textohm} that is used in text
% mode. The first argument is used when \cmd{\rmfamily} is active, the
% latter when \cmd{\sffamily} is active.
%    \begin{macrocode}
\newcommand{\setTextOmega}[2]{%
  \renewcommand{\unitTextOmega}{%
    \begingroup%
      \edef\@tempa{\sfdefault}%
      \ifx\f@family\@tempa%
        #2%
      \else%
        #1%
      \fi%
    \endgroup%
  }%
}
\setTextOmega{\textohm}{\textohm}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\setTextmu}
% This macro is to define the \zitat{\textmu} that is used in text
% mode. The first argument is used when \cmd{\rmfamily} is active, the
% latter when \cmd{\sffamily} is active.
%    \begin{macrocode}
\newcommand{\setTextmu}[2]{%
  \renewcommand{\unitTextmu}{%
    \begingroup%
      \edef\@tempa{\sfdefault}%
      \ifx\f@family\@tempa%
        #2%
      \else%
        #1%
      \fi%
    \endgroup%
  }%
}
\setTextmu{\textmu}{\textmu}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\setTextCelsius}
% This macro is to define the \zitat{\textcelsius} that is used in text
% mode. The first argument is used when \cmd{\rmfamily} is active, the
% latter when \cmd{\sffamily} is active.
%    \begin{macrocode}
\newcommand{\setTextCelsius}[2]{%
  \renewcommand{\unitTextCelsius}{%
    \begingroup%
      \edef\@tempa{\sfdefault}%
      \ifx\f@family\@tempa%
        #2%
      \else%
        #1%
      \fi%
    \endgroup%
  }%
}
\setTextCelsius{\textcelsius}{\textcelsius}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\setTextDegree}
% This macro is to define the \zitat{\textdegree} that is used in text
% mode. The first argument is used when \cmd{\rmfamily} is active, the
% latter when \cmd{\sffamily} is active.
%    \begin{macrocode}
\newcommand{\setTextDegree}[2]{%
  \renewcommand{\unitTextDegree}{%
    \begingroup%
      \edef\@tempa{\sfdefault}%
      \ifx\f@family\@tempa%
        #2%
      \else%
        #1%
      \fi%
    \endgroup%
  }%
}
\setTextDegree{\textdegree}{\textdegree}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\unitSIdef}
% \changes{v0.2}{2004/12/22}{Added \cmd{\unitSIdef} to define units
% typeset by \cmd{\SI}.}
%    \begin{macrocode}
\newcommand\unitSIdef{\upshape}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\SI}
% \changes{v0.2}{2004/12/22}{Added \cmd{\SI} to typeset units and
% values obeying the SI-rules.}
%    \begin{macrocode}
\newcommand{\SI}{}
\DeclareRobustCommand{\SI}[2]{%
  \begingroup%
    \let\unit@@xspace\relax%
    \unitSIdef\selectfont%
      #1#2%
  \endgroup%
}
%    \end{macrocode}
%    \end{macro}
% \subsection{Definition of prefices}
%    \begin{macrocode}
\newcommand{\yocto}{y\@@setunitsepfalse}            % -24
\newcommand{\zepto}{z\@@setunitsepfalse}            % -21
\newcommand{\atto}{a\@@setunitsepfalse}             % -18
\newcommand{\femto}{f\@@setunitsepfalse}            % -15
\newcommand{\pico}{p\@@setunitsepfalse}             % -12
\newcommand{\nano}{n\@@setunitsepfalse}             %  -9
\ifunit@@Ohm
  \newcommand{\Micro}{\unitmu\@@setunitsepfalse}
  \let\@unit@micro\Micro
\else
  \ifunit@@redefgensymb\else
    \newcommand{\micro}{\unitmu\@@setunitsepfalse}
  \let\@unit@micro\micro
  \fi
\fi
\newcommand{\milli}{m\@@setunitsepfalse}            %  -3
\newcommand{\centi}{c\@@setunitsepfalse}            %  -2
\newcommand{\deci}{d\@@setunitsepfalse}             %  -1

\newcommand{\deca}{da\@@setunitsepfalse}            %  +1
\newcommand{\hecto}{h\@@setunitsepfalse}            %  +2

\newcommand{\kilo}{k\@@setunitsepfalse}             %  +3
\newcommand{\mega}{M\@@setunitsepfalse}             %  +6
\newcommand{\giga}{G\@@setunitsepfalse}             %  +9
\newcommand{\tera}{T\@@setunitsepfalse}             % +12
\newcommand{\peta}{P\@@setunitsepfalse}             % +15
\newcommand{\exa}{E\@@setunitsepfalse}              % +18
\newcommand{\zetta}{Z\@@setunitsepfalse}            % +21
\newcommand{\yotta}{Y\@@setunitsepfalse}            % +24

%    \end{macrocode}
% \subsection{Definitions of units}
% \subsubsection{base units}
%    \begin{macrocode}
\newunit{\meter}{m}
    \newunit{\gram}{g}
\newunit{\kilogram}{\kilo\gram}
\newunit{\mole}{mol}
\newunit{\second}{s}
\newunit{\ampere}{A}
\newunit{\kelvin}{K}
\newunit{\candela}{cd}

%    \end{macrocode}
% \subsubsection{Units of length}
%    \begin{macrocode}

\newunit{\picometer}{\pico\meter}
\newunit{\nanometer}{\nano\meter}
\newunit{\micrometer}{\@unit@micro\meter}
\newunit{\millimeter}{\milli\meter}
\newunit{\centimeter}{\centi\meter}
\newunit{\decimeter}{\deci\meter}
\newunit{\kilometer}{\kilo\meter}

%    \end{macrocode}
% \subsubsection{Units of weight}
%    \begin{macrocode}

\newunit{\femtogram}{\femto\gram}
\newunit{\picogram}{\pico\gram}
\newunit{\nanogram}{\nano\gram}
\newunit{\microgram}{\@unit@micro\gram}
\newunit{\milligram}{\milli\gram}

%    \end{macrocode}
% \subsubsection{Units of quantity}
%    \begin{macrocode}

\newunit{\femtomole}{\femto\mole}
\newunit{\picomole}{\pico\mole}
\newunit{\nanomole}{\nano\mole}
\newunit{\micromole}{\@unit@micro\mole}
\newunit{\millimole}{\milli\mole}


%    \end{macrocode}
% \subsubsection{Units of time}
%    \begin{macrocode}
                    
\newunit{\attosecond}{\atto\sek}
\newunit{\femtosecond}{\femto\sek}
\newunit{\picosecond}{\pico\sek}
\newunit{\nanosecond}{\nano\sek}
\newunit{\microsecond}{\@unit@micro\sek}
\newunit{\millisecond}{\milli\sek}


%    \end{macrocode}
% \subsubsection{amperage}
%    \begin{macrocode}

\newunit{\picoampere}{\pico\ampere}
\newunit{\nanoampere}{\nano\ampere}
\newunit{\microampere}{\@unit@micro\ampere}
\newunit{\milliampere}{\milli\ampere}
\newunit{\kiloampere}{\kilo\ampere}

%    \end{macrocode}
% \subsubsection{Percent}
%    \begin{macrocode}

\newunit{\percent}{\%}

%    \end{macrocode}
% \subsubsection{Volumes}
%    \begin{macrocode}

\ifunit@@liter
  \newunit{\liter}{l}
\else
  \newunit{\liter}{L}
\fi

\newunit{\femtoliter}{\femto\liter}
\newunit{\picoliter}{\pico\liter}
\newunit{\nanoliter}{\nano\liter}
\newunit{\microliter}{\@unit@micro\liter}
\newunit{\milliliter}{\milli\liter}
\newunit{\centiliter}{\centi\liter}
\newunit{\deciliter}{\deci\liter}
\newunit{\hectoliter}{\hecto\liter}

\newunit{\cubicmeter}{\meter\unitsuperscript{3}}
\newunit{\cubicmicrometer}{\micrometer\unitsuperscript{3}}
\newunit{\cubicmillimeter}{\millimeter\unitsuperscript{3}}


%    \end{macrocode}
% \subsubsection{Areas}
%    \begin{macrocode}

\newunit{\squaremeter}{\meter\unitsuperscript{2}}

\newunit{\ar}{a}
\newunit{\hektar}{\hecto\ar}

\newunit{\squarecentimeter}{\centimeter\unitsuperscript{2}}
\newunit{\squaremillimeter}{\millimeter\unitsuperscript{2}}
\newunit{\squarekilometer}{\kilometer\unitsuperscript{2}}
%    \end{macrocode}
% \subsubsection{more units of weight}
%    \begin{macrocode}

\newunit{\ton}{t}

%    \end{macrocode}
% \subsubsection{Derived electrical units}
%    \begin{macrocode}

\newunit{\volt}{V}
\newunit{\millivolt}{\milli\volt}

\newunit{\kilovolt}{\kilo\volt}

\newunit{\watt}{W}
\newunit{\milliwatt}{\milli\watt}
\newunit{\kilowatt}{\kilo\watt}
\newunit{\megawatt}{\mega\watt}

\newunit{\coulomb}{C}
%    \end{macrocode}
% Don't forget the options when typesetting \textohm!
%    \begin{macrocode}
\ifunit@@Ohm
  \newunit{\Ohm}{\unitOmega}
  \newunit{\kiloohm}{\kilo\Ohm}
  \newunit{\megaohm}{\mega\Ohm}
  \newunit{\gigaohm}{\giga\Ohm}
\else
  \ifunit@@redefgensymb\else
    \newunit{\ohm}{\unitOmega}
  \fi
  \newunit{\kiloohm}{\kilo\ohm}
  \newunit{\megaohm}{\mega\ohm}
  \newunit{\gigaohm}{\giga\ohm}
\fi
\newunit{\siemens}{S}
\newunit{\millisiemens}{\milli\siemens}
\newunit{\farad}{F}
\newunit{\femtofarad}{\femto\farad}
\newunit{\picofarad}{\pico\farad}
\newunit{\nanofarad}{\nano\farad}
\newunit{\microfarad}{\@unit@micro\farad}
\newunit{\millifarad}{\milli\farad}
%    \end{macrocode}
% \subsubsection{Units of energy}
%    \begin{macrocode}
\newunit{\joule}{J}
\newunit{\millijoule}{\milli\joule}
\newunit{\kilojoule}{\kilo\joule}
\newunit{\megajoule}{\mega\joule}

\newunit{\calory}{cal}
\newunit{\kilocalory}{\kilo\calory}
\newunit{\electronvolt}{eV}
\newunit{\millielectronvolt}{\milli\eV}
\newunit{\kiloelectronvolt}{\kilo\eV}
\newunit{\megaelectronvolt}{\mega\eV}
\newunit{\gigaelectronvolt}{\giga\eV}
\newunit{\teraelectronvolt}{\tera\eV}

%    \end{macrocode}
% \subsubsection{more units of time}
%    \begin{macrocode}
\newunit{\minute}{min}
\newunit{\hour}{h}
\newunit{\days}{d}
%    \end{macrocode}
% \subsubsection{more units of temperature}
% Don't forget \paket{gensymb} when typesetting degree Celsius.
%    \begin{macrocode}
\ifunit@@Ohm
  \newunit{\Celsius}{\unitCelsius}
\else
  \ifunit@@redefgensymb\else
    \newunit{\celsius}{\unitCelsius}
  \fi
\fi
%    \end{macrocode}
% \subsubsection{Angles and arcs}
%    \begin{macrocode}
\newunit{\radian}{rad}
\newunit{\steradian}{sr}
\ifunit@@Ohm
  \newnosepunit{\Degree}{\unitDegree}
\else
  \ifunit@@redefgensymb\else
    \newnosepunit{\degree}{\unitDegree}
  \fi
\fi

\newunit{\arcmin}{\ensuremath{{}^\prime}}
\newunit{\arcsec}{\ensuremath{{}^{\prime\prime}}}
%    \end{macrocode}
% Some \TeX\ to realize the syntax using |;| as separator.
%    \begin{macrocode}
\DeclareRobustCommand{\arc}[1]{\expandafter\unit@arc#1;;!}

\def\unit@arc#1;#2;#3!{%
   \ifx\\#1\\\def\unit@arcdegreevalue{0}%
   \else\def\unit@arcdegreevalue{#1}\fi%
   \ifx\\#2\\\def\unit@arcminvalue{0}%
   \else\def\unit@arcminvalue{#2}\fi%
   \ifx\\#3\\\def\unit@arcsecvalue{0}%
   \else\edef\unit@arcsecvalue{\expandafter\unit@strip#3;!}\fi%
   \begingroup%
     \let\unit@@xspace\relax%
     \ifnum\unit@arcsecvalue=0\relax%
       \ifnum\unit@arcminvalue=0\relax%
         \ifnum\unit@arcdegreevalue=0\relax\else%
           \unit@arcdegreevalue\degree% 
         \fi%
       \else%
         \unit@arcdegreevalue\degree%
         \unitvaluesep%
         \unit@arcminvalue\arcmin%
       \fi%
     \else%
       \unit@arcdegreevalue\degree%
       \unitvaluesep%
       \unit@arcminvalue\arcmin%
       \unitvaluesep%
       \unit@arcsecvalue\arcsec%
     \fi%
   \endgroup%
}

\def\unit@strip#1;#2!{%
  \ifx\\#1\\0\else#1\fi%
}

%    \end{macrocode}
% \subsubsection{Frequencies}
%    \begin{macrocode}
\newunit{\hertz}{Hz}
  \newunit{\kilohertz}{\kilo\hertz}
  \newunit{\megahertz}{\mega\hertz}
  \newunit{\gigahertz}{\giga\hertz}

%    \end{macrocode}
% \subsubsection{Force}
%    \begin{macrocode}
\newunit{\newton}{N}
  \newunit{\millinewton}{\milli\newton}
  \newunit{\kilonewton}{\kilo\newton}
%    \end{macrocode}
% \subsubsection{Pressure}
%    \begin{macrocode}
\newunit{\pascal}{Pa}
  \newunit{\hectopascal}{\hecto\pascal}
\newunit{\uBar}{bar}
  \newunit{\millibar}{\milli\uBar}
%    \end{macrocode}
% \subsubsection{magnetic field strength}
%    \begin{macrocode}
\newunit{\weber}{Wb}
%    \end{macrocode}
% \subsubsection{magnetic flux density}
%    \begin{macrocode}
\newunit{\tesla}{T}
%    \end{macrocode}
% \subsubsection{Induction}
%    \begin{macrocode}
\newunit{\henry}{H}
%    \end{macrocode}
% \subsubsection{Lumen}
%    \begin{macrocode}
\newunit{\lumen}{lm}
%    \end{macrocode}
% \subsubsection{Illuminance}
%    \begin{macrocode}
\newunit{\lux}{lx}
%    \end{macrocode}
% \subsubsection{Radioactivity}
%    \begin{macrocode}
\newunit{\becquerel}{Bq}
  \newunit{\megabecquerel}{\mega\becquerel}
\newunit{\curie}{Cu}
%    \end{macrocode}
% \subsubsection{Sievert}
%    \begin{macrocode}
\newunit{\sievert}{Sv}
  \newunit{\millisievert}{\milli\sievert}
%    \end{macrocode}
% \subsection{Loading abbreviations}\label{sec:loading-abbr}
% Now the abbreviations are loaded if no option is specified to
% withhold some abbreviations.
%    \begin{macrocode}
\ifunit@@useabbrv
  \ifunit@@useampabbrv
     \InputIfFileExists{ampabbrv.cfg}%
       {\PackageInfo{unitsdef}{Abbreviations for units of amperage loaded.}}%
       {\PackageWarning{unitsdef}{ampabbrv.cfg not found!}}%
  \fi
  \ifunit@@usefreqabbrv
     \InputIfFileExists{freqabbr.cfg}%
       {\PackageInfo{unitsdef}{Abbreviations for units of frequency loaded.}}%
       {\PackageWarning{unitsdef}{freqabbr.cfg not found!}}%
  \fi
  \ifunit@@usemolabbrv
     \InputIfFileExists{molabbrv.cfg}%
       {\PackageInfo{unitsdef}{Abbreviations for units of amount of substances loaded.}}%
       {\PackageWarning{unitsdef}{molabbrv.cfg not found!}}%
  \fi
  \ifunit@@usevoltabbrv
    \InputIfFileExists{voltabbr.cfg}%
      {\PackageInfo{unitsdef}{Abbreviations for units of voltage loaded.}}%
      {\PackageWarning{unitsdef}{voltabbr.cfg not found!}}%
  \fi
  \ifunit@@usevolabbrv
    \InputIfFileExists{volabbrv.cfg}%
      {\PackageInfo{unitsdef}{Abbreviations for units of volume loaded.}}%
      {\PackageWarning{unitsdef}{volabbrv.cfg not found!}}%  
  \fi
  \ifunit@@useweightabbrv
    \InputIfFileExists{weigabbr.cfg}%
      {\PackageInfo{unitsdef}{Abbreviations for units of weight loaded.}}%
      {\PackageWarning{unitsdef}{weigabbr.cfg not found!}}%        
  \fi
  \ifunit@@useenergyabbrv
    \InputIfFileExists{enerabbr.cfg}%
      {\PackageInfo{unitsdef}{Abbreviations for units of energy loaded.}}%
      {\PackageWarning{unitsdef}{enerabbr.cfg not found!}}%
  \fi
  \ifunit@@uselengthabbrv
    \InputIfFileExists{lengabbr.cfg}%
      {\PackageInfo{unitsdef}{Abbreviations for units of length loaded.}}%
      {\PackageWarning{unitsdef}{lengabbr.cfg not found!}}%
  \fi
  \ifunit@@usetimeabbrv
    \InputIfFileExists{timeabbr.cfg}%
      {\PackageInfo{unitsdef}{Abbreviations for units of time loaded.}}%
      {\PackageWarning{unitsdef}{timeabbr.cfg not found!}}%
  \fi
\fi
\ifunit@@useconfigfile
  \InputIfFileExists{unitsdef.cfg}%
    {\PackageInfo{unitsdef}{Local config file loaded.}}%
    {\PackageInfo{unitsdef}{No local config file found.}}%
\else
  \PackageInfo{unitsdef}{Local config file not loaded.}
\fi
%  
%</package>
%    \end{macrocode}
% \PrintIndex
% \Finale
\endinput
