ISO/JIS math typesetting rules

Scientific mathematics follows an international convention about what is set in italic and what is set upright (roman), and the convention is ISO 80000-2, adopted in Japan as JIS Z 8000-2. The rule itself fits on one line: what can vary is italic, what has a fixed meaning is upright. Write LaTeX naturally, though, and the rules split cleanly into two piles. \sin, \partial and the digits are already right, while the base e, the imaginary unit i, the differential d and the constant π come out italic by default — that is, non-compliant. This page sorts out what the standard asks for and how to satisfy it in LaTeX with \mathrm{d}x, \uppi, isomath and unicode-math’s math-style=ISO, checking the result by pulling the actual character codes back out of the PDF.

ISO 80000-2 and JIS Z 8000-2 (formerly JIS Z 8201)

ISO 80000-2 (Quantities and units — Part 2: Mathematics) is the international standard that fixes both the meaning of mathematical symbols and how they are to be set — their typeface. The current text is the 2019 second edition (the first was 2009), with a corrected version issued in November 2021. Japan adopted it as an identical standard: JIS Z 8000-2:2022, “Quantities and units — Part 2: Mathematical signs and symbols”, published in 2022, whereupon JIS Z 8201:1981, which had served for more than forty years, was withdrawn on 22 March 2022. Older textbooks and in-house style rules still name JIS Z 8201, or its ancestor ISO 31-11, but the authority today is ISO 80000-2 / JIS Z 8000-2.

Why should a standard reach all the way down to the typeface? Because in mathematics the typeface itself carries meaning. Depending on context, e may be a variable or the base of the natural logarithm, 2.718…; set the variable in italic and the constant upright and a reader tells them apart with no annotation. The standard fixes that distinction into a worldwide rule so notation does not drift between papers, textbooks and technical documents — and the drift does real damage: if a quantity symbol and a unit symbol share a typeface, nobody can tell whether m is a mass or a metre. Setting your mathematics in LaTeX is a strong starting point for compliance, because in math mode letters slope automatically while function names like \sin and ordinary digits are upright from the outset.

The core rule: variable means italic, fixed means upright

One idea sits at the centre of the standard: a quantity whose value can change with the context is italic; anything with a uniquely fixed meaning or value is upright. Variables such as x and y, parameters like a and b that are treated as constant for the moment, and generic function symbols f and g all have unfixed values, so they are italic — and that is exactly LaTeX’s math-mode default, so you comply for free. On the other side, mathematical constants with a settled value (e, i, π), the differential operator d and its relatives (the partial ∂ and so on), systematically defined function names (sin, exp, ln, Γ), and digits and unit symbols are upright. The standard’s position is simple: none of these is a variable, so none may wear the variable’s typeface.

When a case is doubtful, the quick test is: could this symbol be renamed to another letter? Rename x to t and the formula still means what it meant — so it is a variable, and italic. You cannot rename the d in an integral’s dx; it is an operator with a fixed meaning, and therefore upright. The same test explains why you cannot rename the s in \sin or the k in \mathrm{kg}.

Upright or italic at a glance: how far LaTeX’s defaults get you

The short answer: LaTeX already satisfies function names, the partial sign ∂, digits and capital Greek, and leaves you to handle e, i, π, the differential operator d, units, and vectors and tensors. In the table below, “default OK” means plain math mode already sets it as the standard requires, and “needs action” means you must make it upright — or bold italic — explicitly.

ItemPer the standardHow to write it in LaTeX
variablesVariables and quantities x, y, t are italicx (the math-mode default — OK)
parametersParameters and generic functions a, b, f, g are italica, f(x) (default — OK)
\mathrm{e}The base of the natural logarithm, e, is upright\mathrm{e}. A plain e is italic and non-compliant. Needs action
\mathrm{i}The imaginary unit i (j in electrical engineering) is upright\mathrm{i} / \mathrm{j}. Needs action
\uppiThe constant π is upright\uppi (from upgreek or unicode-math). A plain \pi is italic. Needs action
\mathrm{d}The differential operator d is upright\mathrm{d}x. A plain d is italic and non-compliant. Needs action
\partialThe partial-derivative sign ∂ is upright\partial (already upright — OK)
\sinDefined functions sin, exp, ln are upright\sin, \exp, \ln (already upright — OK)
\GammaCapital Greek used as a function, Γ, is upright\Gamma (upright by default in standard LaTeX — OK; but see the section below)
digitsThe digits 0–9 are upright123 (already upright — OK)
\unitUnit symbols m, kg, s are uprightsiunitx \unit{} / \qty{}{}. Needs action
\vectorsymVectors and matrices a, A are bold italic\bm{a}, or isomath’s \vectorsym{a}. Needs action
\tensorsymTensors T are sans-serif bold italicisomath’s \tensorsym{T}. Needs action

\mathrm{d}x: making the differential d and the constants e and i upright

The answer to the most frequent question is short: wrap it in \mathrm{…}. In LaTeX math mode e, i and d are just letters and come out as italic variables, but \mathrm{e}, \mathrm{i} and \mathrm{d} are upright and clearly distinct from a variable e or d. Inside an integral the convention is to add a thin space, as in \int_0^1 x^2 \,\mathrm{d}x (the standard does not legislate the amount of space, but the practice is near-universal for legibility). One correction while we are here. You will sometimes see a command \mathup, but it is not defined by isomath. unicode-math defines \mathup as an alias for \mathrm, and kpfonts and mismath, among others, have their own. Measured under unicode-math, all three of \mathrm{d}, \mathup{d} and \symup{d} produced U+0064 — a plain upright d — while a bare d gave U+1D451, the math-italic d. \mathup is a synonym for \mathrm, not a different thing.

Typing \mathrm{d} every time is tiresome, and you will certainly forget it somewhere. The standard move is therefore to define a short command once, in the preamble. With \newcommand{\dd}{\mathrm{d}} you write \dd x in the body, and if the policy changes later you edit one line and the whole document follows. Scatter literal \mathrm{d} through the text instead and you are stuck the day someone asks for the italic d back. Think of complying with the standard as an exercise in naming your conventions and keeping them in one place.

document.tex
% define once in the preamble
\newcommand{\dd}{\mathrm{d}}   % upright differential operator
\newcommand{\eu}{\mathrm{e}}   % base of the natural logarithm
\newcommand{\iu}{\mathrm{i}}   % imaginary unit
% ...
\[
  \eu^{\iu\uppi} + 1 = 0, \qquad
  \frac{\dd}{\dd x}\,\eu^{x} = \eu^{x}, \qquad
  \int_0^{\infty} \eu^{-x}\,\dd x = 1.
\]

The \uppi trap: an upright π drags in another typeface

The usual way to get an upright π is \uppi from the upgreek package, but it carries a cost that is easy to miss: upgreek defaults to Euler Roman. The line \ExecuteOptions{Euler} inside the package says so, and sure enough, compiling $\uppi$ after \usepackage{upgreek} embeds EURM10 — a face from the Euler family designed by Hermann Zapf. Your Computer Modern document now carries one glyph by a different designer. If that bothers you, \usepackage[Symbol]{upgreek} takes the letters from URW Symbol (StandardSymL) instead. Which is better depends on your text face, so look at the output before deciding.

One more thing worth knowing: upgreek supplies only lowercase Greek. \upalpha through \upomega are all there, but \upGamma is not defined and writing it yields ! Undefined control sequence. That is design rather than omission — in standard LaTeX capital Greek is already upright. And if you use unicode-math you do not need upgreek at all: that package generates both \uppi and \upGamma automatically, as shorthands for \symup{…}.

Upright capital Greek is a TeX convention, not an ISO rule

Standard LaTeX sets \Gamma, \Omega and the other capital Greek letters upright. That is Knuth’s TeX tradition, not a requirement of ISO 80000-2. As the standard sees it, a capital Greek letter used as a variable — an angle Θ, say — should slope like any other variable, and only a function with a settled name, such as the gamma function Γ, is entitled to stay upright. The machinery is startlingly simple: in standard LaTeX \Gamma is \mathchar"7000, that is, family 0, the upright operators family. fixmath (by Walter Schmidt), which isomath loads internally, changes it to \mathchar"7100. One hexadecimal digit moves capital Greek into family 1, the math-italic letters family — and, as a bonus, makes \mathbf and the other math alphabets reach it.

If you would rather not pull in all of isomath, a pdfLaTeX document can often get the same result from an option to its math-font package. newtxmath offers slantedGreek and uprightGreek; measured, \usepackage[slantedGreek]{newtxmath} changed \Gamma to \mathchar"7100, where its default is \mathchar"7400. There is also a frenchmath option for documents that follow French practice. Whichever route you take, the important thing is to decide the slope of capital Greek once for the whole document and never waver. If Θ is italic on one page and upright on the next, readers will wonder whether they are looking at two different quantities.

What math-style=ISO actually changes: the code points, measured

If you are on XeLaTeX or LuaLaTeX with unicode-math, the whole typeface policy switches on one key: math-style=, whose values are TeX (the default), ISO, french, upright and literal. The effect is measurable rather than a matter of belief. The table below comes from setting $\Gamma\ \alpha\ A\ a\ \partial\ \pi$ under LuaLaTeX, pulling the characters back out of the PDF and listing their Unicode code points. Switch to math-style=ISO and capital Greek Γ visibly moves from U+0393 (upright) to U+1D6E4 (math italic). That is precisely the point where the standard and the TeX tradition collide.

SettingCapital Greek ΓLowercase Greek αPartial ∂Latin lowercase a
math-style=TeXU+0393 uprightU+1D6FC italicU+1D715 italicU+1D44E italic
math-style=ISOU+1D6E4 italicU+1D6FC italicU+1D715 italicU+1D44E italic
math-style=frenchU+0393 uprightU+03B1 uprightU+2202 uprightU+1D44E italic
math-style=uprightU+0393 uprightU+03B1 uprightU+2202 uprightU+0061 upright

Two things follow from that table. First, math-style=ISO leaves π italic (U+1D70B). The standard wants the constant π upright, but unicode-math has no way of telling a constant π from a variable π, so the \uppi (or \symup{\pi}) of the previous section is still needed after you set ISO style. Second, the very existence of the value math-style=french is telling: French typographic practice sets Greek upright in both cases and capital Latin upright too. There is no single “correct” typeface policy — there are regional traditions, and the package acknowledges that by making one an option. Bold has its own key, bold-style=; with the default TeX value, \symbf{v} is bold upright (U+1D42F). For the bold italic vectors the standard asks for, set bold-style=ISO or use \symbfit (U+1D497).

document.tex
% compile with xelatex or lualatex
\usepackage{amsmath}
\usepackage[math-style=ISO,bold-style=ISO]{unicode-math}
\setmathfont{STIX Two Math}
% ...
\[
  \symup{e}^{\symup{i}\uppi} + 1 = 0, \qquad
  \int_0^1 x^2 \,\symup{d}x = \frac{1}{3}, \qquad
  \symbfit{v} = \symbfit{A}\,\symbfit{x}.
\]

Vectors in bold italic, tensors in sans-serif bold italic

The standard also prescribes a typeface per kind of quantity: vectors and matrices in bold italic, tensors in sans-serif bold italic. The biggest trap here is that the familiar \mathbf{v} produces bold upright, which is not the bold italic the standard asks for. The quick fix is \bm{v} from the bm package, which adds weight while keeping the slant. For a more faithful implementation there is isomath, which offers \vectorsym{v}, \matrixsym{A} and \tensorsym{T}commands named after meanings. That naming pays off in practice: coming back to your source six months later, \bm{A} tells you nothing about whether A is a matrix, a vector or mere emphasis, whereas \matrixsym{A} tells you at a glance.

Be aware, though, that isomath quietly does two things. First, it redefines \mathbf as bold italic (the OML encoding, bx/it). That follows the standard, but it changes the appearance of an existing manuscript that used \mathbf as an upright bold, so review the whole text if you adopt it midway. Second, because it loads fixmath internally, capital Greek becomes italic. One more detail: Computer Modern has no sans-serif bold italic for maths, so using \tensorsym puts a font-substitution note in the log — Font shape OML/cmbr/bx/it in size <10> not available — which is information, not an error. In the measured run the cmbright family stood in. In a document full of tensors it is worth looking once at the substitute and deciding whether you are happy with it.

document.tex
\usepackage{isomath}   % loads fixmath: capital Greek becomes italic
% NOTE: isomath also redefines \mathbf as bold ITALIC (OML bx/it)
% ...
\[
  \vectorsym{v} = \matrixsym{A}\,\vectorsym{x},
  \qquad
  \tensorsym{T}_{ij}.
\]

A practical policy: how far to comply, where to compromise

Whether to follow the standard strictly or lean on local custom depends on the document. The deciding question is plain: does the journal or the house style require ISO/JIS compliance? If it does, the policy below is enough. If it does not, a partial adoption is perfectly reasonable — bringing in just \mathrm{d}, say, which improves legibility in any field. Whatever you choose, keep the policy uniform within a document. Nothing confuses a reader faster than the same symbol appearing italic on one page and upright on the next.

  • Make e, i and d upright. Define \dd, \eu and \iu as \mathrm{…} in the preamble and write only the short commands in the body.
  • For a strict π, use \uppi from upgreek — but its default brings in Euler Roman shapes, so compare against the [Symbol] option before you settle.
  • Leave units to siunitx. Avoid hand-written \mathrm{…}; use \unit{} and \qty{}{}, which get the spacing and compound units right by construction.
  • Vectors and matrices are bold italic. Not \mathbf (bold upright) but \bm, or the standard-conforming \vectorsym / \matrixsym / \tensorsym of isomath.
  • Function names, the partial sign and digits need nothing. \sin, \cos, \log, \lim, \partial and 123 already satisfy the standard. For a function name of your own, \DeclareMathOperator{\rank}{rank} from amsmath gives the same upright shape and spacing.
  • Decide once on capital Greek and never move it. To slope it, use isomath (via fixmath), newtxmath’s slantedGreek, or math-style=ISO.

A closing word about the physics package. It looks attractive because it hands you an upright \dd for differentials and a \dv for derivatives, but its command names are known to clash with other packages. Loading physics and siunitx together in a test made them fight over the definition of \qty, producing ! Missing $ inserted. and ! Extra }, or forgotten $. (a physics-patch exists to repair this, and lately alternatives such as the derivative package are also used). That story is told in full on the page devoted to physics. Units themselves are the siunitx page’s subject, so go there if you need compound units or significant figures. Being conscious of what a typeface means and applying it consistently — in the end, that is all compliance really is.