.. -*- rst-mode -*- isomath: Math for scientists **************************** :Author: Günter Milde :Date: 2010-08-23 :Copyright: © 2008, 2010 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 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. .. contents:: .. sectnum:: Motivation ---------- .. How do you 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]_.\ [#]_ .. [#] Summaries of these rules are free available, see [typefaces]_, [checklist]_, [fonts_for_symbols]_, and [SI-brochure]_. 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 the Greek and 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. Features -------- .. _`equal treatment of Latin and Greek`: Equal treatment of Latin and Greek letters ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This feature is provided by the required package fixmath_ which ensures that: + Both, Greek and Latin letters change shape if a different math alphabet is used. + By default, uppercase Greek letters are typeset in italic style. However, `fixmath` works only for Computer Modern. With `isomath`, + the used math fonts are configurable (using the rmdefault_ and sfdefault_ options), and + upright Greek letters can be made available through the common ``\math*`` alphabets via the OMLmath_ options, if the corresponding fonts support the `OML font encoding`_. Caution: Placing Greek letters in a ``\math*`` macro, e. g. ``\mathrm{k\Omega}``, can lead to garbage, as the standard math alphabets are usually taken from text fonts that have ligatures and non-alpha symbols in place of the small Greek letters. Do not use Greek letters in the standard math alphabet commands ``mathit``, ``mathrm``, ``mathbf``, ``mathsf``, and ``mathtt`` unless you use the OMLmath_ options.\ [#]_ .. [#] Some packages provide ``\up*`` or ``\var*`` macros for upright Greek letters so the above example could be written ``\mathrm{k}\upOmega``. New math alphabets ~~~~~~~~~~~~~~~~~~ New math alphabets are defined: :``\mathbold``: boldface italic (vector and matrix symbols), :``\mathboldsans``: sans-serif bold italic (tensor symbols). :``\mathsans``: sans-serif italic (optional), The rmdefault_ and sfdefault_ options set the font family used for these alphabets. Command aliases ~~~~~~~~~~~~~~~ The command aliases ``\vectorsym``, ``\matrixsym``, and ``\tensorsym`` allow semantic markup. They print the argument in an ISO-conforming typeface. Font mappings ~~~~~~~~~~~~~ Some font definitions are added 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 (see also Examples_). Options ~~~~~~~ rmdefault ''''''''' Family for serif math fonts (roman and kursive). The default is to use the corresponding text font family (the value of ``\rmdefault``). The font must be available in `OML font encoding`_. sfdefault ''''''''' Family for sans-serif math fonts. The default is ``cmbr`` because many sans-serif fonts define the Computer Roman font `cmm` as OML substitution (see `Table 2`_). There are only few sans serif `fonts that support the OML encoding`_: .. class:: booktab ========== =========== =================================================== Name Package Comment ========== =========== =================================================== ``cmbr`` cmbright_ `Computer Modern Bright`, bitmap, slightly lighter than cmss (Type 1 fonts with hfbright_) ``fav`` arev_ `Arev` (`Vera Sans`) with math extension, large x-hight ``iwona`` iwona_ Humanistic Sans Serif, some shapes very similar to roman ``hvm`` hvmath_ `Helvetica Math`, commercial, free bitmap version ``llcmss`` lxfonts_ `LX Fonts`, very wide, excentric, large x-hight, new in 2008 ========== =========== =================================================== scaled '''''' As the choice of sans serif math fonts is very limited, the fonts, ``fav``, ``llcmss``, and ``iwona`` can be scaled with the ``scaled`` option (see examples_). 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, so watch for side-effects. OMLmath '''''''' 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 or T1 encoded fonts that have ligatures and accents in place of the Greek letters. The following options cause isomath to (re)define math alphabets in OML encoding:: OMLmathrm, OMLmathbf, OMLmathsf, OMLmathsans, 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, only the mathdesign_ package provides upright `fonts that support the OML encoding`_. Many font packages define an italic font as replacement for a roman font in OML encoding. With some packages, these options can result in a “`too many math alphabets used in version normal`_” error. Examples ~~~~~~~~ * Use `isomath` with the default settings:: \usepackage{isomath} * Define also a slanted sans-serif math alphabet:: \usepackage[OMLmathsans]{isomath} * Use the heavier `Arev` sans serif fonts:: \usepackage[sfdefault=fav,scaled=0.875]{isomath} (Adapt the scaling factor to your needs.) * Redefine the standard ``\vec`` macro to typeset its argument in `bold italic`:: \usepackage{isomath} \renewcommand{\vec}{\vectorsym} (Use ``\bm`` or ``boldmath`` for for the zero and unit vectors, as ``\vec{0}`` and ``\vec{1}`` will give undesired results.) * The mathdesign_ package provides an OML encoded *bold roman* font but does not set it up for ``\mathbf``. To set it up, write e.g.:: \usepackage[charter]{mathdesign} \usepackage[OMLmathbf]{isomath} Now, e.g. ``\mathbf{\pi}`` produces a bold upright pi symbol. See also the ``isomath-test.tex`` test document. Related packages ---------------- Requirements ~~~~~~~~~~~~ fixmath_ by Walter Schmidt defines Greek letters as alphabetic symbols. kvoptions_ (in the oberdiek_ bundle) facilitates the setup of package options and provides a key=value interface (based on keyval_). Recommendations ~~~~~~~~~~~~~~~ cmbright_ provides *sans serif* and *sans-serif bold* fonts for the ``\mathsans`` and ``\mathboldsans`` alphabets that match with Computer Modern and derivatives. Free Type 1 versions of the fonts with hfbright_. arev_ provides *sans serif* somewhat heavier letters that are clearly distinguishable from the roman or italic counterparts (important if used to distinguish vectors and tensors). However, `Arev` has a large x-hight, so for most default fonts, either small or capital letters will not match in size. Alternatives ~~~~~~~~~~~~ If the only requirement is a bold italic font for (Latin and Greek) vector symbols, there are established alternatives to `isomath`: * Packages that support `equal treatment of Latin and Greek`_ and provide the ``\mathbold`` alphabet (but not ``\mathsansbold``) in `OML font encoding`_: Roman * eulervm_ (Euler Math), * fixmath_ (Computer Modern), * mathpazo_ (Palatino), * tmmath_ (TM-Math/Times). Sans serif * arev_ (Arev/Vera Sans), * cmbright_ (CM Bright), * hvmath_ (HV-Math/Helvetica), * Packages that provide commands which can be used as replacement for ``\vec``: * `amsbsy`_ (part of `amsmath`_, the near-indispensable adjunct to serious mathematical typesetting in LaTeX) defines ``\boldmath``, * `bm`_ defines a command ``\bm`` which makes its argument bold (more careful than amsbsy's ``\boldmath``). Combining `bm` and `isomath` may lead to the `too many math alphabets used in version normal`_ error. The ``\text`` macro from `amsmath`_ can be used to get e.g. upright or sans-serif bold slanted Greek symbols from a text font into a formula. Conflicts ~~~~~~~~~ * “_`too many math alphabets used in version normal`” This error occurs if the combination of packages tries to load more than 16 fonts into the ‘normal’ math version. It can be avoided with the reuseMathAlphabets_ option (see there for side-effects). Examples for problematic combinations: + The `kpfonts`_, `pxfonts`_, and `txfonts`_ packages define many additional math alphabets. + The `bm`_ package normally allocates several symbol fonts for bold and heavy fonts. Their number can be customized by defining ``\bmmax`` and ``\hmmax`` before loading the package. * 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). However, it is possible to use the symbols from `fourier`_ together with math alphabets from another package, e.g `mathdesign`_:: \usepackage{fourier} \usepackage[OMLmathbf,rmdefault=mdput, sfdefault=arev,scaled=0.85]{isomath} Background ---------- Letter symbols ~~~~~~~~~~~~~~ IUPAC_'s [fonts_for_symbols]_ guide says: 2. The overall rule is that symbols representing physical quantities (or variables) are italic, but symbols representing units, or labels, are roman. […] 3. The above rule applies equally to letter symbols from both the Greek and the Latin alphabet, […]. In contrast, the standard LaTeX style treats Greek letter symbols * as invariant operators, * with lower case italic and upper case upright. A possible fix (established by fixmath_) is using a common font for Greek and Latin letters. There is one established font encoding providing Latin and Greek letters: the `OML font encoding`_. However, * support_ for OML is limited to a few (mostly italic) fonts. * The widely supported but non-standard `LGR` font encoding has Greek but no Latin letters, while * the standard Greek font encoding `T7` is just a “reserved name”. OML font encoding ~~~~~~~~~~~~~~~~~ The `LaTeX font encodings` guide [encguide]_ names the OML encoding `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. The reference to *italic* shape is odd: * No other font encoding is specific to the font shape. * The different font selection and the semantic of font features in math do not interfere with the font *encoding*: Both, ``\DeclareSymbolFont`` and ``\DeclareMathAlphabet`` require a shape argument. Thus it is possible to set up OML encoded math alphabets in roman {n} as well as italic {it} shape without conflicts. This seems to be a remnant of pre-NFSS times – there is only one OML encoded font in Knuth's Computer Modern fonts: `Computer Modern Math Italic` (cmmi) – rather than a necessary restriction. Proposals: * Drop the *italic* from the definition. Optionally add an explanation: The OML encoding contains Latin and Greek letters for use in mathematical formulas (typically used for variables) together with some symbols. It first appeared in the `Computer Modern Math Italic` (cmmi) font. * The name `TeX math italic` can be interpreted as “the encoding **of** `Computer Modern Math Italic`” rather than “an encoding **for** math italic” fonts. A less confusing 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 grepping for ``DeclareFont.*OML`` in ``*.sty`` files. `Table 1`_ lists the findings for a selection of TeXLive + some additonally installed font packages. * 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 upright shape, however mapping to an italic variant of the OML encoded font. These are not listed as supporting ``m/n`` or ``bx/n`` here. `Table 2`_ lists some fonts that define ``cmm`` as OML substitution. With isomath, a better matching substitution can be set using the rmdefault_ or sfdefault_ options. .. _Table 1: .. table:: _`Fonts that support the OML encoding` ============= =========================== ======= ======== ====== ======= 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 kurier Kurier x x mdbch Math Design Charter x x x x mdput Math Design Utopia x x x x mdugm Math Design Garamond x 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 udidot Didot (gfsdidot) x ywclm (greektex) x x zavm Arev (Vera Sans-Serif) x x zesfcm (efont) x zplm Palatino (mathpazo) x x zpple Palatino x x ztmcm Times (mathptmx) x zer Computer Modern (zefonts) x x ============= =========================== ======= ======== ====== ======= .. _Table 2: .. table:: Non-CM fonts with ``cmm`` as OML substitution ============= =============================== 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) ============= =============================== Math in Unicode ~~~~~~~~~~~~~~~ Basis for the definition of the Unicode block `mathematical alphanumeric symbols`_, was the consideration outlined in [beeton:2000]_: These alphabets are needed for proper composition of mathematics: * lightface upright Latin, Greek and digits * boldface upright Latin, Greek and digits * lightface italic Latin, Greek and digits * boldface italic Latin, Greek and digits * script * fraktur * bold fraktur * open-face (blackboard bold) including digits * lightface upright sans serif Latin and digits * lightface italic sans serif Latin * boldface upright sans serif Latin, Greek, and digits * boldface italic sans serif Latin and Greek * monospace Latin and digits Except for the lightface upright letters and digits, which are to be encoded using the base Unicodes (ASCII for the Latin letters and digits), the alphanumerics are to be placed in a tightly packed block (U+D400–D7FF) in plane 1, so that they can be used for math (most likely via entity names in MathML), but will be very difficult to access for other purposes. The technical report `Unicode Support for Mathematics` [tr25]_ lists “alphanumeric symbols encountered in mathematics” in table 2: `Mathematical Alphabets`. The Unicode block `mathematical alphanumeric symbols`_ provides style variants for Latin and Greek letters and digits. It is labelled “to be used for mathematical variables where style variations are important semantically”. `Table 3`_ gives a survey of current LaTeX support. .. _table 3: .. table:: Styles in the `mathematical alphanumeric symbols`_ Unicode block :class: booktab ================= ======= ================= ========================== Style Symbols LaTeX macro Package, Comment [#]_ ================= ======= ================= ========================== bold LGD ``\mathbf`` no Greek italic LG ``\mathit`` no Greek \ ``\mathnormal`` small Greek but old-style digits (upright) bold italic LG ``\mathbold`` fixmath and friends \ ``\boldsymbol`` ams script L ``\mathcal`` or only capital Latin (calligraphic) ``\mathscr`` bold script L fraktur L ``\mathfrak`` eufrak double-struck L D ``\mathbb`` bbold, mathbbol, mbboard \ ``\mathbbm`` bbm \ ``\mathds`` dsfont bold fraktur L sans-serif L D ``\mathsf`` no Greek sans-serif bold LGD sans-serif italic L ``\mathsans`` isomath sans bold italic LG ``\mathboldsans`` isomath monospace L D ``\mathtt`` no Greek ----------------- ------- ----------------- -------------------------- *Not in the mathematical alphanumeric symbols block*: ---------------------------------------------------------------------- plain LGD ``\mathrm`` no Greek \ ``\mathnormal`` capital Greek ================= ======= ================= ========================== .. [#] LGD: **L**\ atin, **G**\ reek, **D**\ igits 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, the T7 encoding could be used for math alphabets (if it ever happens to materialise). Upright small Greek letters in ``\mathrm`` would enable the specification of the constant pi, Myons, Pions, alpha-particles, photons, and neutrinos without special packages. (With mathdesign_, this is already possible today.) 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 .. [checklist] `SI Unit rules and style conventions` Check List for Reviewing Manuscripts: http://physics.nist.gov/cuu/Units/checklist.html .. [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://mirror.ctan.org/macros/latex/doc/encguide.pdf .. [fntguide] `LaTeX 2e font selection`: http://mirror.ctan.org/macros/latex/doc/fntguide.pdf .. [tr25] `Unicode Support for Mathematics`, Unicode Technical Report #25: http://www.unicode.org/reports/tr25/ .. [beeton:2000] Barbara Beeton: `Unicode and math, a combination whose time has come – Finally!`, TUGBoat, 21#3, 2000. available: http://www.tug.org/TUGboat/Articles/tb21-3/tb68beet.pdf. .. 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 ===== .. Print external links as footnotes (currently errors with LaTeX) .. target-notes:: .. _LaTeX Project Public License: http://www.latex-project.org/lppl.txt .. _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 .. _amsbsy: http://dante.ctan.org/CTAN/help/Catalogue/entries/amsbsy.html .. _amsmath: http://dante.ctan.org/CTAN/help/Catalogue/entries/amsmath.html .. _arev: http://dante.ctan.org/CTAN/help/Catalogue/entries/arev.html .. _bm: http://dante.ctan.org/CTAN/help/Catalogue/entries/bm.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 .. _hfbright: http://dante.ctan.org/CTAN/help/Catalogue/entries/hfbright.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