% isomath: Math for scientists % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ % % :Copyright: © 2008 Günter Milde % :Licence: Released under the terms of the GNU General Public License % (version 2 or later). % % :Abstract: The isomath package enables formatting Greek and Latin % letters as symbols for vectors, matrices, and tensors % in the typefaces recommended for scientific papers % by the International Standard ISO 31. For this, a *bold italic* % and a *sans-serif bold italic* math alphabet are defined. % % .. contents:: % % Introduction % ************ % % Motivation % ========== % % .. Did you ever manage to write the stress tensor ``$\sigma$`` in a % *sans-serif bold italic* typeface, as recommended by [typefaces]_? % % Scientific organisations like IUPAP_, IUPAC_, NIST_, BIPM_, and others % recommend typesetting math according to the International Standard ISO 31 % `Quantities and units` [ISO-31]_.\ [#]_ % % The traditional `LaTeX math style` deviates in some points from this rules: % % * The ``\vec`` command produces an array accent, while ISO 31 recommends % a *bold italic* typeface for vector symbols. % % * Greek letters are excluded from font changes with the math alphabets, % while the ISO 31 rules apply equally to letters from both the Greek % and the Latin alphabet. % % * There is no provision for typesetting of Greek letters in *bold italic* % style recommended for vectors. % % * There is no provision for typesetting letters in *sans-serif bold italic* % recommended for typesetting tensor symbols. % % Some of these points are adressed by `related packages`_, however % there is currently no package (known to the author) that defines the % *sans-serif bold italic* math alphabet needed for tensor symbols. % % .. [#] Summaries of these rules are free available, see [typefaces]_, % [fonts-for-symbols]_, and [SI-brochure]_. % % % Features % ======== % % The ``isomath.sty`` package facilitates the task to abide with ISO 31 when % typesetting math with LaTeX: % % * Equal treatment of Latin and `Greek in math`_ via fixmath.sty_: % % + Greek letters change shape together with Latin letters if a different % math alphabet is used. % % + Uppercase Greek letters are typeset in italic style by default. % % + Upright Greek letters can be made available through the ``\mathrm`` % and ``\mathbf`` alphabets, if the corresponding fonts support the % `OML font encoding`_. % % * The `command aliases`_ ``\vectorsym``, ``\matrixsym``, and ``\tensorsym`` % allow semantic markup. They print the argument in an ISO-conforming % typeface. % % * For this, new `math alphabets`_ are defined: % % :``\mathbold``: *boldface italic* (vector and matrix symbols), % :``\mathsans``: *sans-serif italic* (optional), % :``\mathboldsans``: *sans-serif bold italic* (tensor symbols). % % The family for these fonts is by default taken from the document's % ``\rmdefault`` and ``\sfdefault`` values. The ``rmdefault=`` and % ``sfdefault=`` options_ can be used to override the defaults. % % * Missing `font mappings`_ are defined for font families which have an OML % encoded counterpart but no substitution definition in their ``*.fd`` % files. % % % Usage % ===== % % Make sure that LaTeX can find ``isomath.sty`` and insert the command % ``\usepackage{isomath}`` in the document preamble. % % Examples % -------- % % * In many cases (e.g. when ``\sfdefault`` expands to "cmss"), the % ``\mathboldsans`` alphabet is neither bold nor sans, as "cmss" has no OML % encoded variants and maps to "cmmi". % % Use cmbright_ for sans-serif math alphabets:: % \usepackage[sfdefault=cmbr]{isomath} % % * Redefine the standard ``\vec`` macro to typeset its argument in `bold % italic`:: % \usepackage[sfdefault=cmbr]{isomath} % \renewcommand{\vec}{\vectorsym} % % * The mathdesign_ package provides an OML encoded *bold roman* font but does % not set it up for ``\mathbf``:: % \usepackage[charter]{mathdesign} % \usepackage[OMLmathbf,sfdefault=cmbr]{isomath} % % Now, ``\mathbf{\pi}`` produces a bold upright pi symbol. % % Related packages % ================ % % A set of packages at CTAN also defines Greek letters as ``\mathalpha`` and % provide the ``\mathbold`` alphabet (in OML): % % * arev_ (Arev/Vera Sans) % * cmbright_ (CM Bright) % * eulervm_ (Euler Math) % * fixmath_ (Computer Modern) % * hvmath_ (HV-Math/Helvetica) % * mathpazo_ (Palatino) % * tmmath_ (TM-Math/Times) % % This package requires and extends fixmath.sty_. % % The cmbright_ package provides *sans serif* and *sans-serif bold* fonts for % the ``\mathsans`` and ``\mathboldsans`` alphabets that match with Computer % Modern and derivatives. % % Conflicts % --------- % % The `fourier`_ package for math typesetting with Utopia defines its own, % incompatible math font encodings. It cannot be used with ``isomath`` but % provides other means to typeset upright or italic Greek (see its % documentation). % % The `kpfonts`_, `pxfonts`_, and `txfonts`_ packages define many additional % math alphabets and can only be combined with ``isomath``, if the % reuseMathAlphabets_ option is used. % % Greek in Math % ============= % % Unicode Math Support % -------------------- % % The technical report `Unicode Support for Mathematics` [tr25]_ lists % *alphanumeric symbols encountered in mathematics* in Table 2.1 `Mathematical % Alphabets`. It includes Latin and Greek letters in the bold, italic, bold % italic, sans-serif bold, and sans-serif bold italic math styles. % % The Unicode block `mathematical alphanumeric symbols`_ provides style % variants for Latin and Greek letters and digits. It is "to be used for % mathematical variables where style variations are important semantically". % % % OML font encoding % ----------------- % % The OML font encoding is the only established encoding providing % Latin and Greek letters in one font: % % * LGR is Greek-only, % * T7 is just a "reserved name" for a standard Greek encoding. % % Definition % """""""""" % % The `LaTeX font encodings` guide [encguide]_ names OML `TeX math italic` and % defines: % % The OML encoding contains italic Latin and Greek letters for use in % mathematical formulas (typically used for variables) together with some % symbols. % % However, the reference to **italic** seems to be a description of the *state % of the art* rather than a necessary restriction: % % * The only OML encoded CM font is `Computer Modern Math Italic` (cmmi), % % * but generally, font encodings (T1, OT1) are not specific to the font shape. % % * Both, ``\DeclareSymbolFont`` and ``\DeclareMathAlphabet`` require a % {} argument. Thus it is possible to define OML encoded math % alphabets in roman {n} as well as italic {it} shape without conflicts. % % * A more suitable public name would be `TeX math letters` or `Original/Old % Math Letters`. The latter would also explain the acronym OML. % % Support % """"""" % % Unfortunately, support for the OML encoding is missing for many font % families even if the base font contains all Greek letters. % Supported font families can be found searching for ``oml*.fd`` files and by % grepping for "DeclareFont.*OML", "SymbolFont.*OML" and "MathAlphabet.*OML" % in ``*.sty`` files. % % .. _table 1: % % .. table:: Fonts supporting the OML font encoding % :class: booktab % % ============= =========================== ======= ======== ====== ======= % Name Family {m}{it} {bx}{it} {m}{n} {bx}{n} % ============= =========================== ======= ======== ====== ======= % aer AE (Almost European) x x % antt Antykwa Torunska x x % cmr Computer Modern Roman x x % ccr Concrete x x % cmbr Computer Modern Bright x x % hlh Lucida x x % hfor CM with old-style digits x x % iwona Iwona (sans serif) x x % jkp Kepler Serif x x % jkpl Kepler Serif x x % jkpvos Kepler Serif x x % jkplvos Kepler Serif x x % llcmm LXfonts (sans serif) x x % lmr Latin Modern Roman x x % mak Kerkis x % mdbch Math Design Charter x x ? x % mdput Math Design Utopia x x ? x % mdugm Math Design Garamond x x ? x % neohellenic GFS Neohellenic x % plcm CM (PLaTeX) x % ptmom Times (Omega or MB-Times) x x % ptmomu Times (Omega or MB-Times) x x % ptmcm Times (psfont) x % pxr Palatino (pxfonts) x x % qpl Palatino/Pagella (qpxmath) x x % qtm Times/Termes (qtxmath) x x % txr Times (txfonts) x x % ywclm (greektex) x x % zavm Arev (Vera Sans-Serif) x x % zesfcm (efont) x % zplm Palatino (mathpazo) x x % zpple x x % ztmcm Times (mathptmx) x % zer Computer Modern (zefonts) x x % ============= =========================== ======= ======== ====== ======= % % Explanations: % % * If there is an alias (substitution) from the text font to a math-variant, % only the text font is listed. % % * Many text fonts define substitutions also for {n}, however mapping to % an italic variant of the OML encoded font. These are not listed as % supporting {m}{n} or {bx}{n} here. % % The following fonts define ``cmm`` as OML substitution. A better matching % substitution can be set with the rmdefault_ option. % % .. _table 2: % % .. table:: Non-CM fonts with ``cmm`` as OML substitution % :class: booktab % % ============= =============================== % Family Name % ============= =============================== % bch Charter (psnfss) % pag Avant Garde (psnfss) % pbk Bookman (psnfss) % pcr Courier (psnfss) % phv Helvetica (psnfss) % pnc New Century Schoolbook (psnfss) % ppl Palatino (psnfss) % ptm Times Roman (psnfss) % put Utopia (psnfss) % pzc Zapf Chancery (psnfss) % uag Avant Garde (avantgar) % ubk Bookman (bookman) % ucr Courier (courier) % ucrs Courier % unc New Courier (nctrsbk) % uni Universal (universa) % uhv Helvetica (helvetic) % upl Palatino (palatino) % utm Times (times) % uzc Zapf Chancery (zapfchan) % ============= =============================== % % Conclusions and outlook % ----------------------- % % It is hoped, that in the future more fonts families will support the OML % encoding in normal and bold weight as well as upright and italic shape. % This would be a major step towards a LaTeX equivalent of the `Mathematical % Alphanumeric Symbols`_ Unicode block. % % This should be (relatively) easy to achieve via virtual fonts when the % glyphs for the Greek letters already exist. Examples are Latin Modern, % Kerkis, GFS-Neohellenic, LX-Fonts and KP-Serif. % % Alternatively, T7 could be used for math alphabets (if it ever happens to % materialise). % % Upright small Greek letters in ``\mathrm`` would enable the specification of % Myons, Pions, alpha-particles, photons, and neutrinos without special % packages. (With mathdesign_, this is already possible today.) % % Implementation % ************** % % Identification % ============== % :: \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{isomath} [2008/10/02 v0.2 typeset math according to International Standard ISO 31] % .. 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. % ===== ========== ======================================================== % % % Requirements % ============ % % fixmath.sty % ----------- % % The package fixmath_ by Walter Schmidt defines Greek letters as symbols % of type ``\mathalpha`` and takes them from the "letters" SymbolFont in % ``\mathnormal`` (as opposed to "operators" in ``fontmath.ltx``). % % fixmath_ also defines the ``\mathbold`` alphabet, setting it to ``cmm``. % However, this definition will be overwritten with a configurable value for % the font family below.) % % :: \RequirePackage{fixmath} % .. caution:: % % Placing small Greek letters in a math alphabet, e.g. % ``\mathrm{k\Omega}``, can lead to garbage. % % If the chosen font supports the `OML font encoding`_, you can use the % options for `OML math alphabets`_. Otherwise, place Greek letters % outside the math alphabet command. % % Some packages provide ``\up*`` or ``\var*`` macros for upright Greek % letters, e.g. ``\mathrm{k}\upOmega``. % % % 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 % --------- % % Alternative family for roman math fonts. The default is to use the % corresponding text font family (``\rmdefault``) in OMS encoding. % `Table 2`_ lists some fonts where a different setting is advised. % :: \DeclareStringOption[\rmdefault]{rmdefault} % sfdefault % --------- % % Alternative family for sans-serif math fonts. The default is to use the % corresponding text font family (``\sfdefault``) in OMS encoding. % % Computer Modern Sans Serif (cmss) has no OMS encoded variant. Nor have many % derivatives (lmss, aess, ...). Actually, there are only a few OML-encoded % sans-serif fonts (all slanted/italic): % % :zavm: arev_ (Vera Sans with math extension, large x-hight) % :cmbr: cmbright_ (Computer Modern Bright, slightly lighter than cmss) % :iwona: iwona_ (Humanistic Sans Serif, some shapes very similar to roman) % :hvm: hvmath_ (Helvetica Math, commercial, free bitmap version) % :llcmm: lxfonts_ (LX Fonts, very wide, excentric, large x-hight, new in 2008) % % For most fonts (especially CM and related), ``[sfdefault=cmbr]`` is the % recommended setting. % % :: \DeclareStringOption[\sfdefault]{sfdefault} % TODO % Allow scaling? % % % 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. % % To access the upright shapes, the corresponding ``\textbf`` and ``\textsf`` % commands might be used (however, this toggles the math-mode off and % might use a different font). % % :: \DeclareBoolOption{reuseMathAlphabets} % .. caution:: % Do not use ``reuseMathAlphabets`` together with the ``OMLmathbf`` or % ``OMLmathsf`` options. % % % OML math alphabets % ------------------ % % With Greek letters defined as ``\mathalpha``, the math alphabets are % expected to be in `OML font encoding`_. Unfortunately, the standard math % alphabets are usually taken from OT1 encoded fonts that have ligatures and % non-alpha symbols in place of the small Greek letters. % % The following options cause isomath to (re)define `math alphabets`_ in OML % encoding:: \DeclareBoolOption{OMLmathrm} \DeclareBoolOption{OMLmathbf} \DeclareBoolOption{OMLmathsf} \DeclareBoolOption{OMLmathsans} \DeclareBoolOption{OMLmathtt} % Setting these options enables access to small Greek letters in different % shapes with e.g. ``\mathrm{\pi}`` — *if an OML encoded font is available*. % Currently, support for the `OML font encoding`_ is rather limited: % % * only the mathdesign_ fonts support *bold roman* in OML encoding, while % * many font packages define an italic font as OML replacement for a roman % font. % % 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]_. % This correlates with the `Unicode math support`_ where the % `mathematical alphanumeric symbols`_ block defines distinct Unicode % characters for in Greek and Latin letters in different typefaces. % % 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 carefull not to exceed this. % % mathbold % """""""" % % The *italic bold* math alphabet is named ``\mathbold`` like in % `related packages`_. With the reuseMathAlphabets_ option, ``\mathfb`` % is redefined and ``\mathbold`` made an alias (overwriting existing % definitions):: \ifisomath@reuseMathAlphabets \DeclareMathAlphabet{\mathbf}{OML}{\isomath@rmdefault}{bx}{it} \def\mathbold{\mathbf} \else \DeclareMathAlphabet{\mathbold}{OML}{\isomath@rmdefault}{bx}{it} \fi % mathsans % """""""" % % For *italic sans-serif*, we define a new alphabet named ``\mathsans`` (in % analogy to ``\mathbold``). As this typeface is not required by ISO 31, it is % only defined if the ``OMLmathsans`` option is set:: \ifisomath@OMLmathsans \DeclareMathAlphabet{\mathsans}{OML}{\isomath@sfdefault}{m}{it} \fi % mathboldsans % """""""""""" % % A *sans serif slanted bold* alphabet is needed for tensor symbols. With the % reuseMathAlphabets_ option, ``\mathsf`` is redefined and ``\mathboldsans`` % made an alias:: \ifisomath@reuseMathAlphabets \DeclareMathAlphabet{\mathsf}{OML}{\isomath@sfdefault}{bx}{it} \def\mathboldsans{\mathsf} \else \DeclareMathAlphabet{\mathboldsans}{OML}{\isomath@sfdefault}{bx}{it} \fi % Redefine standard alphabets % """"""""""""""""""""""""""" % % Redefine standard alphabets in `OML font encoding`_ % if the corresponding `OML math alphabets`_ option is true:: \ifisomath@OMLmathrm \SetMathAlphabet{\mathrm}{normal}{OML}{\isomath@rmdefault}{n}{n} \fi \ifisomath@OMLmathbf \SetMathAlphabet{\mathbf}{normal}{OML}{\isomath@rmdefault}{b}{n} \fi \ifisomath@OMLmathsf \SetMathAlphabet{\mathsf}{normal}{OML}{\isomath@sfdefault}{n}{n} \fi \ifisomath@OMLmathtt \SetMathAlphabet{\mathtt}{normal}{OML}{\ttdefault}{n}{n} \fi % Command aliases % --------------- % % The following macros allow semantic markup of mathematical symbols. % The argument is typeset as proposed by ISO 31 and [typefaces]_. % % \\vectorsym % """"""""""" % % Symbols for vectors are typeset *boldface italic*:: \newcommand{\vectorsym}{\mathbold} % 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 (cf. the Examples_ section). % % \\matrixsym % """"""""""" % % Symbols for matrices are typeset *boldface italic*, i. e. in the same face % as vectors. :: \newcommand{\matrixsym}{\mathbold} % \\tensorsym % """"""""""" % % Symbols for tensors are *sans-serif bold italic*:: \newcommand{\tensorsym}{\mathboldsans} % Font mappings % ------------- % % Some font packages provide a matching math font but do not define a % substitution in their ``*.fd`` files. % % We define the substitutions needed for the math alphabet definitions in this % package. Ideally, these should become part of a more complete set of % definitions in the package's ``*.fd`` files: % % 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}{} % Arev (arev): fav -> zavm :: \DeclareFontFamily{OML}{fav}{} \DeclareFontShape{OML}{fav}{m}{it}{<->ssub * zavm/m/it}{} \DeclareFontShape{OML}{fav}{bx}{it}{<->ssub * zavm/b/it}{} % LX Fonts (lxfonts): llcmss -> llcmm :: % repeat font declarations from lxfonts.sty \DeclareFontFamily{OML}{llcmm}{\skewchar\font'177} \DeclareFontShape{OML}{llcmm}{m}{it}{<-> lcmmi8}{} \DeclareFontShape{OML}{llcmm}{bx}{it}{<-> lcmmib8}{} \DeclareFontFamily{OML}{llcmss}{} \DeclareFontShape{OML}{llcmss}{m}{it}{<-> ssub * llcmm/m/it}{} \DeclareFontShape{OML}{llcmss}{bx}{it}{<-> ssub * llcmm/bx/it}{} % No declarations below this point:: \endinput % References % ********** % % .. [ISO-31] International Standard 31 `Quantities and units`, % (ISO 31-0:1992 to ISO 31-14:1992): % http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_tc_browse.htm?commid=46202 % % .. [typefaces] `Typefaces for Symbols in Scientific Manuscripts`: % http://physics.nist.gov/Document/typefaces.pdf % % .. [fonts-for-symbols] `On the use of italic and roman fonts for symbols in % scientific text`, (Revised December 1999): % http://old.iupac.org/standing/idcns/fonts_for_symbols.html % % .. [SI-brochure] `The International System of Units (SI)`: % http://www.bipm.org/en/si/si_brochure/ % % .. [encguide] `LaTeX font encodings`: % http://dante.ctan.org/CTAN/macros/latex/doc/encguide.pdf % % .. [fntguide] `LaTeX 2e font selection`: % http://dante.ctan.org/CTAN/macros/latex/doc/fntguide.pdf % % .. [tr25] `Unicode Support for Mathematics`, Unicode Technical Report #25: % http://www.unicode.org/reports/tr25/ % % .. see also % [koma-mail] Custom font substitution: http://www.komascript.de/node/823 % % [Green-Book] `Quantities, Units and Symbols in Physical Chemistry`, % 3rd edition, RSC Publishing, Cambridge 2007: % [ISBN 0 85404 433 7; ISBN-13 978 0 85404 433 7] % % .. Links % .. ***** % % .. _BIPM: http://www.bipm.org/ % .. _IUPAC: http://iupac.org/ % .. _IUPAP: http://www.iupap.org/ % .. _NIST: http://physics.nist.gov/ % .. _mathematical alphanumeric symbols: % http://www.unicode.org/charts/PDF/U1D400.pdf % .. _arev: http://dante.ctan.org/CTAN/help/Catalogue/entries/arev.html % .. _cmbright: http://dante.ctan.org/CTAN/help/Catalogue/entries/cmbright.html % .. _eulervm: http://dante.ctan.org/CTAN/help/Catalogue/entries/eulervm.html % .. _fixmath: http://dante.ctan.org/CTAN/help/Catalogue/entries/fixmath.html % .. _fix-cm: http://dante.ctan.org/CTAN/help/Catalogue/entries/fix-cm.html % .. _fourier: http://dante.ctan.org/CTAN/help/Catalogue/entries/fourier.html % .. _hvmath: http://dante.ctan.org/CTAN/help/Catalogue/entries/hvmath.html % .. _ifthen: http://dante.ctan.org/CTAN/help/Catalogue/entries/ifthen.html % .. _iwona: http://dante.ctan.org/CTAN/help/Catalogue/entries/iwona.html % .. _kpfonts: http://dante.ctan.org/CTAN/help/Catalogue/entries/kpfonts.html % .. _kvoptions: http://dante.ctan.org/CTAN/help/Catalogue/entries/kvoptions.html % .. _keyval: http://dante.ctan.org/CTAN/help/Catalogue/entries/keyval.html % .. _lxfonts: http://dante.ctan.org/CTAN/help/Catalogue/entries/lxfonts.html % .. _mathdesign: http://dante.ctan.org/CTAN/help/Catalogue/entries/mathdesign.html % .. _mathpazo: http://dante.ctan.org/CTAN/help/Catalogue/entries/mathpazo.html % .. _oberdiek: http://dante.ctan.org/CTAN/help/Catalogue/entries/oberdiek.html % .. _sfmath: http://dtrx.de/od/tex/sfmath.html % .. _pxfonts: http://dante.ctan.org/CTAN/help/Catalogue/entries/pxfonts.html % .. _tmmath: http://dante.ctan.org/CTAN/help/Catalogue/entries/tmmath.html % .. _txfonts: http://dante.ctan.org/CTAN/help/Catalogue/entries/txfonts.html