% \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 % % %<*dtx> \ProvidesFile{unitsdef.dtx} % %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{unitsdef}[2005/01/04 v0.2 Typesetting units] %\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} % % \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{\}|.\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 % % % \end{macrocode} % \PrintIndex % \Finale \endinput