isomath

Mathematical style for science and technology

Date
2012-09-10
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

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.