diff options
Diffstat (limited to 'macros/latex/contrib/isomath/isomath.sty')
-rw-r--r-- | macros/latex/contrib/isomath/isomath.sty | 372 |
1 files changed, 372 insertions, 0 deletions
diff --git a/macros/latex/contrib/isomath/isomath.sty b/macros/latex/contrib/isomath/isomath.sty new file mode 100644 index 0000000000..97a6ee32bd --- /dev/null +++ b/macros/latex/contrib/isomath/isomath.sty @@ -0,0 +1,372 @@ +% isomath +% ******* +% Mathematical style for science and technology +% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +% +% :Date: 2012-09-10 +% :Copyright: © 2008, 2012 Günter Milde +% :Licence: This work may be distributed and/or modified under the +% conditions of the `LaTeX Project Public License`_, either +% version 1.3 of this license or (at your option) any later version. +% +% :Abstract: The `isomath` package provides tools for a mathematical style +% that conforms to the International Standard ISO 80000-2 and is +% common in science and technology. It changes the default shape of +% capital Greek letters to italic, sets up bold italic and +% sans-serif bold italic math alphabets with Latin and Greek +% characters, and defines macros for markup of vector, matrix and +% tensor symbols. +% +% :Identification: +% :: + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{isomath} +[2012/09/04 v0.6.1 ISO math style] + +% .. contents:: +% +% History +% ======= +% +% .. class:: borderless +% +% ===== =========== ======================================================== +% 0.1 2008-09-25 first public version. +% 0.2 2008-10-02 bugfix: a usage example was uncommented; +% \ updated documentation; +% \ define \mathsans only if OMLmathsans is true; +% \ option reuseMathalphabets -> reuseMathAlphabets. +% 0.3 2009-06-19 documentation update; +% \ fix OMLmathrm and OMLmathsans definitions; +% \ switch license to LPP. +% 0.4 2010-08-23 split user documentation from literate source; +% \ option ``scaled``; +% \ documentation update. +% 0.5 2011-01-04 math alphabet names matching Unicode; +% \ documentation review and extension; +% \ bold alphabet variants in ``bold`` math version; +% \ upright numbers with ``\vectorsym``. +% 0.6 2012-09-10 Scaling for Kepler Sans (``sfdefault=jkpss``); +% \ documentation update, new caption and abstract. +% ===== =========== ======================================================== +% +% +% Requirements +% ============ +% +% fixmath.sty +% ----------- +% The package fixmath_ by Walter Schmidt defines Greek letters as symbols +% of type ``\mathalpha`` and takes them from the ``letters`` symbol font in +% ``\mathnormal`` (as opposed to ``operators`` in ``fontmath.ltx``). +% +% `fixmath` also defines the ``\mathbold`` alphabet, setting it to ``cmm``. +% `isomath` overwrites this definition with a configurable value for +% the font family. :: + +\RequirePackage{fixmath} + + +% kvoptions.sty +% ------------- +% The kvoptions_ package in the oberdiek_ bundle facilitates the setup of +% package options and provides a key=value interface (based on keyval_):: + +\RequirePackage{kvoptions} + + +% Options +% ======= +% +% rmdefault +% --------- +% Family for roman math fonts. Must be available in OML +% encoding. The default is to use the corresponding text font family +% (``\rmdefault``). :: + +\DeclareStringOption[\rmdefault]{rmdefault} + +% sfdefault +% --------- +% Family for sans-serif math fonts. The default selects `CM Bright`, as +% most sans serif fonts are not available in OML encoding:: + +\DeclareStringOption[cmbr]{sfdefault} + +% scaled +% ------ +% The sans-serif fonts, ``fav`` (Arev), ``llcmss`` (LX Fonts), +% ``jkpss`` (Kepler Serif) and ``iwona`` can be scaled +% with the ``scaled`` option. :: + +\DeclareStringOption[1.0]{scaled} + +% reuseMathAlphabets +% ------------------ +% The definition of new `math alphabets`_ can lead to a “too many math +% alphabets used in version normal” error. +% +% As a workaround, this option tells `isomath` to re-use the existing +% ``\mathbf`` and ``\mathsf`` alphabets for *italic* bold and sans-serif +% bold. :: + +\DeclareBoolOption{reuseMathAlphabets} + +% OMLmath* +% -------- +% The following options cause `isomath` to (re)define the corresponding +% `math alphabets`_ in OML encoding:: + +\DeclareBoolOption{OMLmathrm} +\DeclareBoolOption{OMLmathbf} +\DeclareBoolOption{OMLmathsf} +\DeclareBoolOption{OMLmathsfit} +\DeclareBoolOption{OMLmathtt} +% backwards compatibility option alias +\DeclareVoidOption{OMLmathsans}{\isomath@OMLmathsfittrue} + +% Setting these options enables access to small Greek letters in different +% shapes with e.g. ``\mathrm{\pi}`` but only *if an OML encoded font is +% available*. Currently, only the mathdesign_ fonts support roman in OML +% encoding. +% +% With some packages, these options can result in a “too many math alphabets +% used in version normal” error. +% +% -------------------------------------------------------- +% +% Process the options with ``kvoptions`` extensions:: + +\ProcessKeyvalOptions* + + +% Declarations +% ============ +% +% Math alphabets +% -------------- +% +% In math, LaTeX uses “absolute” fontnames instead of a selection by +% family, shape, and weight because typefaces have a semantic meaning +% [fntguide]_. +% +% `isomath` defines a math alphabet for every required font variant and +% optionally re-defines the standard math alphabets in `OML` font encoding. +% +% Unfortunately, the number of math alphabets in one math version is +% limited to 16, so we have to be careful not to exceed this. The +% ``reuseMathAlphabets`` option reduces the number of math alphabet +% definitions by two, with the side effect of italic shape with +% ``\mathbf`` and ``\mathsf`` commands:: + +\ifisomath@reuseMathAlphabets + \PackageWarningNoLine{isomath}{% + Re-using math alphabet `mathsf' for \protect \mathsfbfit + \MessageBreak and `mathbf' for \protect \mathbfit + } +\fi + +% mathbfit +% ~~~~~~~~ +% The *bold italic* math alphabet is named ``\mathbfit`` like in +% unicode-math_ (with an alias ``\mathbold`` like in fixmath_ and +% related packages). With the reuseMathAlphabets_ option, the roman bold +% math alphabet ``\mathbf`` is redefined and ``\mathbfit`` made an +% alias. The series selector ``bx`` (bold extended) is used, because it +% is better supported than ``b``. (Is there any LaTeX math font +% distinguishing between ``b`` and ``bx``?) :: + +\ifisomath@reuseMathAlphabets + \DeclareMathAlphabet{\mathbf}{OML}{\isomath@rmdefault}{bx}{it} + \def\mathbfit{\mathbf} +\else + \DeclareMathAlphabet{\mathbfit}{OML}{\isomath@rmdefault}{bx}{it} +\fi + +% alias (overwriting the definition from fixmath):: + +\renewcommand*{\mathbold}{\mathbfit} + +% mathsfit +% ~~~~~~~~ +% For *sans-serif italic*, we define a new alphabet ``\mathsfit`` (with +% the alias ``\mathsans`` in analogy to ``\mathbold``). As this typeface +% is not required by ISO 80000-2 and TeX limits the number of math alphabets +% to 16 per math version, it is only defined if the ``OMLmathsfit`` or +% ``OMLmathsans`` option is set:: + +\ifisomath@OMLmathsfit + \DeclareMathAlphabet{\mathsfit}{OML}{\isomath@sfdefault}{m}{it} + \SetMathAlphabet{\mathsfit}{bold}{OML}{\isomath@sfdefault}{bx}{it} + \def\mathsans{\mathsfit} +\fi + +% mathsfbfit +% ~~~~~~~~~~~~ +% The *sans serif bold italic* alphabet is used for tensor symbols. +% Following the Unicode naming scheme it is called +% ``\mathsfbfit``(with the backwards compatibility alias ``\mathboldsans``). +% With the reuseMathAlphabets_ option, the upright sans serif math +% alphabet ``\mathsf`` is redefined and ``\mathsfbfit`` made an +% alias to it:: + +\ifisomath@reuseMathAlphabets + \DeclareMathAlphabet{\mathsf}{OML}{\isomath@sfdefault}{bx}{it} + \def\mathsfbfit{\mathsf} +\else + \DeclareMathAlphabet{\mathsfbfit}{OML}{\isomath@sfdefault}{bx}{it} +\fi +\def\mathboldsans{\mathsfbfit} + +% Redefine standard alphabets +% ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +% +% Redefine standard alphabets in `OML` font encoding +% if the corresponding `OMLmath*`_ option is true:: + +\ifisomath@OMLmathrm + \SetMathAlphabet{\mathrm}{normal}{OML}{\isomath@rmdefault}{m}{n} + \SetMathAlphabet{\mathrm}{bold}{OML}{\isomath@rmdefault}{bx}{n} +\fi +\ifisomath@OMLmathbf + \SetMathAlphabet{\mathbf}{normal}{OML}{\isomath@rmdefault}{bx}{n} +\fi +\ifisomath@OMLmathsf + \SetMathAlphabet{\mathsf}{normal}{OML}{\isomath@sfdefault}{m}{n} + \SetMathAlphabet{\mathsf}{bold}{OML}{\isomath@sfdefault}{bx}{n} +\fi +\ifisomath@OMLmathtt + \SetMathAlphabet{\mathtt}{normal}{OML}{\ttdefault}{m}{n} + \SetMathAlphabet{\mathtt}{bold}{OML}{\ttdefault}{bx}{n} +\fi + +% Command aliases +% --------------- +% +% The following macros allow semantic markup of mathematical symbols. +% The argument is typeset as proposed by ISO 80000-2 and +% `Typefaces for Symbols in Scientific Manuscripts`_. +% +% \\vectorsym +% ~~~~~~~~~~~ +% Alphabetic vectors symbols are typeset *boldface italic* while numeric +% ones (e.g. zero vector) are typeset *boldface upright*. The number +% test is a simplified version from the LaTeX FAQ "`Is the argument a number?`__" +% It fails if a number is followed by a non-number, e.g. ``\vectorsym{1a}``, +% but this is no valid vector symbol and would look strange with the +% ``\vec`` accent, too. :: + +\providecommand*{\vectorsym}[1]{% + \ifnum9<1#1% + \mathbf{#1}% + \else% + \mathbfit{#1}% + \fi} + +% For easier writing or to make existing documents conform to the standard, +% you might want to re-define the standard ``\vec`` command after loading this +% package. +% +% __ http://www.tex.ac.uk/cgi-bin/texfaq2html?label=isitanum +% +% \\matrixsym +% ~~~~~~~~~~~ +% Symbols for matrices are typeset *boldface italic*, i. e. in the same face +% as vectors. :: + +\providecommand*{\matrixsym}{\vectorsym} + +% \\tensorsym +% ~~~~~~~~~~~ +% Symbols for tensors are *sans-serif bold italic*:: + +\providecommand*{\tensorsym}{\mathsfbfit} + + +% Font setup fixes +% ---------------- +% +% Substitutions needed for the math alphabet definitions and setup for +% scaled fonts. For details about the font definition macros see +% [fntguide]_. +% +% Unknown makro in font definition file +% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +% The `Kepler Sans` font definition file ``omljkpss.fd`` contains a boolean +% that is defined in ``kpfonts.sty``. This leads to errors if the fonts are +% used from another package. Provide a dummy definition:: + +\newif\ifkp@upRm + + +% Common family name for text and math fonts +% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +% Some font packages provide matching text and math font but do not +% define a substitution in their ``*.fd`` files. Ideally, the following +% mappings should be moved there. +% +% Mathpazo (Palatino) ppl ↔ zplm :: + +\DeclareFontFamily{OML}{ppl}{\skewchar\font127} +\DeclareFontShape{OML}{ppl}{m}{it}{<-> ssub * zplm/m/it}{} +\DeclareFontShape{OML}{ppl}{bx}{it}{<-> ssub * zplm/b/it}{} + + +% Scaling +% ~~~~~~~ +% Scale the ``fav`` (Arev), ``iwona``, ``jkpss`` (Kepler Sans) and +% ``llcmss`` (LX Fonts) sans serif fonts by the value of the scaled_ option. +% +% To get scaled versions of a font, you cannot use the ``ssub`` +% `size function`, but must use the empty function or ``s`` with the font +% file as argument [found by experiment, GM 2010-01-28]. +% +% Arev (see ``omlzavm.fd``) fav ↔ zavm:: + +\DeclareFontFamily{OML}{fav}{\skewchar\font127} +\DeclareFontShape{OML}{fav}{m}{it}{<-> s * [\isomath@scaled] zavmri7m}{} +\DeclareFontShape{OML}{fav}{bx}{it}{<-> s * [\isomath@scaled] zavmbi7m}{} + +% Iwona (see ``omliwona.fd``) iwona ↔ mi-iwona:: + +\DeclareFontFamily{OML}{iwona}{} +\DeclareFontShape{OML}{iwona}{m}{it}{<-> s * [\isomath@scaled] mi-iwonari}{} +\DeclareFontShape{OML}{iwona}{bx}{it}{<-> s * [\isomath@scaled] mi-iwonabi}{} + +% Kepler Serif (see ``omljkpss.fd``):: + +\DeclareFontFamily{OML}{jkpss}{\skewchar\font127 } +\DeclareFontShape{OML}{jkpss}{m}{it}{<-> s * [\isomath@scaled] jkpssmi}{} +\DeclareFontShape{OML}{jkpss}{bx}{it}{<-> s * [\isomath@scaled] jkpssbmi}{} + +% LX Fonts (see ``lxfonts.sty``) llcmss ↔ llcmm:: + +\DeclareFontFamily{OML}{llcmss}{\skewchar\font'177} +\DeclareFontShape{OML}{llcmss}{m}{it}{<-> s * [\isomath@scaled] lcmmi8}{} +\DeclareFontShape{OML}{llcmss}{bx}{it}{<-> s * [\isomath@scaled] lcmmib8}{} + + +% References +% ========== +% +% .. [fntguide] `LaTeX 2e font selection`: +% http://mirror.ctan.org/macros/latex/doc/fntguide.pdf. +% +% .. _LaTeX Project Public License: http://www.latex-project.org/lppl.txt +% .. _arev: http://mirror.ctan.org/help/Catalogue/entries/arev.html +% .. _cmbright: http://mirror.ctan.org/help/Catalogue/entries/cmbright.html +% .. _fixmath: http://mirror.ctan.org/help/Catalogue/entries/fixmath.html +% .. _hvmath: http://mirror.ctan.org/help/Catalogue/entries/hvmath.html +% .. _iwona: http://mirror.ctan.org/help/Catalogue/entries/iwona.html +% .. _keyval: http://mirror.ctan.org/help/Catalogue/entries/keyval.html +% .. _kvoptions: http://mirror.ctan.org/help/Catalogue/entries/kvoptions.html +% .. _lxfonts: http://mirror.ctan.org/help/Catalogue/entries/lxfonts.html +% .. _mathdesign: http://mirror.ctan.org/help/Catalogue/entries/mathdesign.html +% .. _mathematical alphanumeric symbols: +% http://www.unicode.org/charts/PDF/U1D400.pdf +% .. _oberdiek: http://mirror.ctan.org/help/Catalogue/entries/oberdiek.html +% .. _`Typefaces for Symbols in Scientific Manuscripts`: +% http://physics.nist.gov/cuu/pdf/typefaces.pdf +% .. _unicode-math: +% http://mirror.ctan.org/help/Catalogue/entries/unicode-math.html |