# 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.

Identification

      \NeedsTeXFormat{LaTeX2e}
      \ProvidesPackage{isomath}
      [2012/09/04 v0.6.1 ISO math style]

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.

Contents

- History

- Requirements

  - fixmath.sty

  - kvoptions.sty

- Options

  - rmdefault

  - sfdefault

  - scaled

  - reuseMathAlphabets

  - OMLmath*

- Declarations

  - Math alphabets

    - mathbfit

    - mathsfit

    - mathsfbfit

    - Redefine standard alphabets

  - Command aliases

    - \vectorsym

    - \matrixsym

    - \tensorsym

  - Font setup fixes

    - Unknown makro in font definition file

    - Common family name for text and math fonts

    - Scaling

- References

# History

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.

### \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]
  (1, 2)

  LaTeX 2e font selection: http://mirror.ctan.org/macros/latex/doc/fntguide.pdf.