diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-11 23:59:00 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-11 23:59:00 +0000 |
commit | 777b579bd94005d0c2560254a05385845c4332ab (patch) | |
tree | 6837daf0f4ab2dbfe93516ac5d1970024dcf5c5e /Master/texmf-dist/source/latex/was/gensymb.dtx | |
parent | c31724769ecd7df4458e402b2344b64b83c61dea (diff) |
trunk/Master/texmf-dist/source/latex/was
git-svn-id: svn://tug.org/texlive/trunk@587 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/was/gensymb.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/was/gensymb.dtx | 441 |
1 files changed, 441 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/was/gensymb.dtx b/Master/texmf-dist/source/latex/was/gensymb.dtx new file mode 100644 index 00000000000..95d58740762 --- /dev/null +++ b/Master/texmf-dist/source/latex/was/gensymb.dtx @@ -0,0 +1,441 @@ +%\CheckSum{283} +% +% \iffalse +% +% File `gensymb.dtx'. +% Copyright (c) 2003 Walter Schmidt +% +% 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. +% +% This program consists of the files gensymb.dtx and gensymb.ins +% +% \fi +% +% \iffalse +% +%<*driver> +\ProvidesFile{gensymb.drv} +%</driver> +%<package>\ProvidesPackage{gensymb} + [2003/07/02 v1.0 (WaS)] +%<*driver> +\documentclass{ltxdoc} +\OnlyDescription +\usepackage{textcomp} +\CodelineNumbered +\begin{document} + \DocInput{gensymb.dtx} +\end{document} +%</driver> +% \fi +% +% \newcommand\Lopt[1]{\textsf{#1}} +% \let\Lpack\Lopt +% \GetFileInfo{gensymb.drv} +% +% \title{The \textsf{gensymb} package for \LaTeXe} +% \author{Walter Schmidt\thanks{{\ttfamily w.a.schmidt@gmx.net}}} +% \date{(\fileversion{} -- \filedate)} +% \maketitle +% \sloppy +% +% \section{The problem} +% Typesetting units of measurement with \LaTeX{} is sometimes difficult. +% Why? For instance, most (but no all) typefaces have an +% upright \textmu{} and also a degree symbol, but +% there is no obvious way to use these in math mode. On the other hand, +% an upright \textohm{} is part of all math fonts for \TeX, +% but most text fonts are lacking the corresponding \cmd{\textohm}. +% Thus, it is not only impossible to use the +% same notation in text and in formulas; +% depending on the fonts used, it may even be impossible to +% typeset units properly at all, if you are restricted to +% the means of `standard' \LaTeX. +% +% \section{The macro package} +% The \Lpack{gensymb} package provides a number of `generic' macros, +% which produce the same output in text and math mode: +% \begin{verse} +% \begin{tabular}{ccccc} +% \cmd{\degree} & +% \cmd{\celsius} & +% \cmd{\perthousand}& +% \cmd{\ohm} & +% \cmd{\micro} \\ +% \textdegree & +% \textcelsius & +% \textperthousand & +% \textohm & +% \textmu \\ +% \end{tabular} +% \end{verse} +% Thus, you can write, for instance: +% \begin{verse} +% |$ \lambda = 10.6\,\micro\mathrm{m} $|\\ +% |... a wavelength of 10.6\,\micro m| +% \end{verse} +% With the help of the package \Lpack{units}, you can even apply +% exactly the same notation in text and formulas: +% \begin{verse} +% |$ \lambda = \unit[10.6]{\micro m} $|\\ +% |... a wavelength of \unit[10.6]{\micro m}| +% \end{verse} +% +% Under normal circumstances you should use \Lpack{gensymb} in conjunction with +% the \Lpack{textcomp} package. In this case the above symbols +% are taken from a text font using the TS1 (text companion) +% encoding -- even in math. +% As a result, they will exhibit the style of the surrounding text or of the \cmd{\mathrm} +% alphabet, respectively. +% +% When \Lpack{textcomp} is \emph{not} used (for instance, because your text fonts +% are not available with TS1 encoding), +% the \Lpack{gensymb} package tries to emulate the above symbols +% using what is available in the math fonts. +% However, the symbols \textmu{} and \textperthousand{} cannot be faked, +% and the package will issue appropriate warning messages. +% The option \Lopt{upmu} is a workaround to provide at least the \textmu{} -- see below. +% +% The symbol \cmd{\ohm} is particular, too: Loading the \Lpack{textcomp} +% package does \emph{not ensure} that the text fonts actually include +% an \textohm. Unfortunately, many fonts don't. \LaTeX{} cannot detect this +% situation in advance, and the command \cmd{\ohm} will print some garbage +% then -- possibly without any error message. +% A workaround is to use the options \Lopt{Omega} or \Lopt{Upomega} +% described below. +% +% The default behavior of the \Lpack{gensymb} package can be modified +% using the following options: +% \begin{description} +% \item[\Lopt{upmu}] With this option, the \cmd{\micro} uses internally +% a math symbol with the name \cmd{\upmu}. +% The responsibility to provide this macro lies with you; for instance, +% load the package \Lpack{upgreek}\footnote{% +% available from the same CTAN directory as \Lpack{gensymb}} or use a set +% of math fonts which include an upright mu and make sure it is accessible as \cmd{\upmu}. +% This option is useful, +% when your text fonts are not available with TS1 (text companion) encoding, +% or when their \cmd{\textmu} is ugly or broken. The drawback is, +% that the style of this \textmu{} will not vary with the surrounding font. +% It is always upright roman, regardless of whether +% the surrounding text is sans serif, bold or whatever. +% +% \item[\Lopt{Omega}] makes \cmd{\ohm} always use the upright Greek Omega +% from the current math font, regardless of whether \Lpack{textcomp} is loaded. +% This makes sense, when there is no \textohm{} in your text font(s). +% The option works always, but the style of the Omega in text will +% not vary then. +% +% Various packages provide an option \Lopt{slantedGreek} to make +% uppercase Greek letters in formulas slanted. You may safely use +% this option in conjunction with the \Lopt{Omega} option of the package +% \Lpack{gensymb}: \cmd{\ohm} will be upright, though! +% +% \addtocounter{footnote}{-1} +% \item[\Lpack{Upomega}] A math symbol with the name \cmd{\Upomega} will +% be used to for the \cmd{\ohm}. +% The responsibility to provide this macro lies with you; for instance, +% load the package \Lpack{upgreek}\footnotemark. +% Again, the style of this \cmd{\ohm} in text never changes. +% The option may be useful, when the text font does not include a \cmd{\textomega} +% of its own and the mathematical \cmd{\Omega} is not a suitable substitute, +% for one reason or another. +% \end{description} +% +% \section{Examples} +% \subsection*{The optimum case} +% With text fonts providing \textmu{} as well as \textohm{} +% in the text companion encoding, the default behavior of +% \Lpack{gensymb} is appropriate. +% This holds, e.g., for the EC/TC fonts (i.e., Computer Modern with T1 +% and TS1 encoding), Palatino, Lucida Bright, the Fourier fonts, +% and most font families from MicroPress: +% \begin{verbatim} +% \usepackage[T1]{fontenc} +% \usepackage{textcomp} +% \usepackage{gensymb} +% \end{verbatim} +% +% \subsection*{The normal case} +% Many commercial text fonts have a correct `micro' symbol, but no Omega. +% In this case the package can be loaded with the \Lopt{Omega} option, +% to make sure that the mathematical Omega is used instead: +% \begin{verbatim} +% \usepackage[T1]{fontenc} +% \usepackage{textcomp} +% \usepackage{mathptmx} % for instance +% \usepackage[Omega]{gensymb} +% \end{verbatim} +% +% \subsection*{Using the `classical' CM fonts} +% When you are restricted to the classical Computer Modern fonts with +% OT1 encoding, you can still take the Omega from the math fonts, +% but you need to take the upright mu from an an extra font such as +% Euler Roman. +% Notice, however, that \cmd{\perthousand} is not made available. +% You may try \cmd{\permil} instead, which is provided in the +% WASY fonts. +% \begin{verbatim} +% \usepackage[Euler]{upgreek} +% \usepackage[Omega, upmu]{gensymb} +% \usepackage{wasysym} +% \let\perthousand=\permil +% \end{verbatim} +% +% \subsection*{A special case} +% Imagine that you are using the Bitstream Charter text fonts +% in conjunction with Euler-VM for math.\footnote{I do not actually +% recommend this combination\dots} +% Charter, like most typefaces from Bitstream, has a wrong mu symbol. +% The missing Omega could be taken from the math font (Euler), but it would not go well +% with Charter in a combination such as M$\Omega$. +% As a workaround, load the \Lpack{upgreek} package +% and take both \cmd{\micro} and \cmd{\ohm} from the `Adobe Symbol' font: +% \begin{verbatim} +% \usepackage[T1]{fontenc} +% \usepackage{textcomp} +% \usepackage{charter,eulervm} +% \usepackage[Symbol]{upgreek} +% \usepackage[Upomega, upmu]{gensymb} +% \end{verbatim} +% +% \section{Using \Lpack{gensymb} together with other packages} +% \begin{itemize} +% \item +% \Lpack{gensymb} goes well with the package \Lpack{units}, +% but it cannot be used in conjunction with the +% package \Lpack{SIunits}, because the latter has its own means to typeset +% prefixes. +% \item +% Using the package \Lpack{mathcomp} together with \Lpack{gensymb} +% is possible, if you need the additional `math companion' symbols. +% Both packages will use only one common math symbol font. +% \end{itemize} +% +% \section{Known deficiencies} +% The current version of the package does not work properly +% in conjunction with the LY1 font encoding. +% This will possibly be fixed in a future release, if there is an actual need. +% +% \StopEventually{} +% +% \section{Implementation} +% +% The options are implemented using switches: +% \begin{macrocode} +%<*package> +\newif\ifgns@Upomega +\newif\ifgns@Omega +\newif\ifgns@upmu +% \end{macrocode} +% \begin{macrocode} +\DeclareOption{Upomega}{\gns@Upomegatrue} +\DeclareOption{Omega}{\gns@Omegatrue} +\DeclareOption{upmu}{\gns@upmutrue} +\ProcessOptions\relax +% \end{macrocode} +% These are the generic commands: +% \begin{macrocode} +\newcommand\celsius{} +\newcommand\degree{} +\newcommand\ohm{} +% \end{macrocode} +% The following macros will be used later to actually define the generic commands. +% We start with a macro to fake \cmd{\degree} and \cmd{\celsius} and to generate +% a warning message for \cmd{\perthousand}: +% \begin{macrocode} +\def\gns@usefakedsymbols{% +\renewcommand{\degree}{\ensuremath{^\circ}} +\DeclareRobustCommand{\celsius}{% + \ifmmode^\circ\mathrm{C}\else$^\circ$C\fi} +\PackageInfo{gensymb}{% + Faking symbols for \protect\degree\space and \protect\celsius} +\PackageWarningNoLine{gensymb}{% + Not defining \protect\perthousand} +} +% \end{macrocode} +% The following macro sets up a SymbolFont for the text companion symbols to be +% used in math. If \cmd{\tcmu} is already defined, we assume that the +% \Lpack{mathcomp} package is already loaded, and that the `math companion' +% symbols need not be defined once again: +% \begin{macrocode} +\def\gns@setupmathcomp{% +\expandafter\ifx\csname tcmu\endcsname\relax + \DeclareSymbolFont{gns@font}{TS1}{\familydefault}{m}{n} + \ifx\mv@bold\@undefined\else + \SetSymbolFont{gns@font}{bold}{TS1}{\familydefault}{\bfdefault}{n} + \fi + \DeclareMathSymbol{\tccelsius}{\mathord}{gns@font}{137} % {'211} + \DeclareMathSymbol{\tcdegree}{\mathord}{gns@font}{176} % {'260} + \DeclareMathSymbol{\tcperthousand}{\mathord}{gns@font}{135} % {'207} + \DeclareMathSymbol{\tcmu}{\mathord}{gns@font}{181} % {'265} + \DeclareMathSymbol{\tcohm}{\mathord}{gns@font}{87} % {'127} + \PackageInfo{gensymb}{Math companion symbols declared} +\else + \PackageInfo{gensymb}{Math companion symbols found} +\fi +} +% \end{macrocode} +% A macro to define \cmd{\degree}, \cmd{\celsius} and \cmd{\perthousand} +% so as to use text companion symbols: +% \begin{macrocode} +\def\gns@usetcsymbols{% +\DeclareRobustCommand{\degree}{% + \ifmmode\tcdegree\else\textdegree\fi} +\DeclareRobustCommand{\celsius}{% + \ifmmode\tccelsius\else\textcelsius\fi} +\DeclareRobustCommand{\perthousand}{% + \ifmmode\tcperthousand\else\textperthousand\fi} +\PackageInfo{gensymb}{Using text companion symbols for % + \protect\degree, \protect\celsius\space and \protect\perthousand} +} +% \end{macrocode} +% A macro to define \cmd{\ohm} so as to use the math symbol \cmd{\Upomega}: +% \begin{macrocode} +\def\gns@useUpomega{% + \expandafter\ifx\csname Upomega\endcsname\relax + \PackageError{gensymb} + {You have requested the option Upomega,\MessageBreak + but the command \protect\Upomega\space is undefined} + {Load the upgreek package additionally and try again!} + \fi + \DeclareRobustCommand{\ohm}{\ifmmode\Upomega\else$\Upomega$\fi} + \PackageInfo{gensymb}{Using \protect\Upomega\space for \protect\ohm} +} +% \end{macrocode} +% A macro to define \cmd{\ohm} so as to use \cmd{\Omega} (or \cmd{\upOmega}, +% if it is provided): +% \begin{macrocode} +\def\gns@useOmega{% + \expandafter\ifx\csname upOmega\endcsname\relax + \DeclareRobustCommand{\ohm}{\ifmmode\Omega\else$\Omega$\fi} + \PackageInfo{gensymb}{Using \protect\Omega\space for \protect\ohm} + \else + \DeclareRobustCommand{\ohm}{\ifmmode\upOmega\else$\upOmega$\fi} + \PackageInfo{gensymb}{Using \protect\upOmega\space for \protect\ohm} + \fi +} +% \end{macrocode} +% A macro to define \cmd{\ohm} so as to use the text companion symbol: +% \begin{macrocode} +\def\gns@usetextohm{% + \DeclareRobustCommand{\ohm}{\ifmmode\tcohm\else\textohm\fi} + \PackageInfo{gensymb}{Using \protect\textohm\space for \protect\ohm} +} +% \end{macrocode} +% A macro to define \cmd{\micro} so as to use the math symbol \cmd{\upmu}: +% \begin{macrocode} +\def\gns@useupmu{% + \expandafter\ifx\csname upmu\endcsname\relax + \PackageError{gensymb} + {You have requested the option upmu,\MessageBreak + but the command \protect\upmu\space is undefined} + {Load the upgreek package additionally and try again!} + \fi + \DeclareRobustCommand{\micro}{\ifmmode\upmu\else$\upmu$\fi} + \PackageInfo{gensymb}{Using \protect\upmu\space for \protect\micro} +} +% \end{macrocode} +% A macro to define \cmd{\micro} so as to use the text companion symbol: +% \begin{macrocode} +\def\gns@usetextmu{% + \DeclareRobustCommand{\micro}{\ifmmode\tcmu\else\textmu\fi} + \PackageInfo{gensymb}{Using \protect\textmu\space for \protect\micro} +} +% \end{macrocode} +% A macro to issue a warning, if \cmd{\micro} cannot be made available: +% \begin{macrocode} +\def\gns@usenomu{% + \PackageWarningNoLine{gensymb}{% + Not defining \protect\micro} +} +% \end{macrocode} +% The actual work is executed AtBeginDocument, so that we can detect the +% presence of the \Lpack{textcomp} package and the availability of +% \cmd{\Upmu} and other commands, regardless of the sequence of loading the +% packages. +% \begin{macrocode} +\AtBeginDocument{% +% \end{macrocode} +% First, we check for \Lpack{textcomp}. If it is loaded, we set up the +% text companion symbols for use in math and define \cmd{\degree}, \cmd{\celsius} +% and \cmd{\perthousand} so that they use these. Otherwise, the symbols are faked +% as far as possible: +% \begin{macrocode} +\@ifpackageloaded{textcomp}{\gns@setupmathcomp\gns@usetcsymbols}% + {\gns@usefakedsymbols} +% \end{macrocode} +% Now we define \cmd{\ohm}. In case the options \Lopt{Upomega} +% or \Lopt{Omega} have been specified, behave acordingly. +% Otherwise, use the text companion symbol, if available. +% Default is to use the mathematical Omega: +% \begin{macrocode} +\ifgns@Upomega + \gns@useUpomega +\else +\ifgns@Omega + \gns@useOmega +\else +\@ifpackageloaded{textcomp}% + {\gns@usetextohm}% + {\gns@useOmega} +\fi\fi +% \end{macrocode} +% Next, define \cmd{\micro}. In case the option \Lopt{upmu} +% has been specified, behave acordingly. +% Otherwise, use the text companion symbol, if available. +% Default is not to provide \cmd{\micro} at all. +% \begin{macrocode} +\ifgns@upmu + \gns@useupmu +\else +\@ifpackageloaded{textcomp}% + {\gns@usetextmu}% + {\gns@usenomu} +\fi +% \end{macrocode} +% Finally, we destroy the commands that are no longer needed: +% \begin{macrocode} +\let\gns@usefakedsymbols\relax +\let\gns@setupmathcomp\relax +\let\gns@usetcsymbols\relax +\let\gns@useUpomega\relax +\let\gns@useOmega\relax +\let\gns@usetextohm\relax +\let\gns@useupmu\relax +\let\gns@usenomu\relax +\let\gns@usetextmu\relax +% \end{macrocode} +% \begin{macrocode} +} +%</package> +% \end{macrocode} +% +% The next line of code is only to prevent DocStrip from adding the +% character table to all modules: +% \begin{macrocode} +\endinput +% \end{macrocode} +% \Finale +%% \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 \~} +%% |